damariion/CVE-2015-8522

GitHub: damariion/CVE-2015-8522

针对 IBM Tivoli FastBack Server 栈溢出漏洞的完整利用链,具备 ASLR/DEP 绕过能力并最终实现远程反向 Shell。

Stars: 0 | Forks: 0

# [CVE-2015-8522](https://www.cve.org/CVERecord?id=CVE-2015-8522) [Tivoli FastBack Server (6.1.4)](https://www.ibm.com/docs/en/tsmf/6.1.12?topic=tivoli-storage-manager-fastback-overview) 应用程序存在基于栈的缓冲区溢出漏洞,允许威胁行为者通过远程 TCP 连接获得[任意代码执行 (ACE)](https://en.wikipedia.org/wiki/Arbitrary_code_execution)。本仓库中提供的 PoC 利用此漏洞在目标上执行 [CMD.exe](https://ss64.com/nt/) 并处理传入连接以建立反向 shell。 ![示例](/assets/example.gif) ![OS](https://img.shields.io/badge/OS-Windows-blue) ![BUILD](https://img.shields.io/badge/BUILD-10.0.16299-blue) ![ARCH](https://img.shields.io/badge/ARCH-x86-blue) ## 漏洞 #### 通信 PoC 通过 TCP 端口 `11460` 与易受攻击的应用程序通信。传输到此端口的数据必须遵循下面定义的结构: ``` 0x00000123 0x00000000 0x00000000 0x00000000 0x00000ABC 0x00000AAA 0x00000111 0x00000BBB 0x00000222 0x00000CCC 0x00000333 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 ... ... ... ``` | 字段 | 描述 | 目标 |--|--|--| | `123` | 大小 | 数据包 | `ABC` | 操作码 | 函数 | `AAA`, `111` | 偏移量, 大小 | 缓冲区 (1) | `BBB`, `222` | 偏移量, 大小 | 缓冲区 (2) | `CCC`, `333` | 偏移量, 大小 | 缓冲区 (3) #### 利用 使用上述数据包结构,PoC 调用由操作码 `0x534` 标识的 `_FXCLI_SetConfFileChunk` 函数。从这里开始,执行流程导致对 `sscanf` 的调用,其参数直接从缓冲区 (1) 读取而未经过适当清理。通过提供一个正好为 `0x118` 字节的块,`eip` 指针将被最后 4 个字节中的任何值覆盖。 ## 缓解绕过 #### 地址空间布局随机化 (ASLR) 为了绕过 ASLR,PoC 通过发送带有操作码 `0x2000` 的上述网络数据包来调用 `FXCLI_DebugDispatch` 函数。此函数读取第一个缓冲区以执行特定功能,其中一些列在下面: - `DumpMemoryPools` - `ReadRepositorySectors` - `SymbolOperation` PoC 使用 `SymbolOperation` 功能,该功能输入任意符号并返回其基地址。由此,解析出 `N98E_CRYPTO_get_new_lockid` 的地址,并从中减去其偏移量 (_0x14E0_)。这最终得到 `libeay32IBM019.dll` 的基地址,该地址将在下一个绕过阶段被广泛使用。 在构建 ROP 之前,会检查基地址是否存在潜在的坏字符。_如果_存在这些字符,则通过溢出缓冲区并将 `eip` 覆盖为无意义的值 `0x90909090` 来重启易受攻击的应用程序。之后,探测应用程序直到其重新上线,重新开始循环。 #### 数据执行保护 (DEP/NX) 构建 ROP 链,使用从上一绕过阶段获取的基地址。此 ROP 链调用 `WriteProcessMemory`,并将“邀请”的内容复制到 `libeay32IBM019.dll` 中 .text 段的代码洞 (code-cave)。 当 ROP 链构建完成后,会再次检查其所有(已解析的)内容是否存在潜在的坏字符。_如果_存在这些字符,则以前一绕过阶段相同的方式重启应用程序,循环再次开始。 ## 后渗透 在漏洞利用缓解措施被绕过后,即实现了通用的 ACE。利用此 ACE 执行特定的 shellcode,该 shellcode 使用 `CreateProcessA` 创建 `CMD.exe` 进程。此调用的参数设置为将所有管道 (_STDIN_, _STDOUT_, _STDERR_) 重定向到与本地主机连接的套接字连接。 同时,PoC 在本地主机上启动一个监听器,捕获来自远程主机的入站请求,并启动一个_非常基础_的 CLI 接口与创建的 `CMD.exe` 进程进行交互。 ## 可视化 ``` graph a("Start") b("Buffer overflow: crash") c("Buffer overflow: hijack") subgraph sa["ASLR Bypass"] a1["Resolve API with 'SymbolOperation'"] a2["Subtract offset (0x14E0)"] a3{"Base contains bad-chars?"} a1 -->| N98E_CRYPTO_get_new_lockid | a2 a2 -->| libeay32IBM019.dll | a3 end subgraph sb["DEP Bypass"] b1["Construct ROP"] b2{"ROP contains bad-chars?"} b3["Locate shellcode"] b4["Locate code-cave"] b5["Invoke WriteProcessMemory"] b6["Return to shellcode"] b1 --> b2 b2 -->| no | b3 b3 --> b4 b4 --> b5 b5 --> b6 end subgraph sc["Reverse Shell"] c1["(Remote) connect to localhost"] c2["(Local) listen on available port"] c3["(Local) accept connection"] c4["(Local) loop over CMDs"] c1 --> c2 c2 --> c3 c3 --> c4 end a3 -->| no | sb b2 -->| yes | b a3 -->| yes | b a --> sa b --> a b6 --> c --> sc ```
标签:ACE, ASLR 绕过, CVE-2015-8522, Go语言工具, PoC, RCE, sscanf, TCP, Tivoli FastBack Server, Web报告查看器, x86, 任意代码执行, 反向Shell, 暴力破解, 栈溢出, 漏洞分析, 端口11460, 端点可见性, 缓冲区溢出, 编程工具, 网络安全, 路径探测, 远程代码执行, 逆向工具, 隐私保护