[ACTF2020 新生赛]BackupFile 1

题目环境:
image.png
image.png

好好好,让找源文件是吧?咱们二话不说直接扫它后台

使用dirsearch工具扫描网站后台(博主有这个工具的压缩包,可以私聊我领取)
python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530f.node4.buuoj.cn:81/
[ACTF2020 新生赛]BackupFile 1_第1张图片
探测存活文件

[ACTF2020 新生赛]BackupFile 1_第2张图片
不要一惊一乍哦,0B内存这是假的flag.php文件

[ACTF2020 新生赛]BackupFile 1_第3张图片

探测出存活文件index.php.bak
bak文件后缀是备份文件

下载index.php.bak文件
image.png
回车即可下载
image.png
使用记事本或者PHP编译器等工具打开即可
[ACTF2020 新生赛]BackupFile 1_第4张图片


  include_once "flag.php";

if(isset($_GET['key'])) {
  $key = $_GET['key'];
  if(!is_numeric($key)) {
    exit("Just num!");
  }
  $key = intval($key);
  $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
  if($key == $str) {
    echo $flag;
  }
}
else {
  echo "Try to find out source file!";
}

PHP代码审计

包含flag.php文件
通过GET方式传参的参数key
_is_numeric()函数_用于检测变量是否为数字或数字字符串,那么加上感叹号就是如果不是数字或数字字符串就输出Just num!并退出
intval() 函数用于获取变量的整数值
if语句如果key变量与str变量相等则返回TRUE并输出flag
else语句如果以上条件全部都不符合条件,则输出Try to find out source file!

进一步分析

看完代码审计是不是很慌,我猜你已经注意到了“key变量和str变量的值是不可能相等的!”
哪怎么搞呢?
别急,作者还给了我们一个惊喜!
“==”PHP弱比较逻辑运算符
PHP弱比较呢只是要求运算符两边的数据类型必须一致并没有要求两个变量的值一定要相等
str变量是字符串,同时要求key变量必须是数字,并且str字符串里面存在123,所以key=123即可获得flag

构造payload:
?key=123
上传payload:
image.png
得到flag:
flag{b7a1c0e0-3a3a-4267-999d-ad788f286d41}

你可能感兴趣的:(CTF做题笔记,android,web安全,网络安全,php,后端)