# AIS3 Project : YOUR NETIS MINE 這是 2025 AIS3 的專題,首先要感謝我的隊友們([dkri3c1](https://dkri3c1.github.io/)、[CX330](https://blog.cx330.tw/)、[Jackoha](https://jackoha.github.io/)),他們猶如神隊友一般的存在。 一開始我們每個人都一起做同樣的事情,但到後面就各自負責自己擅長的領域,而我這次負責模擬設備(最後一天才成功,中間被 dk 的 FirmAE 十分鐘搞定),現在就來說說這整個的心路歷程吧! ## Device [netis 的 WF2409E Router](https://www.netis-systems.com/support/downinfo.html?id=62),版本為 V4.0.1.4296,最新一次更新為 2025/06/11 ![device](https://hackmd.io/_uploads/HkAbFQB5lx.png =400x) ## Environment - VMWARE Workstation pro 17 - Ubuntu 22.04 LTS ## Steps 1. 拆韌體 ``` binwalk -e <firmwamre_name> ``` ![binwalk_hu_6048dff7852b6b9b](https://hackmd.io/_uploads/HytDt7rqge.png) 會發現很多 Warning,總共有 75 個 Symbolic Link Problem 2. 解決 Symbolic Link Problem ``` # 建立軟連結檔,目標檔案指向原始檔案 ln -sf <原始檔案> <目標檔案> # 查看每個檔案的連結 ls -l ``` ![slp_hu_bebb4dbf21a00d15](https://hackmd.io/_uploads/HyQlsXHclg.png) ![slp_solved_hu_637c35f1bc125606](https://hackmd.io/_uploads/HJRCcQB9el.png) 3. 使用 QEMU 模擬 (1) 硬體架構設置 ``` # 查看該韌體的硬體架構 file busybox ``` ![firmware_mips_hu_39cca445c941bfe2](https://hackmd.io/_uploads/H1Vv9QScll.png) 得知是 MIPS32 Little-Endian Architecture,所以我下載對應的 [Kernel 和 Images](https://people.debian.org/~aurel32/qemu/mipsel/) ![images_hu_7af1b5c83ec92883](https://hackmd.io/_uploads/r1kacXrqeg.png) (2) 網路設置 建立網橋(br0)和虛擬網卡(tap0),使得虛擬機的網路能夠與 QEMU 模擬出的硬體網路相通 ``` sudo brctl addbr br0 sudo ifconfig br0 192.168.153.1/24 up sudo tunctl -t tap0 sudo ifconfig tap0 192.168.153.11/24 up sudo brctl addif br0 tap0 ``` ![network_hu_5652343332eb8eb2](https://hackmd.io/_uploads/SJ9W37S5gg.png) (3) 模擬起來 把剛剛的硬體架構與網路設置寫成一個 script,並且跑起來 ``` sudo qemu-system-mipsel \ -M malta \ -kernel vmlinux-2.6.32-5-4kc-malta \ -hda debian_squeeze_mipsel_standard.qcow2 \ -append "root=/dev/sda1 console=tty0" \ -netdev tap,id=net0,ifname=tap0,script=no \ -device e1000,netdev=net0 \ -nographic ``` 就可以看到成功把 QEMU 跑起來 ![qemu_run_hu_49dae69fd2c195a](https://hackmd.io/_uploads/r1-In7rcex.png) (4) 確定網路相連 ``` # 在 QEMU 中設置 IP address ifconfig eth0 192.168.153.13 up ``` 可以在虛擬機和 QEMU 裡面,互相 ping 彼此來測驗是否成功使網路相通 ![ping_hu_35f8a27a854b1954](https://hackmd.io/_uploads/SkCd2QSqgx.png) (5) 韌體掛載 ``` # 將虛擬機上的韌體檔案掛載至 QEMU 裡面 ssh-keygen -f "/home/dd/ .ssh/known_hosts" -R "192.168.153.13" scp -oHostKeyAlgorithms=+ssh-rsa -r squashfs-root/ root@192.168.153.13:/root/ ``` 可以在 QEMU 看到成功把韌體檔案包掛載進來了! ![scp_success_hu_e948c93494a9f57d](https://hackmd.io/_uploads/S1j8TXHqxx.png) ``` # 把虛擬機的 /dev 和 /proc 掛載進子系統 mount -o bind /dev ./squashfs-root/dev/ mount -t proc /proc ./squashfs-root/proc/ # 切換根目錄到 squashfs-root chroot ./squashfs-root sh ``` (6) 跑 Web Server 在這之前要先逆向,找出該韌體 web server 的 binary,並在 QEMU 裡面將他跑起來(感謝 CX330 逆向電神用 Binja 打遍天下) ``` ./boa -f /etc/boa/boa.conf ``` 4. 瘋狂 patch 照理來說到第三步後,應該會成功跑起來,但過程就是沒有這麼順利 QAQ,~~所以開始玩踩地雷大賽~~ ![game_hu_b7ddbb33a556ece7](https://hackmd.io/_uploads/r17WyVB9eg.png =250x) (1) 當前的 user 和 group 不存在系統內 ![problem1_hu_8a54e298eab1ea1c](https://hackmd.io/_uploads/B1gSJ4B9lx.png) ![problem2_hu_474c0b40af1632e0](https://hackmd.io/_uploads/HJ0Hy4Scgl.png) 解法:把 root 加進 passwd 和 group 裡面 ``` echo 'root:x:0:0:root:/root:/bin/sh' > ./squashfs-root/etc/passwd echo 'root:x:0:' > ./squashfs-root/etc/group ``` (2) bind failed 因為已經執行過該 binary,所以他的 port 被 boa process(前一次執行的)佔用,所以現在無法 bind port 80 ![problem3_hu_e6708b30597f786d](https://hackmd.io/_uploads/B15YyVH5lg.png) 解法:直接 kill 掉所有 boa process ``` killall boa ``` (3) /etc/boa/boa.conf 文件中有錯誤 仔細讀一下的程式碼,會發現他的系統檔案跟他的配置檔有路徑問題,看要直接 patch 該配置檔,還是改他的檔案路徑 解法:更改配置檔 ![problem4_hu_3260e91808ccbcfc](https://hackmd.io/_uploads/H1SAJEHcel.png =300x) ![solved4_hu_5dc6b08c7e80238](https://hackmd.io/_uploads/BJvJeVr5lg.png =300x) (4) web.tar.gz 沒有接壓縮 ![problem5_hu_17248fc6144c4d58](https://hackmd.io/_uploads/ryl7eNHcee.png =300x) 解法:解壓縮 ``` tar zxvf web.tar.gz ``` (5) Web Server 成功跑起來了,但是是壞的… ![failed_hu_a79d550fa84c9b68](https://hackmd.io/_uploads/HyXvlVr9ee.png) 5. 過了三天後 ![3d_hu_299062c3cffbc761](https://hackmd.io/_uploads/rJ_FeVSqee.png) * dkri3c1 花 10 分鐘用 FirmAE 模擬成功! * Jackoha 攻擊漏洞成功! * CX330 寫 CVE 報告書回報漏洞! * 而我呢? 仍然執著於 QEMU 模擬失敗上… 6. 繼續嘗試! 不放棄的精神意味著~~踩地雷大賽繼續開賽~~,後續再去將有關 Web Server 的一些 binary 逆向一下,也去看 /web 資料夾底下的東西,中途也有再 patch 一下,但仍是一張跑不出來的 img 和 Loading… 的文字 ![failed_hu_a79d550fa84c9b68](https://hackmd.io/_uploads/rk6RlErcgl.png) 簡直絕望中的絕望 倒數第二天,轉機出現了! 我按 F12 可以在 Console tab 看到錯誤相關資訊,追進 error 可以看到有一行的 func 沒有成功去 parse data,仔細去看後,會發現這個 func 只是顯示 device 的版本號,所以其實可有可無,那就嘗試直接把它註解掉再試試看! ![setVendor_hu_16f9ef73e7af7068](https://hackmd.io/_uploads/BJ1G-EB9el.png =300x) 7. 終於成功了!!! ![success_hu_6293bf6356562bc8](https://hackmd.io/_uploads/HyIEZNHcxl.png)