[TOC]

[ACTF2020 新生赛]BackupFile1

dirsearch由于未知原因无法使用,故采用dirmap进行扫描。

dirmap语法:

┌──(wizard㉿kali)-[~/Desktop/dirmap-master]
└─$ python3 dirmap.py -i http://9b4bd267-334b-48b6-bab8-8bd6e3dfe627.node4.buuoj.cn:81/ -lcf

vmware_uobbNvcgtA

扫描出了index.php.bak

【补充:常见的备份文件后缀名有 .git .svn. swp .~ .bak .bash_history】

下载文件,阅读源码,审计发现是php的弱类型匹配:

<?php
include_once "flag.php";//包含flag文件

if(isset($_GET['key'])) {//获取key参数
$key = $_GET['key'];
if(!is_numeric($key)) {//判断key是否为数值OR数字字符串,不仅可以检查10进制,16进制也可以
exit("Just num!");//不是则退出脚本
}
$key = intval($key);//获取变量整数数值
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {//弱比较
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
?>

简单的弱类型绕过
php中两个等于号是弱等于
取str的123与key进行比较,(弱比较:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行,在比较时该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。所以直接传入key=123就行)

当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内
该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

构造payload:

url/?key=123

可得flag

dirsearch的正确使用:

参考链接

安装步骤:

git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch
python3 dirsearch.py -u <URL> -e <EXTENSION>

使用方法:

python3 dirsearch.py  -u url -e *

vmware_f6EcPpalFg

这样便成功扫描出来了备份文件

总结:dirsearch安装错误,没有clone到合适的包,故无法执行。