-
-
[原创]CISCN2022-东北赛区半决赛eztp解题思路
-
2022-6-30 15:52 12109
-
这道题就是tp3.x ⽇志包含rce的变种
找到可控点写⼊log然后包含即可
审计源码
在index路由中存在textBox
⽅法
可以看到这个⽅法能够渲染参数
接着看,在list.html
中
联合刚刚的textBox
⼀起来看textBox
有个parse_str函数解析post.query 变量覆盖,⽽ $this->display(T("Home@default/list")); 这⾥渲染了list.html,并且调⽤W⽅法
看渲染完成的php界⾯,这⾥调⽤W⽅法并且参数param是可控的
所以我们重点应该放在parse_str()
和W()
跟进R()
,这⾥会调⽤call_user_func_array
这⾥函数的名字是固定的Home\Widget\queryWidget
但是param参数可控就是,通过$this->assign("array",$array);
赋值给了array
继续跟进queryWidget
可以看到这⾥把array数组⾥的name、tag、 id作为参数去调⽤B⽅法
注意看B
注意这⾥跟的时候必须得传name和id参数,不然就进⼊if
中了,我们构造⼀下
1 | query = name % 253d1 % 2526id % 3d1 % 2526tag % 3d1 |
继续跟进exec
可以看到在这⾥,我们可以执⾏任意类的任意⽅法并且参数可控,但是只有⼀个参数。
这⾥我们需要了解⼀下thinkphp3.2.3的⽂件包含漏洞,关键点就是File.class.php ⾥的变量覆盖
这时候,我们可以利⽤那个⽂件包含漏洞File.class.php中的file.load,可以任意⽂件包含,这时候再配合⽇志写
shell就ok了(⼀定要bp发包)
写⼊shell:
getflag:
1 2 | query = name % 253d \Think\Storage\Driver\ File % 2526id % 3dApplication / Runtime / Logs / Common / 22_0 6_18 .log % 2526tag % 3dload |
赞赏
他的文章
看原图