NewstarCTF2025 ez-chain
·
直接代码审计,这道题有两个waf,然后是get方法,参数是file。
来看第一个waf

这是对输入进行校验,不能包含这些字符串。
第二个waf

这是对data参数进行一个校验,data里面如果包含f这个字符,就返回false,如果不含f,就进行base64解码,一直解码到不能解码为止
下面是核心主函数

这是整个代码过程,先对file传入的参数进行waf校验,再对参数进行url解码,再把解码后的文件进行读取然后赋值给data,再对data进行waf校验。
接着我们来看解法,因为我们知道当浏览器发送请求的时候会先进行一次url解码,然后这个题目又会进行一次解码,那么我们可以用url二次编码来绕过第一个waf,经过解码后得到的就是我们的真实payload。
那么第二层waf的原理其实是读取flag赋值给data以后,data里不能出现f这个字符,并且不能用base64来加密flag,因为题目会解码base64,所以我们这里采用rot13编码flag
真实payload如下
php://filter/read=string.rot13/resource=/flag
意思是将flag的内容用rot13编码后再返回
再二次url编码
最终payload
file=%2570%2568%2570%253A%252F%252F%2566%2569%256C%2574%2565%2572%252F%2572%2565%2561%2564%253D%2573%2574%2572%2569%256E%2567%252E%2572%256F%2574%2531%2533%252F%2572%2565%2573%256F%2575%2572%2563%2565%253D%252F%2566%256C%2561%2567
更多推荐
所有评论(0)