---
# System prepended metadata

title: 'AIS3 Project : YOUR NETIS MINE'
tags: [IoT]

---

# 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)
