0x01前言

字节的ctf质量很高,在这里记录下。

0x02正文

一.boring_code

第一个吧data://协议禁了,所以不能用网上的常规方法,那么想要绕过baidu.com一个方法是直接买个包含baidu.com的域名(tyql)另一个就是参考产生百度外链(tieba)post.baidu.com跳转链接的生成方法,之后/[a-z]+\((?R)?\)/ ,这个正则的意思是无参数是能使a(b(c()))这种形式,对于无参数getshell可以参考一叶飘零大神的这篇文章 PHP Parametric Function RCE ,但是这里他禁用了很多函数关键词,很难getshell因此这里而且我们已经知道flag在上级目录,可以利用readfile函数来读取文件

可以读取当前目录的最后一个文件,但是.从哪里来呢,localeconv()会返回. ..等就可以利用current函数读取一个参数,但是nt被过滤用pos代替,这个就可以读取当前目录的最后一个文件了,但是flag在上层目录,我们要利用chdir来改变目录层级

chdir只会返回bool值。我们需要找一个函数接受布尔值并且可以输出”.”

time函数来接受chdir返回的bool值,localtime接受time函数,返回一个时间的数组,然后我们利用pos取出秒数,再利用chr将数字46转换为.

然后chdir里面的..利用next(localconv())来获取,最终payload是

在服务器上放上payload的文件,然后burp设置post发包,每隔1秒发一次,当某分钟的第46秒就能getflag了

二.Ezcms

读源码首先是个hash长度拓展攻击可以绕过文件上传 hash长度扩展攻击,但是.htaccess被乱写直接上传php文件会被500,这里想要直接覆盖.htaccess是不可以的因为上传的文件前缀被md5重命名,绕不过去,绕后我们观察有魔术方法,猜测能不能利用发序列化,但是没有unserilaze函数,但是这里我们有任意文件上传那么我们是不是可以利用phar伪协议来触发反序列化,

这里mim_content_type可以触发phar但是前面有过滤但是没有过滤php://filter可以利用这个绕过UCTF 2019 出题笔记 & phar 反序列化的一些拓展,更多可以看这篇文章

php://filter/read=convert.base64-encode/resource=phar://./z.pahr

然后在Profile类中__call中有个open方法,这里

可以覆盖.htaccess文件。

那么为了触发Profile中的__call方法,我们需要在File类中声明一个Profile类利用__destruct方法触发__call,在view_detail()函数中利用mime_content_type方法触发phar反序列化,从而触发__call方法

生成phar脚本如下

将phar文件上传上去,访问view.php后用view.php?filename=xxxxxxxxxxxxxxxxxxxx.phar&filepath=php://filter/resource=phar://./sandbox/xxxxxxxxxxxxxxxxxxxx.phar触发反序列化从而覆盖掉.htaccess,再上传个php木马来getshell,例如

就可以getshell了

0x03总结

继续复现其他题。。。