Lucene search
+L

MySQL Database Connection

🗓️ 26 Jan 2026 09:06:36Reported by KittySploitType 
kittysploit
 kittysploit
🔗 kittysploit.com👁 3 Views

KittySploit module to connect to MySQL and execute SQL queries.

Refs
Code
from kittysploit import *

class Module(Post):

	__info__ = {
		"name": "MySQL Database Connection",
		"description": "Connect to MySQL database and execute SQL queries",
		"author": "KittySploit Team",
		"session_type": SessionType.PHP,
		"arch": Arch.PHP,
	'agent': {
	    'risk': 'intrusive',
	    'effects': ['active_exploitation'],
	    'expected_requests': 2,
	    'reversible': False,
	    'approval_required': True,
	    'produces': ['risk_signals'],
	    'cost': 1.5,
	    'noise': 0.5,
	    'value': 1.0,
	    'requires': 	    {'min_endpoints': 0,
	     'min_params': 0,
	     'tech_hints_any': [],
	     'tech_hints_all': [],
	     'specializations_any': [],
	     'risk_signals_any': [],
	     'auth_session': False,
	     'capabilities_any': [],
	     'capabilities_all': [],
	     'confidence_min': {},
	     'confidence_min_any': {},
	     'endpoint_pattern_any': [],
	     'param_any': [],
	     'api_surface_ready': False},
	    'chain': 	    {'produces_capabilities': [],
	     'consumes_capabilities': ['shell'],
	     'option_bindings': {},
	     'suggested_followups': []},
	},
	}	

	host = OptString("localhost", "MySQL host", True)
	port = OptPort(3306, "MySQL port", True)
	username = OptString("root", "MySQL username", True)
	password = OptString("", "MySQL password", False)
	database = OptString("", "Database name (optional)", False)
	query = OptString("SHOW DATABASES;", "SQL query to execute", False)

	def run(self):
		try:
			# Helper function to escape strings for PHP
			def escape_php_string(s):
				# Escape backslashes and single quotes
				return s.replace('\\', '\\\\').replace("'", "\\'")
			
			# Check if MySQL extension is available
			check_ext = self.cmd_execute("""
if(extension_loaded('mysqli')) {
	echo 'mysqli';
} elseif(extension_loaded('mysql')) {
	echo 'mysql';
} else {
	echo 'none';
}
""")
			
			if not check_ext or check_ext.strip() == 'none':
				raise ProcedureError(FailureType.NotAccess, "MySQL extension (mysqli or mysql) is not available")
			
			ext_type = check_ext.strip()
			print_success(f"MySQL extension found: {ext_type}")
			
			# Escape strings for PHP
			host_escaped = escape_php_string(self.host)
			user_escaped = escape_php_string(self.username)
			pass_escaped = escape_php_string(self.password)
			db_escaped = escape_php_string(self.database)
			query_escaped = escape_php_string(self.query) if self.query else ""
			
			# Build connection code based on available extension
			if ext_type == 'mysqli':
				# Use mysqli extension
				connect_code = f"""
$host = '{host_escaped}';
$port = {self.port};
$user = '{user_escaped}';
$pass = '{pass_escaped}';
$db = '{db_escaped}';

$mysqli = @new mysqli($host, $user, $pass, $db, $port);
if ($mysqli->connect_error) {{
	echo 'Connection failed: ' . $mysqli->connect_error;
	exit;
}}
echo 'Connected successfully' . PHP_EOL;
"""
			else:
				# Use legacy mysql extension
				connect_code = f"""
$host = '{host_escaped}';
$port = {self.port};
$user = '{user_escaped}';
$pass = '{pass_escaped}';
$db = '{db_escaped}';

$link = @mysql_connect($host . ':' . $port, $user, $pass);
if (!$link) {{
	echo 'Connection failed: ' . mysql_error();
	exit;
}}
echo 'Connected successfully' . PHP_EOL;
if ($db) {{
	@mysql_select_db($db, $link);
}}
"""
			
			# Execute connection
			connect_result = self.cmd_execute(connect_code)
			if not connect_result or 'Connection failed' in connect_result:
				raise ProcedureError(FailureType.NotAccess, f"Failed to connect to MySQL: {connect_result}")
			
			print_success("Connected to MySQL server")
			
			# Execute query
			if self.query:
				if ext_type == 'mysqli':
					query_code = f"""
$host = '{host_escaped}';
$port = {self.port};
$user = '{user_escaped}';
$pass = '{pass_escaped}';
$db = '{db_escaped}';
$query = '{query_escaped}';

$mysqli = @new mysqli($host, $user, $pass, $db, $port);
if ($mysqli->connect_error) {{
	echo 'Connection failed: ' . $mysqli->connect_error;
	exit;
}}

$result = @$mysqli->query($query);
if (!$result) {{
	echo 'Query failed: ' . $mysqli->error;
	exit;
}}

if ($result === true) {{
	echo 'Query executed successfully (no result set)' . PHP_EOL;
}} else {{
	// Fetch results
	$rows = array();
	while ($row = $result->fetch_assoc()) {{
		$rows[] = $row;
	}}
	
	if (empty($rows)) {{
		echo 'No results' . PHP_EOL;
	}} else {{
		// Print column headers
		$headers = array_keys($rows[0]);
		echo implode(' | ', $headers) . PHP_EOL;
		echo str_repeat('-', 80) . PHP_EOL;
		
		// Print rows
		foreach ($rows as $row) {{
			$values = array();
			foreach ($headers as $header) {{
				$value = isset($row[$header]) ? $row[$header] : '';
				$value = is_null($value) ? 'NULL' : $value;
				$values[] = $value;
			}}
			echo implode(' | ', $values) . PHP_EOL;
		}}
	}}
	$result->free();
}}
$mysqli->close();
"""
				else:
					query_code = f"""
$host = '{host_escaped}';
$port = {self.port};
$user = '{user_escaped}';
$pass = '{pass_escaped}';
$db = '{db_escaped}';
$query = '{query_escaped}';

$link = @mysql_connect($host . ':' . $port, $user, $pass);
if (!$link) {{
	echo 'Connection failed: ' . mysql_error();
	exit;
}}
if ($db) {{
	@mysql_select_db($db, $link);
}}

$result = @mysql_query($query, $link);
if (!$result) {{
	echo 'Query failed: ' . mysql_error($link);
	mysql_close($link);
	exit;
}}

if ($result === true) {{
	echo 'Query executed successfully (no result set)' . PHP_EOL;
}} else {{
	// Fetch results
	$rows = array();
	while ($row = mysql_fetch_assoc($result)) {{
		$rows[] = $row;
	}}
	
	if (empty($rows)) {{
		echo 'No results' . PHP_EOL;
	}} else {{
		// Print column headers
		$headers = array_keys($rows[0]);
		echo implode(' | ', $headers) . PHP_EOL;
		echo str_repeat('-', 80) . PHP_EOL;
		
		// Print rows
		foreach ($rows as $row) {{
			$values = array();
			foreach ($headers as $header) {{
				$value = isset($row[$header]) ? $row[$header] : '';
				$value = is_null($value) ? 'NULL' : $value;
				$values[] = $value;
			}}
			echo implode(' | ', $values) . PHP_EOL;
		}}
	}}
	mysql_free_result($result);
}}
mysql_close($link);
"""
				
				query_result = self.cmd_execute(query_code)
				if query_result:
					print_info("Query result:")
					print_info(query_result)
				else:
					print_warning("No output from query")
			
			return True
			
		except ProcedureError:
			raise
		except Exception as e:
			raise ProcedureError(FailureType.Unknown, f"Error connecting to MySQL: {e}")

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

02 Aug 2026 20:51Current
6.1Medium risk
Vulners AI Score6.1
3