SQLMP參數分析php
1 目錄python
一、Target Optionsmysql
三、Injection Optionsshell
七、Enumeration options
cookie
九、User-defined function options
十二、General options
2 學習前提
一、衆所周知,sqlmap是一款sql注入工具,其強大功能再也不贅述,再次抱着學習的態度,在源碼的角度再次學習sqlmap。
首先須要瞭解sqlmap工做體系:
2 SQLMAP參數
-d:
其鏈接方式爲:MYSQL:'mysql://root:123456@127.0.0.1:3306/database_name'
ACCESS:'access://database_filepath'
-u:
設置將要檢測sql注入的目標url
-l:
從Burp或WebScarab代理日誌文件中解析目標,顧名思義,就是將一個HTTP請求以文件的方式引入sqlmap存而檢測注入。
首先獲取一個HTTP文件:
而後使用命令:sqlmap -l 路徑
-x:
從遠程站點地圖(.xml)文件中解析目標。此xml格式爲:<loc> url </loc>
定義從xml文檔獲取URL的源碼位於:\lib\parse\sitemap.py 20行
例如:xml文檔內容
sqlmap使用命令:sqlmap -x localhost/test.xml
-m:
掃描文本文件中給定的多個目標
首先給定一個文本文檔:
sqlmap命令:sqlmap -m 路徑
-r:
從文件中加載HTTP請求,至關於對POST請求進行sql注入檢測。
首先獲取一個POST包:
而後使用命令:sqlmap -r 路徑
-g:
對谷歌的搜索結果進行SQL注入測試,很是強大的功能。
例如:sqlmap -g "inurl:\".php?id=1\""
-c:
從配置文件中加載選項
--method:
強制使用給定的HTTP方法(例如PUT),顧名思義,就是進行sql檢測時使用的HTTP方法。
--data:
要經過POST發送的數據字符串,檢測POST注入可使用此種方法,與 -r 不一樣的是 --data 只檢測其後面的參數是否能夠sql注入
--param-del:
用於分割參數值的字符,假若有多個參數是,分隔符能夠爲; , 。等,並不必定必須爲&
--cookie:
使用cookie。當sqlmap只有在level大於等於2的時候纔會檢測cookie是否存在注入。因此,當默認狀況下,設置此參數並不會檢測cookie是否存在注入漏洞。
因此能夠構造命令: sqlmap -u "http://localhost/sqli-labs/Less-20/" --cookie "uname=admin" --level 2
--cookie-del:
相似--param-del參數。用於分割cookie參數,適用於cookie多參數場景
--drop-set-cookie:
從響應中忽略掉 set-cookie 頭,這種場景通常是無cookie的狀況下才可注入。(我的揣測,並未測試)
構造注入命令:sqlmap -u "URL" --drop-set-cookie
--user-agent:
設置user-agent的值,同cookie注入,須要level大於等於3纔可。
--random-agent:
隨機使用HTTP用戶代理頭。
構造SQL注入命令:sqlmap -u "URL" --random-agent -v 5 (加-v參數,能夠看到發出的請求與返回的請求,相似--level)
--host:
設置HTTP頭中的 host 消息內容。
-H --header :
額外的HTTP頭
--referer:
設置HTTP頭中的Referer的值。當level大於等於3時會檢測此值是否存在SQL注入漏洞。
--headers:
同--header
--auth-type:
HTTP身份驗證類型。(不知何用)
--auth-cred:
HTTP受權憑證。猜想用於某些須要登陸的場景。
--auth-file:
某些場景須要證書認證時,猜想使用此參數
--ignore-proxy:
忽略系統默認的代理設置
--ignore-redirects:
忽略重定向的嘗試
--proxy:
使用代理去鏈接URL
--proxy-cred:
鏈接代理須要認證時使用此參數
--proxy-file:
從文件中加載代理列表。此參數很是有用。用於過狗。
--tor:
使用TOR匿名網絡,注意必定要安裝TOR服務,不然會出錯。
--tor-port:
設置TOR匿名網絡的代理端口而非默認端口
--delay:
設置每一個HTTP請求之間的延遲,默認無延遲
--timeout:
超時鏈接前等待的時間,我的認爲還蠻有用,此參數能夠節省一些時間,默認爲30秒。
--retries:
設置鏈接超時後重複鏈接的次數,默認是3次
--randomize:
設置每次HTTP請求隨機改變給定某個參數的值。
--skip-urlencode:
跳過對payload數據的編碼。
--eval:
在進行HTTP請求以前執行一段python代碼
例如:python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
--threads:
設置最大的併發線程數
-p :
須要測試的參數,加入有2個參數,而只須要檢測其中一個參數時,可使用此參數指定。
--skip:
跳過給定參數的測試。與-p參數意義相反。假若有多個參數,但其中有一個參數不用測試時使用該參數。
--dbms:
選中某個數據庫,在已知數據庫的狀況下,這樣作極大的減小測試時間。
假如已知數據庫mysql,則構造:sqlmap -u "URL" --dbms mysql
--dbms-cred:
設置數據庫的登陸憑證。用於某些須要登陸數據庫的場景。
--os:
指定數據庫服務器的操做系統,因爲默認狀況下,sqlmap會探測服務器操做系統,此參數能夠減免此過程。
--invaild-bignum:
當須要指定一個報錯的數值時,可使用此參數,將數值設置很大,存而報錯。
--prefix:
對將要進行測試額payload添加前綴
--suffix:
對payload添加指定後綴
--tamper:
使用指定腳原本修改注入的數據,一般用於繞過WAF
--level:
檢測等級。默認爲1. level 1:只檢測GET. POST數據
level 2:檢測cookie數據
level 3:檢測user-agent,referer的數據
建議檢測等級爲3
--risk:
風險等級, risk 1:測試大部分的語句
risk 2:會增長基於事件的測試語句
risk 3:會增長OR的語句測試
注意,若是風險等級爲3 ,有可能會形成重置全部用戶密碼,update語句可能會更新整個表。因此請鄭重選擇。
--string:
在檢測注入的過程當中,當返回頁面差距不大時,可能會致使誤判,因此出現此參數,當返回頁面與正常頁面區別不大時,能夠手動指定某個字符串,當匹配到此字符串時,表示存在注入。
--not-string:
與--string相反
--regexp:
經過正則來判斷,當經過正則過濾是,則表示存在注入
--code:
經過狀態碼來進行判斷。
--text-only:
僅經過頁面內容來比較
--titles:
經過標題內容來比較
--technique:
sql注入使用哪一種類型。默認爲所有類型
類型共五種:1,布爾型注入 2,聯合查詢注入 3,報錯注入 4,多語句查詢注入(堆疊查詢注入) 5,延時盲注
這5中類型分別對應5個大寫字母:1,B 2,U 3,E 4,S 5,T
--time-sec:
用於在時間盲注的時候,設置延時時間。默認爲5秒
構造命令:
--union-cols:
此參數設置聯合查詢注入時查詢的列數,默認狀況下爲1-10個字段數,level-5時會增長到50個字段數。此參數在字段大於10可是在默認狀況下時出現的問題。
--union-char:
此參數設置聯合查詢時的字符,默認狀況下爲NULL,好比:union select null,null,null,null 修改成 union select 1,1,1,1。
--second-order:
此參數用於在注入時返回不一樣頁面的時候,判斷返回頁面的URL地址來肯定是否具備註入。
-f --fingerprint:
使用一個最普遍的DBMS版本指紋
-a --all:
檢索全部數據,此參數會列出數據庫用戶,主機名,密碼哈希值,是否爲管理員,以及全部庫,全部表,全部字段和全部的數據,若是一個數據庫很是大的話不建議使用,很是消耗時間。
-b --banner:
此參數會列出注入數據庫得版本
--current-user:
檢索當前數據庫的用戶
--current-db:
檢索當前數據庫的數據庫名
--hostname:
檢索當前數據庫服務器的hostname
--is-dba:
檢索當前數據庫用戶是否爲管理員
--users:
列舉出當前數據庫的用戶
root不算用戶
--password:
列舉數據庫用戶的密碼哈希值
--privileges:
列舉出數據庫用戶的權限
--roles:
枚舉數據庫用戶角色(僅適用於數據庫爲Oracle)
--dbs:
枚舉數據庫數據庫名
--tables:
枚舉數據庫中的表
--columns:
枚舉數據庫表中的字段
--schema:
枚舉數據庫的系統架構
--count:
獲取表中數據的個數
--dump-all:
枚舉全部數據庫表條目
--search:
搜索字段名,表名或者數據庫名
共三中模式: 1:--search -D:搜索某個數據庫
2:--search -C:搜索某個字段名
3:--search -T:搜索某個表名
-D:
指定某個數據庫,與枚舉數據參數共同使用。
-T:
指定某個庫中的某個表名
建議同-D參數,以及枚舉數據參數共同使用。
-C:
指定某個庫中表的字段名
-X:
-U:
要枚舉的數據庫用戶
--exclude-sysdbs:
枚舉時排除系統表
例如mysql:會排除掉information_schema這個表。
--sql-query:
要執行的sql語句,產生sql注入時執行什麼sql語句
--sql-shell:
產生一個交互式的shell
--sql-file:
給定一個文件,執行其中的SQL語句
--common-tables:
暴力破解表名。一、mysql數據庫版本小於5.0
二、使用的是Access數據庫
三、當前用戶權限不夠
--common-columns:
暴力破解列名
2.9:User-defined function options
--udf-inject:
使用用戶自定義函數注入
注:UDF注入須要堆棧查詢sql注入纔可
--shared-lib:
本地共享路徑庫
--file-read:
讀取一個文件從後端數據庫文件系統
--file-write:
將數據寫入數據庫服務器文件中
--file-dest:
要寫入數據的數據庫服務器文件絕對路徑
--os-cmd:
執行系統命令。此參數執行需知網站根目錄,爲root權限,而且有sys_exec(),sys_eval()函數。因而此參數看似強大,其實雞肋
--os-shell:
返回一個交互式的shell,同--os-cmd
注:暫時就這些,大多使用的參數都有。其他的參數後續再補。
2.12:General options
-s:
從存儲的(.sqlite)文件加載會話。