设为首页收藏本站
查看: 720|回复: 2

《巧用EvilUSB攻击智能路由器—案例1》

[复制链接]
  • TA的每日心情
    擦汗
    2017-9-10 12:02
  • 签到天数: 110 天

    [LV.6]常住居民II

    发表于 2019-8-27 13:56:23 来自手机 | 显示全部楼层 |阅读模式
    上篇文章中给大家分享了EvilUSB原理及其制作的过程,本文将基于上篇文章制作的恶意USB分享对市面上某款路由器的攻击过程。

    0x01 漏洞成因
    1. 开启危险方法

    固件分析过程中发现nginx配置文件中在8080端口开启了web服务,并开启了dav方法:
    1)dav_methods 这个指令用于指定HTTP和WebDAV的方法,设置它为off时其所有的方法都将无效;此文件中服务支持PUT/DELETE/MKCOL/COPY/MOVE方法,支持文件上传删除等操作。

    2)dav_access 这个指令是赋予某个目录或文件以访问权,在配置文件中:dav_access group:rw all:r; 这个指令是给一个用户组或所有用户任何权限。

    3)create_full_put_path 默认情况下,Put方法只能在已存在的目录里创建文件。当然了Nginx必须得有这个目录的修改和写入权限。

    create_full_put_path on 这个指令说明了Put方法可以在创建文件的同时,可创建不存在的路径。

    因为路由器系统登陆SSH是通过读取shadow中保存的密码的方式进行验证登录的,所以根据以上信息,我们可以通过PUT方法创建shadow文件的方式覆盖掉原有的shadow文件,从而覆盖原有的SSH登陆口令。



    替换成功后,我们就可以进一步实现攻击过程,在最初的测试中该路由器是开启了23端口的,实验最初我们可以通过telnet访问的方式实现对路由器的登陆,但不知道什么操作导致了该路由器更新了固件,在目前版本中telnet服务是未开启的,所以我们从rpcd服务入手。

    2. OpenWrt -rpcd服务ACL配置错误

    1)Ubus

    介绍rpcd前给大家介绍下ubus,ubus是openwrt 引入的一个消息总线,主要作用是实现不同应用程序之间的信息交互。用户可以使用ubus 的命令行工具和ubus 总线进行通信,也可以使用libubus.so 里面的api 来和ubus总线交互,利用uhttpd 的模块和rpcd还可以实现通过http 来访问ubus 总线。

    2)通过HTTP访问ubus

    有个叫做uhttpd-mod-ubus的uhttpd插件允许通过HTTP协议来调用ubus,请求必须通过POST方法发送带有/ubus的URL请求,在对固件进行分析过程中发现其配置文件中设置了通过Ubus方式与uhttp交互的参数。

    在配置件/etc/init.d/uhttpd
    对于ubus_prefix 访问路径设置是在/etc/config/uhttpd文件中进行设置,但是此固件中把其写在了脚本中

    根据以上信息我们知道,其设置结果使我们可以通过访问http://server_ip/ubus的方式来完成http与ubus的交互。

    3)rpcd配置介绍

    因为http 来与ubus 总线进行交互是通过rpcd 进行的,同时rpcd是具有访问控制策略的,其访问控制配置文件在/usr/share/rpcd/acl.d 目录下

    这个目录下的文件名是没有作用的,起作用的是json 文件里面的顶层元素,用于定义访问控制针对的用户的用户名,例如unauthenticated.json,这个文件定义了不需要认证(任何人)都可以使用其中包含的方法,如session命名空间里面的access, login 等方法。

    此配置文件中我们可以看到在xapi.basic命名空间下的方法是不需要进行登陆认证的,所以我们可以通过直接调用open_dropbear方法从而开启路由器的22端口,打开SSH服务。

    对于这种没有认证的路由器我们可以通过直接调用open_dropbear方法,假如路由器配置了认证权限怎么办呢,下面继续介绍绕过有登陆认证的ACL,当调用login 进行登录后会获得一个ubus_rpc_session,用于后面的ubus 调用,其中的username与password是可自定义的配置。

    curl -d '{ "jsonrpc": "2.0", "id": 1, "method": "call", "params": [ "00000000000000000000000000000000", "session", "login", { "username": "****", "password": "****"  } ] }'  http://192.168.99.1/ubus

    如果用户名密码正确的话会返回一个ubus_rpc_session,用于调用需要登录后才能调用的方法,同时会显示所有可以通过http 调用的方法。

    对用于rpcd 认证的用户名和密码需要在/etc/config/rpcd 文件中进行设置。

    可以看到,此固件中设置的是使用系统的用户名及密码进行登录,而系统的用户密码我们可以通过put文件的方式上传到路由器中,所以绕过其访问控制措施。达到调用其内部方法的目的。

    对这部分不理解的可以自己去看这篇文章:https://openwrt.org/zh/docs/techref/ubus

    0x02 攻击路由器Demo

    以下视频使用制作的EvilUSB是对路由器攻击过程的演示,通过插入USB进而达到控制路由器shell系统的目的。

  • TA的每日心情
    慵懒
    2019-9-9 17:35
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2019-8-27 15:43:17 | 显示全部楼层
    码住准备开始学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    前天 22:02
  • 签到天数: 38 天

    [LV.5]常住居民I

    发表于 2019-8-27 18:24:21 | 显示全部楼层
    【教程】--零基础黑客教程 01(持续更新)
    http://www.cnhonkerarmy.com/foru ... amp;fromuid=1174844
    (出处: 中国红客联盟)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /1 下一条

    红盟社区--中国红客联盟 

    Processed in 0.121836 second(s), 15 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表