Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)

周五下午爆洞能不能让人们好好休个周末!

分析过程

本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控的数据来源:
官方github
lines:501

isset($_POST[Config::get('var_method')

$this->method在取得该数据的值之后动态调用$this->{$this->method}($_POST),漏洞的关键位置即在该位置。攻击者调用该类任意函数,并通过$_POST作为参数。动态调用__construct函数即导致代码执行。

下图为Request类中包含的__construct函数内容(lines:130):从中我们可以看到通过$options参数,攻击者可以覆盖到filter、method属性以及get属性的值。
lines:130

同时在Request当中的param函数(lines:617)中可以看到当$this->arrayParam为空时,即调用$this->get(false)
lines:617

$this->Get函数(lines:673)内容如下:在get函数末端我们可以看到其调用了input函数将攻击者可控的get内容进行了传值。
lines:673

input函数内容如下(lines:976):
lines:976

我们可以看到getFilter(lines:1005),继续跟踪至getFilter函数(lines:1035):
lines:1035

Filter返回后即进入input函数中解析过滤器的if当中,紧接着其调用了filtervValue函数(lines:1059):从中我们不难发现$filter$value均可自行控制。
lines:1059

攻击还原(仅供技术交流,请勿非法测试)

攻击还原

影响范围

5.0.X<Thinkphp<5.0.24

防御方案

版本升级到5.0.24最新版本规避漏洞
参考链接: https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003?diff=split

posted @ 2020-04-17 18:05  303donatello  阅读(424)  评论(0编辑  收藏  举报