WEB-攻防世界php2
- 关键词 目录遍历 源码
题目描述

解题思路
查看源码,cookie等信息,什么都没有,直接遍历目录 用dirsearch,命令是
python dirsearch.py -u http://61.147.171.105:64057/ -e *得到结果如下
直接访问http://61.147.171.105:64057/index.php/login/也是一样的界面,这时候的考点其实是index.phps文件有源码 直接访问http://61.147.171.105:64057/index.phps 得到源码 
从源码中我们可以看出,考点之一是php中的==。关于php中==和===的区别是:(来源是 chatgpt)
在PHP中,=== 和 == 是两种不同的比较运算符,用于比较两个值的相等性,它们有以下区别:
===(全等)运算符:===用于比较两个值是否相等且数据类型也相同。- 如果两个操作数的值和数据类型都相同,
===返回true,否则返回false。 - 例如:
5 === 5会返回true,但5 === '5'会返回false,因为前者比较的是整数,而后者比较的是整数和字符串。
==(等于)运算符:==用于比较两个值是否相等,不考虑数据类型。- 如果两个操作数的值相等,即使它们的数据类型不同,
==也会返回true。 - 例如:
5 == 5会返回true,而5 == '5'也会返回true,因为它只比较值而不比较数据类型。
要根据你的需求选择使用哪个运算符。如果你要确保两个值不仅相等而且数据类型也相同,应该使用 ===。如果只关心值是否相等,而不关心数据类型,则可以使用 ==。
看源码,只需要id的值经过urldecode之后等于admin就行。关于urldecode函数: urldecode是PHP函数,解码经过URL编码的字符串,解码回原始的形式;URL编码中某些字符被替换为%后跟两个十六进制形式;这是为了确保 URL 中的特殊字符不会与 URL 结构冲突。例如,空格字符在 URL 中被编码为 %20,而 & 字符被编码为 %26,%字符被编码为%25 所以我们直接将admin转码
这里非常需要注意的一点是,除了burp之外的所有工具,无论是在线的还是客户端工具,都不会对admin这种英文进行url编码,只有burp可以
转码之后我们输入url: http://61.147.171.105:64057/?id=admin 发现还是不行。。原因是浏览器本身就会解码一次,因此我们需要再对%61%64%6d%69%6e进行一次url编码。结果是%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 这时候我们就拿到了flag 