一步一步教你漏洞挖掘之Draytek Vigor RCE CVE-2020-1585分析
Draytek Vigor是一家總部位于中國臺灣的防火墻、VPN設備、路由器、WLAN設備等的制造商。Draytek Vigor Vigor 2960, 3900 and 300B系列產品先后爆出了一些列RCE漏洞,今天一步一步給大家分析一下CVE-2020-1585,整個漏洞比較簡單,適合初學者入門學習,希望對大家學習漏洞挖掘能夠帶來幫助。
固件下載
固件下載地址
https://www.draytek.com.tw/ftp/Vigor2960/Firmware/

下載1.3.3版本和1.5.0版本,對比修補細節。首先使用binwalk分析固件格式,檢測到UBI頭。

使用-ME解壓后得到ubi格式文件。UBI全稱"Unsorted Block Images"。它是工作于raw flash devices之上的volume管理系統,它管理一個單一physical flash設備上的多個logical volume,能夠把I/O負載均勻的分發到flash chip上。

既然是通用的linux格式,應該可以進行解壓,推薦給予python的ubi_reader,Pip直接安裝即可。安裝完成后常用命令如下。解壓命令如下:
root@kali:~/Downloads# ubireader_list_files V2960_V133.allroot@kali:~/Downloads# ubireader_extract_images ./V2960_V133.allroot@kali:~/Downloads# lsubifs-root V2960_V133.all Vigor2960_v1.3.3.zip Vigor2960_v1.5.1.all Vigor2960_v1.5.1.ziproot@kali:~/Downloads/ubifs-root# cd ubifs-root/V2960_V133.all/root@kali:~/Downloads/ubifs-root/V2960_V133.all# lsimg-98631584_vol-rootfs.ubifsroot@kali:~/Downloads/ubifs-root/V2960_V133.all# file img-98631584_vol-rootfs.ubifsimg-98631584_vol-rootfs.ubifs: UBIfs image, sequence number 29821, length 4096, CRC 0xe8a8adf1root@kali:~/Downloads/ubifs-root/V2960_V133.all# ubireader_extract_files ./img-98631584_vol-rootfs.ubifsExtracting files to: ubifs-rootroot@kali:~/Downloads/ubifs-root/V2960_V133.all# lsimg-98631584_vol-rootfs.ubifs ubifs-rootroot@kali:~/Downloads/ubifs-root/V2960_V133.all# ls ubifs-root/bin boot config_backup data dev etc lib mnt proc rom sbin sys tmp usr var www

漏洞分析
0x01 action=login
定位于`/cgi-bin/mainfunction.cgi`:

`action=Login`處理邏輯如下:
- 從CGI獲取keyPath、loginUser、loginPwd參數,講參數中空格替換為+;
- call_open函數里調用了popen,使用sed替換,有可能可進行注入;
- loginUser和loginPwd經過特殊加密,然后進行base64編碼,js文件經過混淆,加密分析流程比較復雜。
嘗試keypath注入,但是沒有效果,不確定是否支持管道和&、|等操作符。

寫文件測試不成功。

0x02 action=captcha
找到另一個接口captcha。

使用system函數,執行時支持& >等特殊符號。

構造payload為`xxx'&&COMMAND&&'`,執行命令成功。

修復方式
官方在1.5.1固件中修補了該漏洞。驗證碼生成處,檢查rtick必須為數字。

登陸驗證處。要求keyPath長度為30,且不能包含`&<>|;`等特殊字符。

check_character函數如下。
