os命令注入


在開發過程中,一些應用需要去調用一些外部程序(系統命令或exe等可執行文件)。當應用需要調用一些外部程序時,就會用到一些系統命令的函數.

而應用在調用這些函數執行系統命令的時候,如果將用戶的輸入作為系統命令的參數拼接到命令行中,在沒有過濾輸出的情況下,就會造成命令執行漏洞。

命令執行漏洞發生的兩個主要原因

1.用戶輸入可以進行拼接

2.沒有足夠的過濾

危害:

可繼承web服務器權限(web用戶權限),去執行系統命令,讀寫文件,也可進一步控制整個網絡,整個服務器。

相關函數:

system();

passthru():

能夠將字符串作為os命令執行,自帶輸出功能。

exec():

也能夠將字符串作為os命令執行,需要輸出執行結果。

shell_exec():

也exec()函數類似

popen()也能執行os命令,但不返回命令結果,而是返回一個文件指針

<?php

if(isset($_GET['cmd']))

{
$cmd=$_GET['cmd'].">>1.txt"

popen($cmd,'r');

}

此函數需要兩個參數,並且只返回一個文件指針,從而可以將其導入一個文件中查看。

反引號

反引號["]內的字符串,也會被解析成os命令,需要輸出執行結果。

漏洞利用方式

查看系統文件

如?cmd=type c:\windows\system32

在windows中查看文件為type linux為cat

顯示當前路勁

如?cmd=cd -->絕對路徑

寫入一個文件,可為一句話木馬等

如?cmd=echo "<?php phpinfo();  ?>" >D:\shell.php-->其中>為覆蓋寫

防御方法:

1.減少命令執行函數的使用

2.在進行命令執行的函數之前,對參數進行過濾

3.參數值盡可能使用引號包裹,調用addslashes函數進行轉義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM