一款開源的命令行自動SQL注入工具,它能夠對多種主流數據庫進行掃描支持,基於Python環境。
檢測動態頁面中get/post參數,cookie,http頭
數據榨取/文件系統訪問
操作系統命令執行
引擎強大,特性豐富
xss檢測
支持主流的數據庫
五種漏洞檢測技術:
基於布爾的盲注檢測
基於時間的盲注檢測( 'and (select(sleep(20)))a)-- )
基於錯誤的檢測
基於union聯合查詢的檢測(適用於通過循環直接輸出聯合查詢結果,否則只顯示第一項結果)
基於堆疊查詢的檢測(;堆疊多個語句,適用於非select的數據修改,刪除的操作)
其他特性:
數據庫直接連接 -d(不通過sql注入,制定身份認證信息,ip,端口)
與burp,google結合使用,支持政策表達式限定測試目標
get,post,cookie,refere,user-agent(隨機或指定)
支持basic,digest,ntml,ca身份認證
數據庫版本,用戶,權限,hash枚舉和字典破解,暴力破解表列名稱
文件上傳下載,udf,啟動並執行存儲過程,操作系統命令執行,訪問windows注冊表
與metasploit集成結合使用,基於數據服務進程提權和上傳執行后門
Target:
-d:直接連接數據庫服務器,作為數據庫客戶端使用
-u:后面跟URL地址,最好用雙引號括起來,一定要存在變量名稱
-l:logfile,將Burpsuite或WEbScarab代理記錄的log日志文件提交上來
-x:sitemapurl,將站點地圖sitemap文件提交上來
-m:將有多個URL的文件提交上來進行掃描
-r:提交HTTP request信息的文件
-g:用Google去搜索
-c:提交配置文件
實例:
-p參數只對指定的參數進行注入,在上述命令中指定了對username參數進行注入
-f參數查看指紋信息
GET方法
sqlmap -u "http://192.168.1.12/mutillidae/index.php?page=user-info.php&username=1&password=2&user-info-php-submit-button=View+Account+Details" -p username -f
查詢的結果會保存在log文件中,位於一個root下的隱藏目錄.sqlmap,可以進入查看相應的信息
--users:查看當前數據庫所有用戶
將注入命令的-f參數改為--users參數,確定過有注入點所以后面的執行速度會很快
--banner:查看數據庫版本信息
--dbs:查看目標數據庫系統的所有庫
--schema:查看元數據庫,查看到的信息會很多
-a:所有數據都查找
-m:將有多個URL的文件提交上來進行掃描
-g參數,掃描Google搜索結果
POST方法:
簡單判斷POST方法的方法,輸入的參數內容提交后沒有出現在URL中,而GET方法中會出現。
使用http request文件,可通過Burpsuite抓取
使用Burpsuite的log文件
在Options>Misc>Logging
sqlmap -r reuqset.txt
sqlmap -l xx-log
--force-ssl:掃描HTTPS網站時需要添加參數
-c:掃描配置文件
Request:
--data數據段:將URL中的參數部分放到后面
GET/POST都適用,在GET方法中將URL后面的參數部分提取出來就好,在POST方法中需要自己用Burpsuite查看URL和參數的值即可,當然也可以在瀏覽器中F12打開開發者工具來查看
--param-del:變量分隔符,默認情況下參數變量的分隔符為&,若為其他符號時要使用變量分隔符。
--cookie:Cookie頭,因為DVWA進入之前需要登錄,即要有cookie,所以在對DVWA進行sqlmap查詢時需要用到cookie參數。同樣,cookie值用Burpsuite可以很方便地查看。
sqlmap會自動檢查cookie中的注入點,level至少為2,通過--level 2來執行
Sqlmap會自動檢查Set-cookie並更新,若想保留之前使用是用--drop-set-cookie
--user-agent:隨機user-agent
Sqlmap檢查user-agent的注入點,level>=3
--host:修改Host頭主機內容(Level=5時sqlmap自動掃描)
--referer:Level>=3時sqlmap自動掃描
--headers:自定義的HTTP頭,每行一個頭,大小寫區分:
--method=GET/POST:指定使用GET方法或者POST方法
基於HTTP協議的身份驗證:
Basic:基本身份驗證
Digest:摘要身份驗證
NTLM:Windows可能用的身份驗證
--delay:每次http(s)請求之間延遲時間,浮點數,單位為秒,默認為無延遲
--timeout:請求超時時間,浮點數,默認為30s
--retries:http(s)連接超時重試次數,默認3次
delay、timeout和retries等參數的設置可有利於避免被發現
--randomize:長度、類型與原始值保持一致的前提下,指定每次請求隨機取值的參數名
--safe-url和--safe-freq:因為檢測和盲注階段會產生大量失敗請求,服務器可能會銷毀session。因此可以使用上述兩個參數來解決,每發送--safe-freq次注入請求后,發送一次正常請求,即發送幾個失敗請求后就發送一次正常信息,繞過服務器的檢測機制
--safe-url和--safe-freq:因為檢測和盲注階段會產生大量失敗請求,服務器可能會銷毀session。因此可以使用上述兩個參數來解決,每發送--safe-freq次注入請求后,發送一次正常請求,即發送幾個失敗請求后就發送一次正常信息,繞過服務器的檢測機制
Optimization優化性能:
--predict-output:與--threads參數不兼容,根據檢測方法,將返回值跟統計表中的內容進行比較,縮小檢測范圍,提高效率,統計表在/usr/share/sqlmap/txt/common-outputs.txt,其中有版本名、用戶名、密碼、權限、角色、數據庫名、表名、列名等等
--keep-alive:使用http(s)長連接,避免重復建立連接的網絡開銷,但大量長連接會嚴重占用服務器資源,與--proxy參數不兼容
--null-connection:常用於盲注判斷,只獲取相應頁面的大小值,而不是頁面的具體內容,降低了網絡帶寬消耗,與--text-only參數不兼容(也常用於盲注,基於頁面內容的比較判斷真假)
-o:同時使用--predict-output、--keep-alive和--null-connection三個參數
--threads:最大並發線程,默認值為1,建議不要超過10,否則會影響站點可用性,與--predict-output參數不兼容,盲注時每個線程獲取一個字符(7次請求),獲取完成后線程結束
Injection:
-p:指定掃描的參數,其他的參數的注入不會進行,使--level失效
--skip:排除指定的掃描參數
--level=5 --skip=”id,user-agent”
URI注入點:
sqlmap -u “http://1.1.1.1/param1/value1*/param2/value2/”
--dbms:指定數據庫,可以加版本號,提高注入的效率,數據庫名如MySQL<5.0>、Oracle<11i>、Microsoft SQL Server<2005>、PostgreSQL等
--os:指定目標操作系統,提高效率,如Linux、Windows
--invalid-bignum / --invalid-logical:默認情況下,sqlmap使用賦值使參數值失效,Bignum使用大數使參數值失效,Logical使用布爾判斷使參數值失效
--no-cast:默認情況下,sqlmap榨取數據時會將所有結果轉換為字符串,並用空格替換NULL結果,老版本mysql數據庫對此提取不到數據,因而需要該參數取消這個默認處理方式
--no-escape:默認情況下,當payload中有單引號括起字符串時,為了避免混淆和出錯,sqlmap使用char()函數編碼來替換字符串,但有些服務器對於編碼數據的處理會出錯,而這時就需要該參數來關閉此功能
--tamper:混淆腳本,用於繞過應用層過濾、IPS、WAF,查看腳本:dpkg -L sqlmap | grep tamper
Detection:
--level:1-5級,默認為1
每個級別發送不同的xml類型的payload:/usr/share/sqlmap/xml/payloads
--risk:1-4級,默認為1、無害
Risk升高可造成數據被篡改等風險
--string / --not-string:指定出現的字段或指定不出現的字段判斷真假
--regexp:正則表達式
--code:指定HTTP返回代碼判斷真假
--text-only:指定頁面的一段內容判斷真假
--titles:指定頁面的標題判斷真假
Techniques:
默認使用全部技術
B:基於布爾的盲注漏洞
E:基於錯誤的檢測
U:基於UNION聯合查詢的檢測
S:基於堆疊查詢的檢測(文件系統、操作系統、注冊表必須)
T:基於時間的盲注漏洞
--time-sec:基於時間的注入檢測相應的延遲時間,默認為5s
--union-cols:默認聯合查詢1-10列,隨--level增加最多支持50列,--union-cols 6-9
--union-char:默認NULL,可以手動指定數值:--union-char 123
--dns-domain:攻擊者控制了一台DNS服務器,使用該參數可提高數據榨取的速度
--second-order:不同的情況:在一個頁面注入的結果,從另一個頁面體現出來(--second-order http://192.168.1.12/b.php)
Fingerprint:
-f、--fingerprint、-b、--banner:查看數據庫管理系統指紋信息、DBMS、操作系統、架構、補丁
Enumeration枚舉:
--current-user:查看當前數據庫管理系統用戶
--current-db:查看當前數據庫
--hostname:查看目標主機名
--users:查看數據庫管理系統所有用戶賬號
--privileges -U username:查看用戶權限,CU為當前用戶
--roles:查看角色
--dbs:查看所有數據庫
--tables:查看表
--exclude-sysdbs:排除系統數據庫的查詢
--count:計算該項的數目
--schema:查看元數據庫
--batch:參數采用默認選項,不進行詢問
--dump-all查看全部
Brute Force:
無權讀取information_schema庫時,需要用到暴力破解來掃描
--common-tables:暴力破解表名
--common-columns:暴力破解列名
OS:
--os-cmd:執行一條命令,前提是當前用戶有權執行
--os-shell:獲取一個shell,前提是當前用戶有權執行
--sql-shell:獲取sql-shell,前提是當前用戶有權執行
友情鏈接 http://www.cnblogs.com/klionsec
http://www.cnblogs.com/l0cm
http://www.cnblogs.com/Anonyaptxxx
http://www.feiyusafe.cn