资源共享吧|易语言论坛|逆向破解教程|辅助开发教程|网络安全教程|www.zygx8.com|我的开发技术随记

 找回密码
 注册成为正式会员
查看: 1144|回复: 0

[网络安全/渗透测试] thinkphp5远程代码执行

[复制链接]

184

主题

347

帖子

14

精华

资源共享吧豪华贵族SVIP

Rank: 9Rank: 9Rank: 9

资源币
18816
积分
3920
贡献
1368
在线时间
1084 小时
注册时间
2015-4-18
最后登录
2020-2-22

终身成就常驻居民幽默大师灌水大师原创先锋精华会员资源共享吧女神宣传大使爱心大使

发表于 2019-5-20 15:48:31 | 显示全部楼层 |阅读模式
thinkphp5远程代码执行

影响范围:5.x < 5.1.31, <= 5.0.23
危害:远程代码执行
漏洞分析
分析补丁:
802f284bec821a608e7543d91126abc5901b2815。
路由信息中controller的部分进行了过滤,可知问题出现在路由调度时。
t01.png
以5.1.23版本进行分析,执行路由调度的代码如下:
t02.png

其中使用了$this->app->controller方法来实例化控制器,然后调用实例中的方法。跟进controller方法:

t03.png

其中通过parseModuleAndClass方法解析出$module和$class,然后实例化$class。
而parseModuleAndClass方法中,当$name以反斜线\开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。
接着,我们再往回看路由解析的代码。其中route/dispatch/Url.php:: parseUrl方法调用了route/Rule.php:: parseUrlPath来解析pathinfo中的路由信息
t04.png
代码比较简单,就是使用/对$url进行分割,未进行任何过滤。
其中的路由url从Request::path()中获取
t05.png

由于var_pathinfo的默认配置为s,我们可利用$_GET[‘s’]来传递路由信息,也可利用pathinfo来传递,但测试时windows环境下会将$_SERVER[‘pathinfo’]中的\替换为/。
结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化\namespace\class类并执行method方法。
然而利用过程中会存在一些限制,部分类在实例化时由于缺少参数而报错。
经过一番寻找,在\think\Request类中找到可以利用的方法input。以下为执行phpinfo

t06.png






回复

使用道具 举报

 点击右侧快捷回复  

本版积分规则

小黑屋|资源共享吧 ( 琼ICP备2021005790号-1 )

GMT+8, 2024-4-18 23:16 , Processed in 0.049975 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表