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一次
[Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你