首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

路由器漏洞分析第五弹:CVE-2018-5767远程代码执行

*本文作者:kczwa1,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

此前我们分析了四种路由器漏洞,现在终于写到 PWN 类的漏洞了。

传送门:

通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

路由器漏洞复现分析第三弹:DVRF INTRO题目分析

路由器漏洞复现分析第四弹:CVE-2018-7034

1.漏洞概述

CVE-2018-5767 TENDA AC15路由器权远程代码执行

参考信息:https://www.fidusinfosec.com/remote-code-execution-cve-2018-5767/

漏洞固件版本:

Tenda cn Ac15_firmware:15.03.1.16

2.漏洞分析.

漏洞文件是bin/httpd

此处会将cookie中的password后面的值拷贝到变量var_1c0,造成栈溢出

Arm 小端结构.

先把arm架构的qemu拷贝过来

使用如下脚本调试:

此处会需要将connectcfm的返回值patch为1:

推荐一下keypatch 插件,可以在IDA中直接修改指令, https://github.com/keystone-engine/keypatch

之后http服务就可以运行起来了:

在R7WebsSecurityHandler中下好断点,

Exploit.py运行,断下来:

有nx,栈里的代码不能直接执行,因此必须ROP了。

查找libc 基址:

Libc=0x409c7000

但是此处有个坑,libc的地址并不正确,rop链会跳到错误的地方,

看一下puts函数的地址:

Puts在libc中的地址:

那么libc=409dccd4-35cd4=409A7000

Libc中有system函数,那么需要找一个pop r0,sp类似的代码把sp中的参数放到r0去

ROPgadget—binary=./lib/libc.so.0 | grep”mov r0, sp”

或者 –only “pop”| grep“r0”,但是pop 这条命令无法使用,因为r0的参数太长,所以需要放到pc后面, 找到如下两个godget:

先将system pop到r3,再将 sp中的command参数放到r0,

构造如下exploit.py :

在覆盖pc后,返回之前的栈的结构如下,6669672e为”.gif”,后面为布好的rop链

运行完后,通过-strace参数可以看到httpd在模拟环境中执行了我们想要执行的命令:

*本文作者:kczwa1,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180405B0YFWV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券