
解包后运行

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


1 | mkdir ./var/run |


1 | touch ./var/run/nvramd.pid |
之后继续运行发现缺少二进制ip数据

ida中搜索一下发现在main文件中
原因推理 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

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

1 | ❯ curl -I http://127.0.0.1 |
所以访问的时候要走
1 | http://192.168.137.140/dir_login.asp/ |


看到他向formLogin和dir_login.asp发送的请求
找登录验证文件

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


首先通过nvram_bufget获取到正确的username和password,
然后通过websGetVar获取用户登录的时候输入的username和password
接下来是两个strcmp函数,用来比较nvram获取的和用户输入的是否一致,这里我们考虑,既然是strcmp函数,且没有检测username和password是否为空,直接什么都不输入就绕过了
在0x045711C处下断点,修改strcmp校验通过


之后还是需要自己去补全url码
1 | http://192.168.137.140/d_wizard_step1_start.asp |
漏洞验证
找漏洞点:更新时间处

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


POST /goform/form2systime.cgi HTTP/1.1
说明攻击入口是
1 | d_time.asp |
追踪form2systime,且datetime是用户自定义的,没有经过过滤
直接参与doSystem(“date -s "%s"“, Var);执行,存在漏洞

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

参考