yusha
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

漏洞发现
上网的时候偶然发现一个小程序后台,并且没有验证码。
见到网站就是曰,既然没有验证直接跑弱口令。
很可惜没跑出来。
本来就是路过,既然没有弱口令就打算放弃了。但是页面随便输入居然报错
原来是十年磨一剑的thinkphp5框架,既然如此就探测一下RCE吧。
ThinkPHP5.*rce
http://XXX.com/?s=captcha
POST:_method=__construct&filter=system&method=GET&s=whoami
页面报错:system() has been disabled
网站php设置disable_function禁用了system()函数,这样报错证明了网站是存在RCE的。
可以尝试用其他函数绕过disable_function。
但我是脚本小子,直接在GITHUB上找EXP。
上传webshell
这里是bewhale师傅的工具:https://github.com/bewhale/thinkphp_gui_tools
显示上传失败,实际上是成功了。
上传小马,冰蝎成功连接。本来到这里就结束了,但是
冰蝎并不能执行命令
此时我脑子里冒出了个想法,尝试用冰蝎自带的反弹shell.
发现仍然不能执行命令(废话)
整理一下思路,脚本能够上传小马,肯定是能执行命令的。既然如此,看脚本源码查看请求的方法?直接抓包,看成功上传WEBshell发起的请求。
一共请求了两种方法,system(),排除。assert()
但assert函数不能执行系统命令,而我的目标是getshell,既然如此只能尝试尝试绕过disable_function
绕过Disable_function
通过assert方法上传寻找漏掉的系统命令执行函数脚本:
https://github.com/l3m0n/Bypass_Disable_functions_Shell
上传并访问,pcntcl_exec可以使用。
用pcntl_exec方法写一个反弹shell脚本,上传并访问页面。
成功getshell
总结
看了大佬的源码,绕过DISABLE_FUNCTION的手段有一下几种:
pcntl_exec绕过
ld_preload绕过: 仅限Linux
ld加载php扩展
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)