[HCTF 2018]WarmUp的个人WP

[HCTF 2018]WarmUp的个人WP 个人声明本人纯小白对于专业词汇可能表达不清本文章仅展示个人思路如有雷同纯属巧合若有借鉴思路的会说明。若有错漏麻烦指正谢谢。题目来源CTF²https://ctf2.dasctf.com/dashboard/practice/b9bbb32f-f186-458f-b90b-12440c0f6aea?returnTo%2Fdashboard%2Fpractice%3Fview%3Dmytabchallengeschallenge0b1c4df1-92df-4818-b564-76bda414acfd我们打开网站首先会看到一个滑稽的表情包但是没有任何信息这是我们考虑是否有信息隐藏在流量包或者是网页源码上ctrlu查看源码发现有一个叫“source.php”的文件接下来我们尝试访问访问该文件后我们可以看到一段php代码同时注意到有一个叫hint.php的文件我们也查看一下发现flag在ffffllllaaaagggg文件中接下来我们进行代码审计尝试绕过过滤访问ffffllllaaaagggg文件审计之后发现代码会先对我们传入的file的值进行进行白名单匹配它的判断逻辑是情况1在值之中没有出现?直接对值进行白名单匹配通过则结束判断失败则对值先url解码再判断情况2值中出现了?代码截取第一个问号前的内容进行白名单匹配所以我们先构造source.php?filesource.php确保能通过过滤以下内容根据ai搜索结果总结当include(index.php?/../../../../flag)时PHP 内核在解析这个路径时会将第一个/之前的内容即index.php?当作一个目录名来处理而不会去验证名为index.php?的文件是否存在。在将index.php?视为当前目录后路径中后续的/../../../../flag就会触发标准的文件系统目录穿越Directory Traversal机制。../会一层一层地向上返回上级目录最终定位到根目录下的flag文件所以我们可以构造source.php?filesource.php?/../../../../ffffllllaaaagggg去绕过代码的过滤通过路径穿越访问根目录下 ffffllllaaaagggg 文件的得到flag。其中关于为什么是4次穿越引用一下大佬wp[HCTF 2018]WarmUp全网最详细解释-CSDN博客中的一段话“因为我们当前的source.php一般是在html目录下往上是wwwvar然后到根目录flag一般就放在根目录下面这里还有一个hint.php?/或者source.php?/因此需要返回四层才能到根目录。”同时因为一般flag文件都在根目录下当我们实在搞不清楚flag文件具体要穿越几次时我们可以多穿越几次一样是可以得到结果的就像这一题中我们构造source.php?filesource.php?/../../../../../../../../ffffllllaaaagggg也是可以得到flag的