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。




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