damariion/CVE-2015-8522.RCE

GitHub: damariion/CVE-2015-8522.RCE

针对 IBM Tivoli FastBack Server 6.1.4 栈缓冲区溢出漏洞(CVE-2015-8522)的远程代码执行 PoC,包含 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。 ![example](/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 之前,会检查基地址是否存在潜在的坏字符。_如果_存在坏字符,则通过溢出缓冲区并用无意义的值 `0x90909090` 覆盖 `eip` 来重启易受攻击的应用程序。随后,应用程序会被持续探测直到其重新上线,随后重新开始此循环。 #### 数据执行保护 (DEP/NX) 构建 ROP 链时使用了从上一绕过阶段获取的基地址。此 ROP 链调用 `WriteProcessMemory`,并将“邀请”的内容复制到 `libeay32IBM019.dll` 中 .text 节的 code-cave 中。 当 ROP 链构建完成时,会再次检查其所有(已解析的)内容是否存在潜在的坏字符。_如果_存在这些字符,则会以与上一绕过阶段相同的方式重新启动应用程序,并再次开始该循环。 ## 后渗透 在漏洞利用缓解措施被绕过后,就已经实现了通用的 ACE。利用此 ACE 执行特定的 shellcode,该 shellcode 使用 `CreateProcessA` 创建一个 `CMD.exe` 进程。此调用的参数被设置为将所有的管道(_STDIN_、_STDOUT_、_STDERR_)重定向到与 localhost 建立的 socket 连接。 同时,PoC 在 localhost 上启动一个监听器,捕获来自远程主机的入站请求,并启动一个 _非常基础的_ 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 ```
标签:ASLR绕过, CISA项目, Conpot, CVE-2015-8522, IBM Tivoli FastBack Server, PoC, TCP协议, Windows安全, x86架构, 云资产清单, 任意代码执行, 反弹Shell, 安全漏洞, 暴力破解, 栈缓冲区溢出, 端点可见性, 编程工具, 网络安全, 远程代码执行, 逆向工具, 逆向工程, 隐私保护