0x00 前言
团队内部进行了一次awd演练,其中web服务器环境基于thinkphp v5.0.7
。包含两个个框架通用漏洞,四个魔改过的漏洞,特此记录一下。
0x01 thinkphp5 Request 远程代码执行漏洞
该漏洞详情及修复可见本人博客thinkphp5 Request 远程代码执行漏洞分析
问题出在核心类Request的method方法。由于未对传入的$method进行限制,导致可以对本类任意方法进行调用且参数可控。
payload1
2//post
_method=__construct&method=get&filter=system&boo=whoami
0x02 thinkphp5.x 远程代码执行漏洞
该漏洞详情及修复可见本人博客thinkphp5.x 远程代码执行漏洞
漏洞的成因是因为在没有开启强制路由的情况下控制器没过滤所引起的远程代码执行漏洞
payload1
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1]
0x03 thinkphp 缓存函数设计缺陷 getshell
该漏洞详情及修复可见本人博客thinkphp 缓存函数设计缺陷 getshell
漏洞成因是因为thinkphp缓存函数未对其缓存内容进行过滤就直接写入缓存文件。该漏洞利用需要能够控制缓存内容并且猜解缓存文件。这里靶场环境给出了这些很好的条件。
首先漏洞出现在后台网站配置,可以使用弱口令admin admin
登陆。
配置后调用save方法保存配置内容,其内容未经过过滤保存到数据库。
当页面再次载入会进入缓存函数,将提交的内容直接进行缓存。
这里很贴心的是直接将缓存目录输出了,不需要进行猜测了。
0x04 sql注入漏洞
问题出现再在index.php/index/index/shipinok
这里直接将获取的ip带入sql查询
跟进getIP()函数,发现未对ip进新过滤。
直接构造X-Forwarded-For
0x05 任意文件包含
在推广处直接通过post方式获取内容进行了包含
0x06 任意文件上传
该漏洞对thinkphp file类进行了魔改,使上传文件验证规则为空,造成任意文件上传。
文件名为MD5(filename+’x’)
在多处上传中均存在该问题。
这里以代理后台头像上传为例
然后得到文件保存位置即可。