[ACTF2020 新生赛]BackupFile

0x00

打开WEB界面

提示找到备份,进行跑目录,备份命名一般为www.*,backup,*.bak
经过跑目录我得到的结果是/index.php.bak
下载打开如下:

<?php
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!";
}

进行代码审计,要想得到flag,我们需要满足如下:

  • key的值等于str的值
  • key为整数

我们可以看到如下,使用的是 == 而不是 ===

    if($key == $str) {
        echo $flag;
    }
## php为弱类型语言使用==比较字符串和整型时,会将字符串转化成整型,如上的字符串在转化成整型时只保留整数部分123后面的字符串全部省略

所以这里我们只需要构造如下payload:

/index.php?key=123

得到结果

0x01 总结

主要考察了如下:

  • 1.常见备份的命名以及备份文件的查找
  • 2.php弱类型语言特点
php为弱类型语言使用==比较字符串和整型时,会将字符串转化成整型
如果字符串为数字开头例如 123sadasd 则转化为 123
如果字符串为字母开头例如 a23sadasd 则转化为 0
原文地址:https://www.cnblogs.com/Wuser/p/13632882.html