buuctf-WarmUp

buuctf-WarmUp
首先我们先看下题目给的提示
Php 代码审计
注意,一般题目给出这样的题解,就已经相当于明确的告诉你,flag线索在网页源码里
而我们只要使用f12快捷键,就可以查看网页源码
buuctf-WarmUp进入环境,我们可以看到只有一张图片,根据我们的思路,查看页面源码
buuctf-WarmUp

好,线索已经出来了
buuctf-WarmUp
我们来访问一下
buuctf-WarmUp
buuctf-WarmUp
在新的页面下返回了一段php源码
审计一下
在这段源码里有几个醒目的地方就是php逻辑运算符
&&逻辑与 ||逻辑或
buuctf-WarmUp要求我们的file变量不为空
我们来看看这段代码buuctf-WarmUp首先要求我们传进去的得是字符串类型buuctf-WarmUp
而下面这段代码又将我们的值传到了emmm类中的checkFile函数
并且这三个值是使用&&逻辑与连接的。所有要求返回值全为真才能返回文件包含的代码,否则返回else中的图片代码
buuctf-WarmUp要求已经知道啦,接下来就是函数的使用buuctf-WarmUp

mb_substr()函数返回字符串的一部分
buuctf-WarmUp
mb_strpos(haystack,needle)
第一个参数是要被检查的字符串,第二个参数是要搜索的字符串

代码审计到这里,现在需要做的事就是构造我们的payload
buuctf-WarmUp源码中可以看到有一个新的界面buuctf-WarmUpFlag的文件名出来了
好,我们再回去看看emm有什么阻拦我们的buuctf-WarmUp仔细一看还挺多buuctf-WarmUp白名单buuctf-WarmUp

首先是isset()判断变量是否声明,is_string判断参数是否为字符串buuctf-WarmUp
检测传进来的值是否匹配白名单,是则执行真
buuctf-WarmUp

过滤?的函数(如果 p a g e 的 值 有 ? , 就 从 ? 前 提 取 字 符 串 ) 返 回 page的值有?,就从?前提取字符串) 返回 page的值有?,就从?前提取字符串)返回page.?中?出现的第一个位置
buuctf-WarmUp

二次检查是否匹配白名单
buuctf-WarmUp

Url编码
buuctf-WarmUp

二次过滤问号,与之前相同
buuctf-WarmUp

第三次检测是否匹配白名单
所有的过滤都清楚了
三次白名单,两次问号过滤,一次url解码
依照这个构造payload
Hint.php?../…/…/…/…/ffffllllaaaagggg(第一次白名单后是hint.php。再过滤一次白名单,返回真。最后成功进行包含拿到flag)

上一篇:redis 业务锁 not exist 模式


下一篇:Surrounded Regions - LeetCode