原创声明!该文章著作权所有归 宁夏骐跃信息科技有限公司 F1A4安全团队~转载请注明!
题目-没错-就是这个"滑稽”图片
陌安
宁夏骐跃信息科技有限公司
打开题目,一个滑稽。F12看下源代码,发现source.php文件
访问发现是代码审计!!!!
source.php
代码过长,我们分段开始审计。
首先来分析这段代码的逻辑流程。
第一段
我们可以看到在这里定义了一个名为emm的类,行,先放着不管,我们继续看后面的
第二段
这边是一个if逻辑判断,我们可以总结出需要的条件:
1.参数file需要传入一个值,这里需要通过GET方式传参//! empty($_REQUESTS['file'])
2.参数file传入的值必须是字符串
3.将file参数带入最开始定义的那个emm类里面进行判断
现在我们再回到刚才最开始的那个emm类中去分析
第三段
我们看到将值带入了变量page中,然后定义了一个白名单($whitelist),并且进行了一个if判断,我们需要同时满足page的值不为空,且page的值必须是字符串才可以返回ture。
第四段
这边进行了两个操作,第一个是一个if判断,判断page的值是否存在于$whitepage数组中,如果存在就返回ture。第二个是对page进行了一个截取操a作,在截取这里有两个函数,我在这里也讲一下
1.mb_substr()的定义是返回字符串的一部分,也就是所说的截取。
2.mb_strpos()的定义是查找一个字符串在另外一个字符串首次出现的位置。
所以结合起来,这里就是在page中找到?这个符号,并且将?之前的所有字符截取,这个时候page变量的新值就是截取出来的字符。
第五段
后面进行了一次url解码以及又进行了于$whitelist对比的判断。
在hint.php文件中我们可以知道flag在的地方,所以构造请求(对?进行两次url编码,服务器端解码一次,代码里面又进行一次解码)
最终的请求:?file=hint.php%253f../../../../../ffffllllaaaagggg
原文始发于微信公众号(F1A4安全团队):一些题解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论