BUUCTF-[ACTF2020 新生赛]BackupFile

[ACTF2020 新生赛]BackupFile

题目

image-20230627204937152

题解

打开进入靶场

image-20230627205010403

告诉我们尝试找出源文件

查看网页源码:

image-20230627205052363

发现什么也没有

根据题目提示

根据题目分析可得,我们可以尝试爆破目录,获取一些信息,或者尝试访问/index.php是否有反应,是否存在页面备份文件

扫描二维码关注公众号,回复: 16109494 查看本文章

尝试访问/index.php

image-20230627205721071

发现可正常访问。

访问一下/flag.php,是否存在

image-20230627205823997

发现可以正常访问,但是没有任何回显,说明源码当中存在某些条件或者过滤信息。

接下来我们继续分析,网站的源码备份文件,猜测是否为/index.php.bak,尝试访问

发现出现下载该备份文件信息

image-20230627210045623

下载到本地后,通过文本编辑器打开

打开发现是源码

image-20230627210136405

通过源码的分析可知,在传递的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控制语句,

image-20230627211900346根据以上的结论,我们可以构造payload为:

/index.php?key=123

image-20230627211926664

得到本题flag,flag为:

flag{73b7db44-cd8f-4f2c-958f-9492738f0fdd}

文章不当之处,欢迎批评指正!

猜你喜欢

转载自blog.csdn.net/rumil/article/details/131430484