[ACTF2020 新生赛]BackupFile
题目
题解
打开进入靶场
告诉我们尝试找出源文件
查看网页源码:
发现什么也没有
根据题目提示
根据题目分析可得,我们可以尝试爆破目录,获取一些信息,或者尝试访问/index.php是否有反应,是否存在页面备份文件
扫描二维码关注公众号,回复:
16109494 查看本文章
尝试访问/index.php
发现可正常访问。
访问一下/flag.php,是否存在
发现可以正常访问,但是没有任何回显,说明源码当中存在某些条件或者过滤信息。
接下来我们继续分析,网站的源码备份文件,猜测是否为/index.php.bak,尝试访问
发现出现下载该备份文件信息
下载到本地后,通过文本编辑器打开
打开发现是源码
通过源码的分析可知,在传递的key参数当中,存在PHP弱比较(==),关键点在于is_numeric函数
php中有两种比较的符号==和===
===在进行比较的时候会先判断两种字符串的类型是否相等,再比较。
== 在进行比较的时候,会先将字符串的类型转换为相同,再比较
"=="类型转换的规则
1、字符串和数字比较,字符串会被转换成数字。
如:"root"==0(true)//root被转换成数字,由于root是字符串,转换失败,int(root)=0,所以比较结果是true。
2、混合字符串转换成数字,看字符串的第一个。
如:"123root"==123 "2goodyou"==2
is_numeric() 函数用于检测变量是否为数字或数字字符串。如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。
再看源码当中的str变量给的字符串,还有输出if控制语句,
根据以上的结论,我们可以构造payload为:
/index.php?key=123
得到本题flag,flag为:
flag{73b7db44-cd8f-4f2c-958f-9492738f0fdd}
文章不当之处,欢迎批评指正!