AIS3 2024 - 專題研究成果
Author: 堇姬Naup
專題
我是網頁、IoT及軟體安全的A2。
這次是做IoT的漏洞專題,這次是研究Tenda router,研究的型號是AC10、AC15兩個型號,並且嘗試從CVE付現到挖出漏洞,雖然沒有拿最佳專題,但我也學到很多。以下是研究內容
AC10 CVE付現
解firmware
| 1 | binwalk -E US_AC10V1.0RTL_V15.03.06.23_multi_TD01.bin | 

看起來沒有加密
直接
| 1 | binwalk -e US_AC10V1.0RTL_V15.03.06.23_multi_TD01.bin | 
模擬
qemu-mipsel-static
| 1 | sudo apt install lib32z1 qemu-user-static | 
可以先嘗試模擬
| 1 | sudo chroot ./ ./qemu-mipsel-static ./bin/httpd | 

追進WeLoveLinux這個string
分析一下可能會卡幾個東西
apmit_init()、check_network()、ConnectCfm()
jalr做跳轉到$t9,$t9->$v0->apmib_init位置
apmib_init

09 F8 20 03 -> 01 00 02 24 
https://shell-storm.org/online/Online-Assembler-and-Disassembler/
(patch 成 li  $v0, 1)
check_network

09 F8 20 03 -> 01 00 02 24 
(patch 成 li $v0, 1)
ConnectCfm

09 F8 20 03 -> 01 00 02 24 
(patch 成 li $v0, 1)
都patch掉了

| 1 | sudo chroot ./ ./qemu-mipsel-static ./bin/httpd_patch | 
run起來可以跑了
網卡

ip -> g_lan_ip -> br0
find br0 ip & listen br0網路接口ip
所以我們可以加入一個br0橋接網卡,並把網卡ens33加進去,這樣就可以抓到正確的ip
| 1 | sudo apt install uml-utilities bridge-utils | 

成功模擬
Page not found
webroot重新定向到webroot_ro
| 1 | rm -rf webroot | 
漏洞分析
formDefineTendDa() ->
/goform/WriteFacMac

可以控mac,doSystemCmd就是可以執行命令,所以有command injection

pwned!!


第一次送請求被redirect掉,所以送兩次
| 1 | import requests | 
AC15 漏洞挖掘
Emulation
debug 要裝 gdb-multiarch
arch : arm
binwalk -e 噴 error 的話先裝這個
https://github.com/devttys0/sasquatch
| 1 | sudo apt install qemu-user-static | 
sub_2E420 是 main(),他的啟動畫面跟 AC10 一模一樣,印象中 AC10 是有 symbol 的,可以對著看
IDA Pro ALT + t 可以找字串,找到後看 xref 辨別函數,我猜 AC10 AC15 寫的差不多
patch

先跳到print WeLoveLinux的地方,看卡在哪

check network
check network -> 死迴圈 -> sleep
MOV R3,R0(0030a0e1) -> MOV R3,#1(0130a0e3)

再回來看發現patch掉了
ConnectCfm
ConnectCfm->掛掉
MOV R3,R0(0030a0e1) -> MOV R3,#1(0130a0e3)


網卡
看上方發現抓到的ip不對
追進去看
ip -> g_lan_ip -> br0
find br0 ip & listen br0網路接口ip
所以我們可以加入一個br0橋接網卡,並把網卡ens33加進去,這樣就可以抓到正確的ip
| 1 | sudo apt install uml-utilities bridge-utils | 

| 1 | rm -rf webroot | 

| 1 | sudo chroot ./ ./qemu ./bin/httpd_patch | 
gdb
| 1 | sudo chroot ./ ./qemu -g 30000 ./bin/httpd_patch | 

attack

| 1 | readelf -a ./lib/libc.so.0 | grep "system" | 
| gadget | address | 
|---|---|
| libc system offset | 0x0005a270 | 
| pop {r3, pc} | 0x00018298 | 
| mov r0, sp ; blx r3 | 0x00040cb8 | 
sub_2E9EC() ->
/goform -> 下方有define追進去

/SetNetControlList (可以專注找set開頭之類的,因為比較有機會可以跟他互動)
追進去
list傳入 -> 資料進到sub_7DD20
進到
strcpy
往上追發現dest固定大小並且在rbp-0x260,可以buffer overflow
| 1 | gdb-multiarch ./bin/httpd_patch | 
利用
| 1 | pop {r3, pc} | 
pop掉後
r3 -> system
pc(rip的概念) -> mov r0, sp ; blx r3 gadget address
接下來會跳轉到pc的位置,跳到gadget
mov r0, sp ; blx r3
到這裡時候,sp(rsp -> stack頂部)拿出cmd,放入r0
blx r3跳進去system
get shell
leak libc
首先qemu的vmmap不能用,所以要找其他方式找
另外qemu每次模擬libc base都一樣
這邊我有在想,如果是在實體機的狀況要怎麼辦,查了一些資料後發現,這個情況下,與CTF不同,通常crash掉後機器重啟libc base與之前相同,所以可以嘗試爆破libc base作為手段,另外也可以利用其他information leak相關洞來leak libc

這裡有puts先跳進去,讓GOT有libc位置,然後進看
| 1 | b *0x0002E4FC #下斷點 | 


puts經過ASLR後address(0x3fdd1cd4)-puts offset(0x35cd4) = 0x3fd9c000(libc base)

exploit
| 1 | import requests | 
pwned

簡報
以下是我的簡報連結
 
      
    