Web刷题之旅(二) - BUUCTF 站

[ACTF2020 新生赛]BackupFile

网页让我们:Try to find out source file!

御剑和uniscan扫不出后台目录,无奈只好拿出扫到让运营两行泪的dirsearch

绿色显示正常访问网页,存在网站备份,下载读取源码:

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

原来是PHP弱类型转换,就是说int类型传入1a,遇到字符就会停止读取,相当于传入的是1

key和str比较,str必然是要类型转换成int,只取123,题目就出来了

 

[BJDCTF2020]Easy MD5

以为只是简单的碰撞,试了没有结果,然而hint在数据包头里

知识盲区,查WP:

md5函数在指定了true的时候,是返回的原始 16 字符二进制格式。也就是说会返回这样子的字符串:'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c(抄的= =)
         然后就会拼接成:
(题目的提示感觉还是有点问题的,因为md5函数返回的是字符串,后端应该会用单引号/双引号包起来的),所以应该会拼接为这样子:

select * from 'admin' where password=''or'6.......'

就是说

Payload:ffifdyop,上面的’ffifdyop‘字符串对应的16位原始二进制的字符串就是”    'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c    “  。  '  \  '后面的3个字符连同'  \  '算一个字符,比如’    \xc9    ‘,所以上述一共16个。当然,像’    \xc9    ‘这种字符会显示乱码

拿去传参

继续绕过,即传两个md5值都是0e开头的字符串,或者a[]和b[]数组也能绕过,md5返回的都是NULL

最后再POST一次

posted @ 2020-05-18 21:47  ch0bits  阅读(259)  评论(0编辑  收藏  举报