每日一题 —— [PolarCTF]swp¶
请西电的朋友们记得:做这类信息收集的题目时关掉校园网,打开你的手机热点。因为校园网似乎会屏蔽任何后缀名为
.swp
.zip
之类的 url, 从而导致你只能无穷尽地看见“连接已重置”的字样。
打开题目,提示 true .swp file?
可以得知,这是一道 swp 泄漏问题。我们直接访问 /.index.php.swp
下载到缓存文件,从而看到 index.php
的源码如下:
function jiuzhe($xdmtql) {
return preg_match('/sys.*nb/is',$xdmtql);
}
$xdmtql=@$_POST['xdmtql'];
if(!is_array($xdmtql)) {
if(!jiuzhe($xdmtql)) {
if(strpos($xdmtql,'sys nb')!==false) {
echo 'flag{*******}';
} else {
echo 'true .swp file?';
}
} else {
echo 'nijilenijile';
}
}
观察得知,想要获得 flag, 我们需要 post 一个 xdmtql
的参数,这个参数内必须要有 sys nb
这个字符串。但是呢又必须绕过 preg_match
的限制。这里我们有一个技巧叫做正则绕过.
正则绕过¶
正则绕过的原理就是,对于 php 中的 preg_match
函数,他因为会不断进行回溯递归的正则匹配,消耗大量的资源,所以当传入的字符串长度超过一定的限制的时候,就会直接返回一个 false
,这个长度限制就是 100 万个字符 。
知道了这个前提,我们这道题就思路明确了:只要开头有一个 sys nb
打头,然后后面跟上 100 万个字符就行。
至于如何生成 100 万个字符,我们只需要利用 php 的 str_repeat
函数生成,然后在浏览器里打开就行了。
最后得到 flag.
文章热度:0次阅读