一、OS命令注入
代碼注入與命令注入區別:PHP代碼注入是具體的語言的代碼(如php、Java),命令注入的是系統命令,
原因:
當應用需要呼叫一些外部程式(系統命令或者exe等可執行檔案)時就會用到一些系統命令的函式,應用在呼叫這些函式執行系統命令的時候,如果將用戶的輸入做為系統命令的引數拼接到命令列中,在沒有過濾用戶的輸入的情況下,就會造成命令執行漏洞,
1.用戶輸入作為拼接,
2.沒有足夠過濾,
危害:
1.繼承web服務器程式權限(web用戶權限),去執行系統命令,
2.繼承web服務器權限,讀寫檔案,
3.反彈shell,服務器主動連接攻擊方,
4.控制整個網站,
5.控制整個服務器,
二、相關函式
1.system()
<?php
$str="ipconfig";
system($str);
?>
如果將ipconfig換成變數:
<?php
if($_GET['cmd']){
$str=$_GET['cmd'];
system($str);
}
?>
此時在客戶端可以通過傳參,執行漏洞,(URL路徑后面接)命令執行完才在頁面顯示出來,
?cmd=whoami
2.exec()
輸出執行結果,結果內容有限
3.shell_exec() 應用最廣泛
4.passthru() 自帶輸出
5.popen
不回傳結果,而是回傳檔案指標,我們關心的是命令執行了,在URL中輸入:
>>1.txt #將執行結果匯入檔案中看,
6.反引號(1鍵左邊的鍵)
三、漏洞利用
1.查看系統檔案
提交引數
[?cmd=type c:\windows\system32\drivers\etc\hosts]
查看系統hosts檔案,
2.顯示當前路徑
提交引數:
[?cmd=cd]
3.寫檔案
[?cmd=echo "<?php phpinfo();?>" > D:\xampp\htdocs\Commandi\shell.php]
> 覆寫并建檔案 #路徑隨機
四、如何避免
1.盡量減少命令執行函式的使用,并在disable_functions 中禁用,
2.在進入命令執行的函式或方法前,對引數過濾,
3.引數的值盡量使用引號包裹,并在拼接前呼叫addslashes()進行轉義,#函式表示回傳在預定義的字符之前添加反斜杠的字串,預定義字符有 (') (") (\) NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301679.html
標籤:其他
上一篇:《Web安全深度剖析》筆記
