PHP網(wǎng)絡(luò)安全之命令執(zhí)行漏洞及防御
命令執(zhí)行漏洞的原理
程序應(yīng)用有時(shí)需要調(diào)用一些執(zhí)行系統(tǒng)命令的函數(shù),如php中的system,exec,shell exec,passthru,popen,proc popen等,當(dāng)用戶可以控制這些函數(shù)的參數(shù)時(shí),就可以將惡意系統(tǒng)命令拼接到正常命令中,從而造成命令注入攻擊
兩個(gè)條件
(1)用戶可以控制函數(shù)輸入
(2)存在可以執(zhí)行代碼的危險(xiǎn)函數(shù)
命令執(zhí)行漏洞產(chǎn)生原因
1.開發(fā)人員編寫源碼時(shí),未針對(duì)代碼中可執(zhí)行的特殊函數(shù)入口作過濾,導(dǎo)致客戶端可以惡意構(gòu)造語句,并提交服務(wù)端執(zhí)行
2.命令注入攻擊中,web服務(wù)器沒有過濾類似system,eval,exec等函數(shù),是該漏洞攻擊成功的主要原因。
命令執(zhí)行漏洞的危害
1.繼承web服務(wù)程序的權(quán)限去執(zhí)行系統(tǒng)命令或讀寫文件
2.反彈shell
3.控制整個(gè)網(wǎng)站甚至服務(wù)器
4.進(jìn)一步內(nèi)網(wǎng)滲透
實(shí)例
<?php echo shell_exec($_GET['a']); ?>
將url中的參數(shù)a作為cmd命令行指令執(zhí)行
危險(xiǎn)函數(shù)導(dǎo)致代碼執(zhí)行
<?php $arr = $_GET['arr']; $array = $_GET['array']; $new_array = arraymap($arr,$array); ?>
arraymap是一個(gè)危險(xiǎn)函數(shù),它會(huì)默認(rèn)將參數(shù)作為php代碼執(zhí)行

PHP一些可調(diào)用外部程序的危險(xiǎn)函數(shù)

eval攻擊
eval函數(shù)將輸入的參數(shù)當(dāng)成php代碼來執(zhí)行
mixed eval(string code str)
<?php
$var = "var";
if(isset($_GET["arg"]))
{
$arg = $_GET["arg"];
eval("\$var = $arg;");
echo "\$var = ".$var;
}
?>preg_replace()函數(shù)
preg_replace()函數(shù)執(zhí)行一個(gè)正則表達(dá)式的搜索和替換
在php版本為5.5.0以下時(shí)有一個(gè)漏洞,當(dāng)該函數(shù)使用了一個(gè)不安全的修飾符"\e"時(shí),preg_replace()會(huì)對(duì)替換字符串的反向引用進(jìn)行正常替換,將其作為php代碼進(jìn)行計(jì)算,并使用 結(jié)果替換搜索字符串。

此處/e的用處是引用括號(hào)里的字符 也就是以參數(shù)a去替代括號(hào)里的字符

ps:不要忘記代碼兩側(cè)的中括號(hào)
call_user_func
函數(shù)用法:
call_user_func($_GET["a"] , $_GET["b"])
將a作為函數(shù)執(zhí)行,b作為函數(shù)參數(shù)傳遞進(jìn)去

在命令注入時(shí),常有需要多命令執(zhí)行的情況
在linux下,可以使用|或||代替
|是管道符,顯示后面的執(zhí)行結(jié)果
||當(dāng)前面命令執(zhí)行出錯(cuò)時(shí)再執(zhí)行后面的
在Window下,可以使用&、&&、|、||代替
&前面的語句為假則執(zhí)行后面的
&&前面的語句為假則直接出錯(cuò),后面的也不執(zhí)行
|直接執(zhí)行后面的語句
||前面出錯(cuò)執(zhí)行后面的語句
命令執(zhí)行的防御手段
1.盡量不要執(zhí)行外部命令
2.使用自定義函數(shù)或函數(shù)庫替代外部函數(shù)功能
3.使用escapeshellarg函數(shù)來處理命令參數(shù)

4.使用safe_mode_exec_dir:指定可執(zhí)行文件路徑 ,這樣可以將會(huì)使用的命令提前放入此路徑內(nèi)
safe_mode_exec_dir = /usr/local/php/bin
DVWA介紹
DVWA平臺(tái):
用來進(jìn)行安全脆弱性鑒定的PHP/Mysql Web應(yīng)用
為安全專業(yè)人員測(cè)試總結(jié)的專業(yè)技能和工具提供合法環(huán)境
幫助web開發(fā)者更好的理解web應(yīng)用安全防范的過程
DVWA的搭建
DVWA是基于php/mysql環(huán)境開發(fā)的
下載地址:
Buy Steroids Online UK - Anabolic Steroids For Sale UK
DVWA練習(xí)命令注入
使用靶場(chǎng)自行練習(xí)
到此這篇關(guān)于PHP網(wǎng)絡(luò)安全之命令執(zhí)行漏洞及防御的文章就介紹到這了,更多相關(guān)PHP漏洞及防御內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
常用的PHP數(shù)據(jù)庫操作方法(MYSQL版)
最近一直在折騰自己的網(wǎng)站首頁,寫的大部分PHP腳本都要用到和MYSQL數(shù)據(jù)庫相關(guān)的操作,今天把這些方法和大家分享一下,希望大家能多多交流!2011-06-06
php實(shí)現(xiàn)每天自動(dòng)變換隨機(jī)問候語的方法
這篇文章主要介紹了php實(shí)現(xiàn)每天自動(dòng)變換隨機(jī)問候語的方法,涉及時(shí)間與數(shù)組的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
PHP使用finfo_file()函數(shù)檢測(cè)上傳圖片類型的實(shí)現(xiàn)方法
這篇文章主要介紹了PHP使用finfo_file()函數(shù)檢測(cè)上傳圖片類型的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了finfo_file()函數(shù)的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法
這篇文章主要介紹了PHP把MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的方法,分別列舉了兩個(gè)實(shí)例實(shí)現(xiàn)將MSSQL數(shù)據(jù)導(dǎo)入到MYSQL的功能,是非常實(shí)用的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
PHP setcookie指定domain參數(shù)后,在IE下設(shè)置cookie失效的解決方法
setcookie函數(shù)指定domain參數(shù)后,在IE下的表現(xiàn)和在chrome、firefox中的表現(xiàn)不同,這不是php setcookie函數(shù)的問題,這是IE的問題。2011-09-09
解析php中die(),exit(),return的區(qū)別
本篇文章是對(duì)php中die(),exit(),return的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

