目录一、成功加载驱动并与之正确通信,理解题目基本机制 1.1题目基本机制 1.2驱动加载 二、隐匿通信手段总结 2.1命名事件泄漏 2.2命名信号量泄漏 2.3 TEB 字段泄漏 2.4 句柄属性泄漏 2.5 页属性泄漏 2.6完整脚本验证 附:详细分析见后文 三、探索迷宫 3.1驱动端静态分析 3.2驱动端动态分析 3.3 迷宫地图 四、求解路径 五、flag 六、详细分析(针对隐蔽通道的分析) 6.1三环程序静态分析 6.2三环程序动态分析 6.3驱动静态分析 6.4命名事件泄漏 6.5命名信号量泄漏 6.6 TEB 字段泄漏 6.7句柄属性泄漏 6.8页属性泄漏 七、脚本介绍 7.1 监控脚本 7.2 解密脚本
一、成功加载驱动并与之正确通信,理解题目基本机制 1.1题目基本机制题目提供两个文件:- `ShadowGateApp.exe`:用户态控制台程序(Ring3)- `ShadowGateSys.sys`:内核驱动(Ring0)系统由用户态控制台与内核驱动通信,驱动内部隐藏一个加密迷阵。表面上系统不给任何反馈,但存在 5 种隐蔽信息泄露通道。需要:发现泄露通道、还原迷宫、求解最短路径、提取 Flag。 三环程序启动时打印的 Banner 明确提示:"The system is not as silent as it seems. Five hidden flaws betray the result of every move... after each reset, the first five successful moves reveal each flaw exactly once, in a fixed order." 即:每次 reset 后,前 5 次成功移动会按固定顺序各触发一次泄漏事件。 1.2驱动加载 修改系统日期,驱动可以打上过期签名,即可成功加载。二、隐匿通信手段总结动态分析得到关键泄漏操作API槽位 2.1命名事件泄漏驱动通过 ZwOpenEvent / ZwSetEvent 操作命名事件,将移动结果编码到事件信号中。 2.2命名信号量泄漏驱动通过 ObReferenceObjectByName + KeReleaseSemaphore 操作用户态预先创建的命名信号量,将结果编码到信号量计数变化中。 2.3 TEB 字段泄漏驱动通过 PsGetThreadTeb 获取目标线程的 TEB,并直接写入 TEB+0x68,也就是 LastErrorValue,从而把结果写入用户态可读字段。 2.4 句柄属性泄漏驱动读取 TEB+0x1748 中保存的用户态句柄,并调用ZwSetInformationObject(ObjectHandleFlagInformation) 修改该句柄的 HandleAttributes。 2.5 页属性泄漏 驱动修改imagebase+0x5000页的属性为PAGE_EXECUTE_READWRITE (0x40) 2.6完整脚本验证脚本验证(monitor_shadowgate.py) 五条泄漏的正确判断:[0001] 23:05:35 rule1 event : OK[0002] 23:05:36 rule2 sem : A 0->1 (delta=+1) ; B 0->0 (delta=+0)[0003] 23:05:37 rule3 teb68 : 0x00000000 -> 0xC0DE0001(success)[0004] 23:05:38 rule4 slot : 0x00000000000000A4 -> 0x00000000000000A4 rule4 attr : attr16=00 00 (none) -> attr16=00 01 (PROTECT_FROM_CLOSE)[0005] 23:05:39 rule5 prot : 0x00000004 (PAGE_READWRITE) -> 0x00000040 (PAGE_EXECUTE_READWRITE) 五条泄漏的错误判断: rule1 event : WALLrule2 sem : A 5->5 (delta=+0) ; B 0->1 (delta=+1)rule3 teb68 : 0xC0DE0001(success) -> 0xC0DE0000(wall)rule4 attr : attr16=00 01 (PROTECT_FROM_CLOSE) -> attr16=00 00 (none)rule5 prot : 0x00000040 (PAGE_EXECUTE_READWRITE) -> 0x00000004 (PAGE_READWRITE) 附:详细分析见后文 三、探索迷宫 3.1驱动端静态分析
看到了关键信息,申请了页,名为“Maze”,猜测为迷宫存储的具体位置。3.2驱动端动态分析双机验证一下,
Windbg下断点,bp nt!PnpCallDriverEntry+0x44g加载驱动bp raxg成功到DriverEntry,对比IDA,成功断下。 对Pool2 = (void *)ExAllocatePool2(64, 0x1D8, 'ezaM');下断点, 成功断下,然后执行单步走,r看rax存储的值,继续执行,打开三环进行通信,windbg访问内存,得到如下图: 3.3 迷宫地图00 00 00 00 00 00 00 01 00 00 00 00 00 01 01 01 01 01 01 00 01 01 01 00 01 00 00 00 00 00 00 01 00 00 00 00 00 01 00 00 01 01 01 00 01 01 01 01 01 01 01 00 00 01 00 00 00 00 00 00 00 00 00 01 00 00 01 00 01 00 01 01 01 01 01 00 01 00 00 01 00 01 00 01 00 00 00 01 00 01 00 00 01 00 01 01 01 00 01 00 01 01 01 00 00 01 00 00 00 00 00 01 00 01 00 00 00 00 01 01 01 01 01 01 01 00 01 00 01 01 00 00 00 01 00 00 00 01 00 01 00 01 00 01 01 00 01 00 01 00 01 00 01 00 01 00 00 00 00 00 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 四、求解路径 脚本:shortest_path.pyDDDDDD SS DDDD WW DD SSSS SSSS AA SSSS DD五、flag flag{SHAD0WNT_HYPERVMX} 六、详细分析(针对隐蔽通道的分析) 已知前五步,每一步都有一种隐蔽的通信方式,并且拿到了地图和flag(第三部
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290796.htm
[原创]2026腾讯游戏安全竞赛pc端初赛 可复现的wp
160 浏览
5 回复
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测
我是直接拿驱动里的地图的,第五步成功是将权限04->40,然后第六步失败给的反馈是40->04
清野
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
还有佬,脚本能给一下吗,我复现学习一下
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
还有佬,脚本能给一下吗,我复现学习一下
清野
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
我是直接拿驱动里的地图的,第五步成功是将权限04->40,然后第六步失败给的反馈是40->04
我跑的是模拟执行全程没遇到蓝屏,跑出来的五类泄露分别是 1. Event 泄漏;2.Semaphore 泄漏;3.TEB 写入泄漏;4.TEB/线程上下文读探测;5.PEB 读探测[em_032]
我是直接拿驱动里的地图的,第五步成功是将权限04->40,然后第六步失败给的反馈是40->04
tql