Web網(wǎng)絡(luò)安全漏洞分析SQL注入原理詳解
一、SQL注入的基礎(chǔ)
1.1 介紹SQL注入
SQL注入就是指Web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷,前端傳入后端的參數(shù)是攻擊者可控的,并且參數(shù)帶入數(shù)據(jù)庫查詢,攻擊者可以通過構(gòu)造不同的SQL語句來實(shí)現(xiàn)對數(shù)據(jù)庫的任意操作。
下面以PHP語句為例。
$query = "SELECT * FROM users WHERE id = $_GET['id']";
由于這里的參數(shù)ID可控,且?guī)霐?shù)據(jù)庫查詢,所以非法用戶可以任意拼接SQL語句進(jìn)行攻擊。
當(dāng)然,SQL注入攻擊按照不同的分類方法可以分為很多種,如報錯注入、盲注、Unicode注入等。
1.2 注入的原理
SQL注入漏洞的的產(chǎn)生需要滿足一下兩個條件。
參數(shù)用戶可控:前端傳給后端的參數(shù)內(nèi)容是用戶可以控制的。
參數(shù)帶入數(shù)據(jù)庫查詢:傳入的參數(shù)拼接到SQL語句,且?guī)霐?shù)據(jù)庫查詢。
 當(dāng)傳入的ID參數(shù)為1'時,數(shù)據(jù)庫執(zhí)行的代碼如下所示。
select * from users where id = 1'
這不符合數(shù)據(jù)庫語法規(guī)范,所以會報錯。當(dāng)傳入的ID參數(shù)為and 1=1時,執(zhí)行的SQL語句如下所示。
select * from users where id = 1 and 1 = 1
因?yàn)?=1為真,且where語句中id=1也為真,所以頁面會返回與id=1相同的結(jié)果,當(dāng)傳入的ID參數(shù)為and 1=2時,由于1=2不成立,所以返回假,頁面就會返回與id=1不同的結(jié)果。
由此可以初步判斷ID參數(shù)存在SQL注入漏洞,攻擊者可以進(jìn)一步拼接SQL語句進(jìn)行攻擊,致使數(shù)據(jù)庫信息泄露,甚至進(jìn)一步獲取服務(wù)器權(quán)限等。
在實(shí)際開發(fā)環(huán)境中,泛式滿足上述兩個條件的參數(shù)皆可能存在SQL注入漏洞,因此開發(fā)者需秉持“外部參數(shù)皆不可信的原則”進(jìn)行開發(fā)。
1.3 與MySQL注入相關(guān)的知識
在MySQL 5.0版本之后,MySQL默認(rèn)在數(shù)據(jù)庫中存放一個“information_schema”的數(shù)據(jù)庫,在該庫中,需要記住三個表名,分別是SCHEMATA、TABLES和COLUMNS。
SCHEMATA表存儲該用戶創(chuàng)建的所有數(shù)據(jù)庫的庫名,我們需要記住表中記錄數(shù)據(jù)庫名的字段名為SCHEMA_NAME。

圖1 SCHEMATA表
TABLES表存儲該用戶創(chuàng)建的所有數(shù)據(jù)庫的庫名和表名,我們需要記住該表中記錄數(shù)據(jù)庫庫名和表名的字段分別為TABLE_SCHEMA和TABLE_NAME。

圖2 TABLES表
COLUMNS表存儲改用戶創(chuàng)建的所有數(shù)據(jù)庫的庫名、表名和字段名,我們需要記住該表中記錄數(shù)據(jù)庫庫名、表名和字段名的字段名分別為TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。

圖3 COLUMNS表
常用的MySQL查詢語句核函數(shù)如下所示。
MySQL查詢語句
在不知道任何條件時,語句如下所示。
SELECT 要查詢的字段名FROM 庫名.表名
在知道一條已知條件時,語句如下所示。
SELECT 要查詢的字段名 FROM 庫名.表名 WHERE 已知條件的字段名='已知條件的值'
在知道兩條已知條件時,語句如下所示。
SELECT 要查詢的字段名 FROM 庫名.表名 WHERE 已知條件1的字段名='已知條件1的值' AND 已知條件2的字段名='已知條件2的值'
limit的用法
limit的使用格式為limit m,n,其中m是指記錄開始的位置,從0開始,表示第一條記錄;n是指取n條記錄。例如limit 0,1表示從第一條記錄開始,取一條記錄,不使用limit和使用limit查詢的結(jié)果分別如圖4和圖5所示,可以明顯地看出二者的區(qū)別。

圖4 不使用limit時的查詢結(jié)果

圖5 使用limit時的查詢結(jié)果
需要記住的幾個函數(shù)
database():當(dāng)前網(wǎng)站使用的數(shù)據(jù)庫。
version():當(dāng)前MySQL的版本。
user():當(dāng)前MySQL的用戶。
注釋符
常見注釋的表達(dá)方式;#或–空格或/**/。
內(nèi)聯(lián)注釋
內(nèi)聯(lián)注釋的形式:/*!code*/。內(nèi)聯(lián)注釋可以用于整個SQL語句中,用來執(zhí)行我們的SQL語句,如下面的例子。
index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
以上就是Web網(wǎng)絡(luò)安全漏洞分析SQL注入原理詳解的詳細(xì)內(nèi)容,更多關(guān)于Web安全漏洞SQL注入的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
網(wǎng)絡(luò)安全滲透測試反序列化漏洞分析與復(fù)現(xiàn)工作
這篇文章主要為大家介紹了網(wǎng)絡(luò)安全滲透測試反序列化漏洞分析與復(fù)現(xiàn)的工作流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
Web網(wǎng)絡(luò)安全分析SQL注入繞過技術(shù)原理
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析SQL注入繞過技術(shù)原理的詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)如何應(yīng)對防御
這篇文章主要為大家介紹了面對DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)應(yīng)該如何應(yīng)對,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2023-10-10
網(wǎng)絡(luò)安全流量分析工具蟻劍詳細(xì)介紹
蟻劍(AntSword)是一款開源的跨平臺WebShell管理工具,它主要面向于合法授權(quán)的滲透測試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員,蟻劍推崇模塊化的開發(fā)思想,遵循開源,就要開得漂亮的原則,致力于為不同層次的人群提供最簡單易懂、方便直接的代碼展示及其修改說明2022-09-09

