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

分析过程

本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控的数据来源:
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第1张
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第2张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

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

下图为Request类中包含的__construct函数内容(lines:130):从中我们可以看到通过$options参数,攻击者可以覆盖到filter、method属性以及get属性的值。
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第3张

同时在Request当中的param函数(lines:617)中可以看到当$this->arrayParam为空时,即调用$this->get(false)
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第4张

$this->Get函数(lines:673)内容如下:在get函数末端我们可以看到其调用了input函数将攻击者可控的get内容进行了传值。
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第5张

input函数内容如下(lines:976):
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第6张

我们可以看到getFilter(lines:1005),继续跟踪至getFilter函数(lines:1035):
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第7张

Filter返回后即进入input函数中解析过滤器的if当中,紧接着其调用了filtervValue函数(lines:1059):从中我们不难发现$filter$value均可自行控制。
Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11) Safe 第8张

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

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

影响范围

5.0.X<Thinkphp<5.0.24

防御方案

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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄