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。




## 漏洞
#### 通信
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, 安全漏洞, 暴力破解, 栈缓冲区溢出, 端点可见性, 编程工具, 网络安全, 远程代码执行, 逆向工具, 逆向工程, 隐私保护