【ctfdouble】[hctf18] warm up

文件包含
1、进入靶机,看到一个大笑脸。按F12查看源代码,发现提示source.php
2、地址栏加入?file=source.php 发现了高亮代码。
3、主程序要求验证。验证函数是白面单验证。验证通过后进入文件包含。
4、所以需要构造payload通过白名单验证,并且触发文件包含。
5、发现白名单一个是source.php另外一个是hint.php
6、输入?file=hint.php发现flag在ffffllllaaaagggg里。
7、$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
mb_substr和mb_strpos 一个是提取前多少字节,一个是数到标记符号有多少个字节。
8、$_page = urldecode($page)解码

所以打算构造一个能通过白名单的payload 前面是hint.php 最后是ffffllllaaaagggg
中间需要通过转码并且提取字节。

9、?的url编码是%3f (%的url编码是%25)
所以初步构建的payload是hint.php?ffffllllaaaagggg
变成hint.php%3fffffllllaaaagggg

10、flag文件一般放在服务器的上级。所以需要多加几个../
hint.php%3f../ffffllllaaaagggg
不行就再多加
hint.php%3f../../../../../ffffllllaaaagggg
加到这里时,可以出现ctf的flag了。

11、然而元宝说终极payload应该是hint.php%253f../../../../../ffffllllaaaagggg
他说需要考虑到二层转码。
嗯试了一下 两个都行。

posted @ 2026-07-09 14:58  方才多有冒犯  阅读(5)  评论(0)    收藏  举报