湖湘杯willphp

给了IndexController
在这里插入图片描述

且可以看到版本为Willphp2.1.5
查了一下发现TP3.2.x 利用assign函数RCE的漏洞,因为题中的PHP框架是基于TP的,怀疑存在同样的漏洞,跟进一下发现的确,利用方式差不多只需要稍微改一下
原TP利用姿势 https://0xcreed.jxustctf.top/2021/07/ThinkPHP3-2-x-RCE%E5%A4%8D%E7%8E%B0/
调试过程
在这里插入图片描述
调用assgin会为View->_vars赋值
在这里插入图片描述
index执行view(),进入View的fetch方法
在这里插入图片描述这里会为vfile赋好默认值,不用管,然后把vfile和_vars传入Tple::render()
在这里插入图片描述在这里插入图片描述
C会去调用getConfig,检测config中有没有设置shtml_open,默认感觉是没有的,所以函数shtml_open为false,进入renderTo
在这里插入图片描述在这里插入图片描述
extract把上面设定好的cfile覆盖为传入的value,include包含

即get传入name=cfile&value=xxx时,可以包含xxx

继续审计源码
在这里插入图片描述发现debug=false时error或exception会写入log,且log名固定,所以通过报错在log写入恶意代码并包含来getshell
比赛的时候找了半天,没有发现可以报错的点,一开始发现在value处传恶意代码,框架会因为include时找不到文件名而报错,并把恶意代码(也就是文件名)报在log里,但是php好像默认对include中的内容做了转义,<、>都会被转义,所以没办法执行php代码
后面发现题目中的环境和官网下载的代码有点不一样,读了下其他文件,发现他重写了EmptyController
在这里插入图片描述
这样就多了一个抛出异常的点,我们只需要访问不存在的MODULE或者ACTION,他就会把访问的模块和方法名报在日志里,这里传入恶意代码就可以包含了
如直接访问/index.php/biodog/<?php phpinfo();?>
但由于框架的某些原因,对传入的代码做了很多莫名的过滤,大写字符会被强转成小写,且不能传/
我用了chdir跳转路径,exp类似如下

<?php
chdir(..);
chdir(..);
chdir(..);
chdir(..);
system(ls);
?>

骚操作之利用pearcmd.php
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值