UniCTF两道流量分析WP

admin 2026-02-02 00:28:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文包含YunSee团队招新及两道CTF流量分析题解。工厂应急响应题通过分析Modbus、OPCUA、DNS、HTTP、ICMP和SNMP协议提取标志位。BlueBreath题涉及识别webshell流量,利用bkcrack明文攻击破解压缩包,并基于GZIP头推导XOR密钥解密加密通讯,提供Python脚本实现自动化解密。 综合评分: 95 文章分类: CTF,应急响应,WEB安全,恶意软件,安全工具


fig:

fig:

这图片我也不清楚有啥用,没啥可用的信息

先来到wireshark 筛选http POST请求

http.request.method == "POST"

fig:

发现上传了shell.php可疑文件

fig:

像二进制被加密数据

筛选所有包含shell.php 的流

http.request.method == "POST" && http.request.uri contains "shell.php"

fig:

前三个流一大片乱码,怀疑是后门的加密源码

从第四个流开始,这里的传输的加密数据好似哥斯拉那种加密shell后门,请求的命令以及执行结果回显

fig:

数据的开头都是:7b e8 3b 65 66 35 66 66 30 …

fig:

webshell 常见做法是“先压缩再混淆”,于是尝试以 gzip 固定头 1f 8b 08 00 00 00 00 00 00 作为已知明文,利用 C XOR P 反推出前 9 字节密钥

fig:

得到的是可显示的字符串,说明这是密钥的一部分

这里我也不清楚key的长度以及爆破出完整的key,就求助AI了

fig:

拿到完整的key之后,写个解密脚本将加密webshell解密

import re, gzip, socket
import dpkt

PCAP = "BlueBreath.pcapng"
KEY = b"dc3ef5ff0c670152"# 16-byte XOR key

def reassemble(segs):
"""按 TCP seq 重组(处理重传/重叠)"""
ifnot segs:
returnb""
segs = sorted(segs, key=lambda x: x[0])
base = segs[0][0]
out = bytearray()
cur = base
for seq, data in segs:
if&nbsp;seq < cur:
overlap = cur - seq
if&nbsp;overlap >= len(data):
continue
data = data[overlap:]
seq = cur
if&nbsp;seq > cur:
out.extend(b"x00"&nbsp;* (seq - cur))
cur = seq
out.extend(data)
cur += len(data)
return&nbsp;bytes(out)

def&nbsp;parse_http_bodies(stream_bytes, is_request=True):
"""从 TCP 字节流里按 Content-Length 拆 HTTP 消息 body"""
res = []
i =&nbsp;0
whileTrue:
if&nbsp;is_request:
j = stream_bytes.find(b"POST ", i)
else:
j = stream_bytes.find(b"HTTP/1.", i)
if&nbsp;j ==&nbsp;-1:
break
k = stream_bytes.find(b"rnrn", j)
if&nbsp;k ==&nbsp;-1:
break
header = stream_bytes[j:k].decode("iso-8859-1", errors="ignore")
m = re.search(r"Content-Length:s*(d+)", header, re.I)
clen = int(m.group(1))&nbsp;if&nbsp;m&nbsp;else0
body_start = k +&nbsp;4
body = stream_bytes[body_start:body_start + clen]
res.append((header.split("rn",&nbsp;1)[0], header, body))
i = body_start + clen
return&nbsp;res

def&nbsp;xor_dec(data, key):
return&nbsp;bytes(b ^ key[i % len(key)]&nbsp;for&nbsp;i, b&nbsp;in&nbsp;enumerate(data))

def&nbsp;main():
# 收集所有 8000 端口 TCP 分段:按 (client_ip, client_port, server_ip, 8000) 归一化成一个连接
streams = {}&nbsp;# key -> {'c2s':[(seq,data)], 's2c':[(seq,data)]}

with&nbsp;open(PCAP,&nbsp;"rb")&nbsp;as&nbsp;f:
pcap = dpkt.pcapng.Reader(f)
for&nbsp;ts, buf&nbsp;in&nbsp;pcap:
try:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
ifnot&nbsp;isinstance(ip, dpkt.ip.IP):
continue
tcp = ip.data
ifnot&nbsp;isinstance(tcp, dpkt.tcp.TCP)&nbsp;ornot&nbsp;tcp.data:
continue

src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)

if&nbsp;tcp.dport ==&nbsp;8000:
key = (src, tcp.sport, dst,&nbsp;8000)
streams.setdefault(key, {"c2s": [],&nbsp;"s2c": []})
streams[key]["c2s"].append((tcp.seq, tcp.data))
elif&nbsp;tcp.sport ==&nbsp;8000:
key = (dst, tcp.dport, src,&nbsp;8000)
streams.setdefault(key, {"c2s": [],&nbsp;"s2c": []})
streams[key]["s2c"].append((tcp.seq, tcp.data))
except:
pass

# 找出包含 /uploads/shell.php 的连接并解密
for&nbsp;key, d&nbsp;in&nbsp;streams.items():
c2s = reassemble(d["c2s"])
ifb"POST /uploads/shell.php"notin&nbsp;c2s:
continue
s2c = reassemble(d["s2c"])

reqs = parse_http_bodies(c2s, is_request=True)
resps = parse_http_bodies(s2c, is_request=False)

print("n=== shell conn:", key,&nbsp;"===")
for&nbsp;first, header, body&nbsp;in&nbsp;reqs:
if"/uploads/shell.php"notin&nbsp;first:
continue
ifnot&nbsp;body:
continue
p = xor_dec(body, KEY)
try:
out = gzip.decompress(p)
print("[REQ]", out.decode(errors="ignore"))
except&nbsp;Exception&nbsp;as&nbsp;e:
print("[REQ] decrypt fail:", e)

for&nbsp;first, header, body&nbsp;in&nbsp;resps:
ifnot&nbsp;body:
continue
p = xor_dec(body, KEY)
try:
out = gzip.decompress(p)
print("[RESP]", out.decode(errors="ignore"))
except&nbsp;Exception&nbsp;as&nbsp;e:
print("[RESP] decrypt fail:", e)

if&nbsp;__name__ ==&nbsp;"__main__":
main()

fig:

加入我们


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:云晞科技Sec 江思澄 江思澄《UniCTF 两道流量分析 WP》

微软推出云开发DevBox 网络安全文章

微软推出云开发DevBox

文章总结: 微软在MicrosoftDevBox推出新功能以适应AI开发需求。更新包括简化配置、管理员自助创建、自动删除与休眠以控制成本。项目级策略强化治理安全
评论:0   参与:  0