Sqlmapphp
開源,python編寫python
支持5種sql注入檢測技術:mysql
1、基於布爾的注入檢測linux
2、基於時間的注入檢測web
3、基於錯誤的注入檢測正則表達式
4、基於UNION聯合查詢的檢測sql
5、基於堆疊查詢的檢測mongodb
支持的數據庫管理系統(可能不支持mongodb):shell
mysql、oracle、postgresql、sql_server、access、DB2等數據庫
其餘特性:
數據庫直接鏈接(至關於數據庫的一個client):-d
與burpsuite、google結合使用,支持正則表達式限定測試目標
注入檢測包含Get、post、cookie、referer、user-agent等部份內容
限速:最大併發、延遲發送
支持Basic、Digest、NTLM、CA身份認證
探測數據庫版本、探測用戶、提權、hash枚舉、字典爆破、暴力破解表列名
文件上傳下載、用戶定義函數(UDF)、啓動並執行存儲過程、操做系統命令執行、訪問windows註冊表
與問w3af、metasploit集成結合使用,基於數據庫服務進程提權和上傳執行後門
參數說明:
--batch 全局使用默認選項,不與人進行交互,適合全自動工做
target類:
-d 數據庫直接鏈接(至關於數據庫的一個client),舉例:sqlmap -d "mysql://user:password@127.0.0.1:3306/t1" --users
-u 後跟待檢測url,待檢測url最好用""括起來(適用於表單內容用GET提交時)
--force-sl 若是是https則需加該參數
-p 指定檢查哪一個變量
掃描舉例:sqlmap -u "http://192.168.209.133/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details" -p username
-r 加載http請求信息(當表單內容用POST提交時需將該數據包截獲下來存成文本文件,再用-r參數去讀取)
-l 加載http請求信息(當表單內容用POST提交時用Burp保存的log做爲http請求信息),參數後跟log文件路徑 ===>利用這個特色能夠瀏覽器掛burp代理,將想要注入測試的網頁都點一遍,而後將日誌丟給sqlmap讓它去將剛纔鼠標點到的網頁都掃一遍
-f 獲取目標數據庫指紋信息
-m 後跟待檢測url組成的文件
-g 後跟google搜索語句,舉例:sqlmap -g "inurl:\".php?id=1\""
-c 加載配置文件
request類(建議每一個參數的數據都用""括起來,e.g:--method='GET'):
--method 強制使用某種請求方法,e.g:--method=GET
--data 使用POST方法請求並構造http包內數據,e.g: --data="我是POST的數據部分"
--param-del web程序默認狀況下分隔不一樣變量用的是'&',假如遇到一些奇葩web程序用其餘符號來做爲分隔符就須要用這個參數告訴sqlmap哪一個是變量分隔符,e.g:
sqlmap -u "http://1.1.1.1/muti-translate.gif?hid=abc:(這裏的分隔符通常都是&)action=bcd" --param-del=":"
--cookie 攜帶cookie掃描(比較牛逼的是攜帶cookie掃描時若是cookie有更新不需手工指定,sqlmap會自動將cookie更換爲新的cookie)
--drop-set-cookie 關閉cookie自動更新功能
--user-agent 用來指定掃描時候攜帶的user-agent,若是沒有指定則使用默認(sqlmap/1.0-dev-xxx(http://sqlmap.org))
--random-agent 使用一個隨機的user-agent(不是隨機字符串,是從user-agent字典(/usr/share/sqlmap/txt/user-agents.txt)中隨機抽取一個)
--host 用來指定掃描時攜帶的host
--referrer 用來指定掃描時攜帶的referrer
--headers 構建多個特殊的http頭部變量,e.g:Accept-Language: fr\nETag: 123 ===>注意:每一個頭部變量以\n分隔
--auth-type 選擇web認證類型,支持Basic, Digest, NTLM or PKI
--auth-cred 構造用戶名密碼,e.g:--auth-cred=user:password
--proxy 指定掃描時使用的代理,e.g:--proxy="http://127.0.0.1:8080"
--proxy-cred 指定代理服務器的用戶名密碼,e.g:--proxy-cred="user:password"
--ignore-proxy 忽略系統級代理,一般用於掃描本地網絡目標
--delay 每次http(s)請求之間延遲時間,浮點數,單位爲秒,默認無延遲,e.g:--delay=5.3
--timeout 請求超時時間,浮點數,默認爲30秒
--retries http(s)鏈接超時重試次數,默認3次
--randomize 每次提交http請求時都將指定變量變爲一個隨機值(此隨機值與原來的值格式類型相同),e.g: sqlmap -u "http://1.1.1.1/a.php?user=admin&id=1" -p user --randomize=id(注入測試user的同時每次id的值也不同)
--safe-freq 指定發送多少次探測請求包後發送一次正常包(發送大量失敗請求可能會觸發目標的主動防護機制),e.g:--safe-freq=10
--skip-urlencode 不對url進行編碼(默認GET方法會對傳輸內容進行編碼,某些WEB服務器不遵照RFC標準編碼,使用原始字符提交數據)
--eval 每次請求前執行指定的python代碼對url中的變量進行計算(即url中存在某種依賴時(因果、時間等)能夠寫一段python來計算這個依賴),e.g: sqlmap -u "http://1.1.1.1/a.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()" ===>每次請求前經過該python語句對id進行hash後賦值給url中的hash
Injection類:
-p 指定要注入哪一個變量,只用-p參數後--level失效(--level不一樣等級注入測試的變量範圍不一樣,這裏用了-p後則只注入手工指定的這一個變量),e.g: -p "id,user,passwd"
--skip 排除指定的掃描參數,e.g: --level=5 --skip="user-agent,id" ===>掃描level5這個範圍內的變量,除去user-agent,id
--dbms 指定目標是哪一種數據庫(若是不指定默認會先掃描目標是哪一種數據庫,指定後能夠提升掃描效率),e.g: --dbms=MySQL
--dbms-cred 若是知道目標數據庫用戶名密碼能夠用這個參數攜帶用戶名密碼去查詢,這樣查詢的結果更全面(起初以爲都知道用戶名密碼了還用sqlmap幹嗎,仔細一想:對方數據庫可能只容許目標web服務器鏈接,因此這個參數就有必要了)
--os 指定目標底層是哪一種操做系統(不一樣操做系統可能會用到不一樣的探測語句),e.g: --os=linux
--tamper 指定某個混淆腳原本混淆payload,以躲過WAF、IPS的查殺,e.g: --tamper="space2plus.py,uppercase.py" ===>混淆腳本路徑:/usr/share/sqlmap/tamper/
Detection類:
--level 檢查的深度(一共5個等級,1級最低) (當level>=2時纔會嘗試注入cookie的變量,level>=3時纔會嘗試注入user-agent的變量)
--risk 檢查時形成的破壞程度(一共3個等級,1級最低)
Enumeration類(找到注入點後要榨取數據庫內的哪些信息):
--current-user 查詢如今這個web程序是用哪一個帳戶登陸的數據庫
--current-db 查詢如今這個web程序所用的是數據庫系統中的哪一個數據庫
--banner 獲取目標數據庫banner信息
--user 查詢目標數據庫系統的的數據庫帳號有哪些
--dbs 查詢目標數據庫系統擁有哪些數據庫
--schema 查詢目標數據庫系統的infomation_schema信息
--privileges 查詢目標數據庫系統內全部帳戶對應的權限
-D 選中某一個數據庫(只顯示指定的數據庫)
-T 選中某一個表
-C 選中某一個列
--columns 查詢指定數據庫中指定表中有哪些列,e.g: -D dvwa -T users --columns
--count 對選中的內容進行數量統計
--dump 查詢指定對象中的具體數據,e.g: 數據庫中指定表的具體內容,-D dvwa -T users --dump
--start 只查詢表中的一部分數據,後跟起始行數
--stop 只查詢表中的一部分數據,後跟末尾行數
--exclude-sysdbs 不讓系統庫顯示(減小干擾)
--sql-query 後跟自定義的SQL語句,e.g: --sql-query="select * from users" ===> 經測試僅能夠跟select語句,跟create語句不生效
Brute force類(當數據庫系統沒有information_schema庫或者當前帳號無權讀取information_schema庫時,數據庫的表名、列名就須要暴力破解了):
--common-tables 暴力破解當前數據庫所包含的表名稱
--common-columns 暴力破解指定表的列,e.g: -T users --common-columns
File system access類(訪問有SQL注入目標的操做系統文件)
--file-read 下載有SQL注入漏洞的操做系統文件,e.g: --file-read="/etc/passwd"
--file-write 向有SQL注入漏洞的操做系統上傳文件
--file-dest 規定上傳路徑,e.g: --file-write="a.txt" --file-dest="/tmp/a.txt"
Operating system access類(對目標操做系統進行操做):
--os-cmd 執行系統命令,e.g: --os-cmd="pwd"
--os-shell 返回一個shell
--sql-shell 返回一個sql的shell
General類:
--scope 利用正則表達式刪選待掃描的目標url,e.g: sqlmap -l burp.log --socpe="正則表達式" ===>這樣sqlmap就只會掃描burp.log文件中匹配到正則的url了
-s 修改掃描會話文件保存路徑(每掃描過一個目標都會在本地生成一個文件來保存結果,下次掃描該目標時就直接讀取這個結果,而不會從新掃描,若是想要從新掃描則需刪除這個文件)
-t 修改記錄流量文件保存位置
--charset 強制字符編碼
--crawl 從起始位置爬網的深度,e.g: --crawl=3
--fresh-queries 忽略存在本地的session信息,對已掃描過的目標從新發起掃描(若是不加這個參數去掃描曾經掃描過的對象,實際上是讀取的本地儲存的上次掃描結果)
--flush-session 清空本地儲存的session後再掃描
--force-ssl 使用https訪問
--check-waf 檢測WAF/IPS
--identify-waf 完全的WAF/IPS檢測
--hpp 經過"HTTP parameter pollution"漏洞繞過WAF/IPS,尤爲對windows平臺有效
Optimization類(優化):
--predict-output 根據不一樣的檢測方法,對比返回值和字典裏的內容,不斷縮小檢測範圍(匹配到其中一個後同類型中其餘的就再也不檢測了。默認是全部種類都會跑一遍),提升效率。與--threads參數不兼容
--keep-alive 使用http長鏈接(有些WAF可能會對頻繁的三次握手進行攔截,此時就可以使用長鏈接)。與--proxy參數不兼容
--null-connection 只獲取相應頁面的大小值,而非頁面具體內容。一般用於盲注判斷 真/假 ,下降網絡帶寬消耗。與--text-only參數不兼容
-o 同時開啓前三個性能參數(除--threads參數)
--threads 最大併發線程,默認值爲1,建議不超過10。與--predict-output參數不兼容
Miscellaneous(雜項):
--mobile 模擬手機發起請求
--wizard 進行嚮導模式