CVE-2018-17066复现
Zach0ry Lv4

固件地址

image

解包后运行

image

ida分析

根据运行报错去ida中分析发现要创建两个对应的文件

image

image

1
2
mkdir ./var/run
touch ./var/run/goahead.pid

image

image

1
touch ./var/run/nvramd.pid

之后继续运行发现缺少二进制ip数据

image

ida中搜索一下发现在main文件中

image原因推理 v19=-1 > v16 is NULL > v15通过nvram_bufget函数得到的返回值为空

因为我们的模拟环境终中没有对lan_ipaddr字段赋值

该文件还通过nvram_bufget函数获取了账号密码,需要一同伪造

用户级模拟

gdb条件修改

连接gdb调试,在 if ( v19 == -1 )即0x0045CDDC 赋值处改v19为1

在虚拟机中起命令sudo chroot ./ ./qemu-mipsel-static -g 1234 ./bin/goahead

image

成功执行了,但是跳转异常

image

1
2
3
4
5
6
7
8
9
10
11
❯ curl -I http://127.0.0.1 
HTTP/1.0 302 Redirect
Server: GoAhead-Webs
Date: Sun Jul 19 05:15:26 2026
X-Frame-Options: SAMEORIGIN
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Location: http:///dir_login.asp
^
少了主机/IP

所以访问的时候要走

1
http://192.168.137.140/dir_login.asp/

image

image

看到他向formLogin和dir_login.asp发送的请求

找登录验证文件

image

把所有的返回都改为true,保证函数跳转

找formLogin

image

image

首先通过nvram_bufget获取到正确的username和password,

然后通过websGetVar获取用户登录的时候输入的username和password

接下来是两个strcmp函数,用来比较nvram获取的和用户输入的是否一致,这里我们考虑,既然是strcmp函数,且没有检测username和password是否为空,直接什么都不输入就绕过了

在0x045711C处下断点,修改strcmp校验通过

image

image

之后还是需要自己去补全url码

1
http://192.168.137.140/d_wizard_step1_start.asp

漏洞验证

找漏洞点:更新时间处

image

这里web页面对输入有限制,可以利用burp suite进行抓包修改发送的数据

image

image

POST /goform/form2systime.cgi HTTP/1.1

说明攻击入口是

1
2
3
4
5
d_time.asp
|
POST
v
/goform/form2systime.cgi

追踪form2systime,且datetime是用户自定义的,没有经过过滤

直接参与doSystem(“date -s "%s"“, Var);执行,存在漏洞

image

修改datetime

反引号 (``) 或 $() 会优先执行

反引号用于命令替换,即在反引号内的命令会先执行,其输出结果会替换反引号的内容。现代脚本中,推荐使用 $() 形式,因为它更易读且支持嵌套。

image

参考

物联网终端安全入门与实践之玩转物联网固件(中)

 请作者喝杯咖啡
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View