Sqlmap 學習筆記1:sqlmap參數

SQLMP參數分析php

1 目錄python

    一、Target Optionsmysql

    二、Requests Options sql

    三、Injection Optionsshell

    四、Detection Options數據庫

    五、Techniques Options後端

    六、Fingerprint options服務器

    七、Enumeration options
cookie

    八、Brute force options網絡

    九、User-defined function options

    十、File system options

    十一、Takeover options

    十二、General options

2 學習前提

  一、衆所周知,sqlmap是一款sql注入工具,其強大功能再也不贅述,再次抱着學習的態度,在源碼的角度再次學習sqlmap。

    首先須要瞭解sqlmap工做體系:

2 SQLMAP參數

  2.1:Target options

  -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:

    從配置文件中加載選項

  2.2:Requests options

  --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

    設置最大的併發線程數

  2.3:Injection options

  -p

    須要測試的參數,加入有2個參數,而只須要檢測其中一個參數時,可使用此參數指定。

    

  --skip

    跳過給定參數的測試。與-p參數意義相反。假若有多個參數,但其中有一個參數不用測試時使用該參數。

  --dbms

    選中某個數據庫,在已知數據庫的狀況下,這樣作極大的減小測試時間。

    假如已知數據庫mysql,則構造:sqlmap -u "URL" --dbms mysql

  --dbms-cred

    設置數據庫的登陸憑證。用於某些須要登陸數據庫的場景。

  --os

    指定數據庫服務器的操做系統,因爲默認狀況下,sqlmap會探測服務器操做系統,此參數能夠減免此過程。

  --invaild-bignum

    當須要指定一個報錯的數值時,可使用此參數,將數值設置很大,存而報錯。

  --prefix

    對將要進行測試額payload添加前綴

    

  --suffix

    對payload添加指定後綴

  --tamper

    使用指定腳原本修改注入的數據,一般用於繞過WAF

  2.4:Detection options

  --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

    經過標題內容來比較

  2.5:Techniques options

  --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地址來肯定是否具備註入。

  2.6:Fingerprint options 

   -f  --fingerprint

    使用一個最普遍的DBMS版本指紋

  2.7:Enumeration options

   -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語句

  2.8:Brute force options

  --common-tables

    暴力破解表名。一、mysql數據庫版本小於5.0

           二、使用的是Access數據庫

           三、當前用戶權限不夠

  --common-columns

    暴力破解列名

  2.9:User-defined function options

  --udf-inject

    使用用戶自定義函數注入

    注:UDF注入須要堆棧查詢sql注入纔可

  --shared-lib

    本地共享路徑庫

  2.10:File system options

  --file-read

    讀取一個文件從後端數據庫文件系統

  --file-write

    將數據寫入數據庫服務器文件中

  --file-dest

    要寫入數據的數據庫服務器文件絕對路徑

  2.11:Takeover options

  --os-cmd

    執行系統命令。此參數執行需知網站根目錄,爲root權限,而且有sys_exec(),sys_eval()函數。因而此參數看似強大,其實雞肋

    

    

    

  --os-shell

    返回一個交互式的shell,同--os-cmd

  注:暫時就這些,大多使用的參數都有。其他的參數後續再補。

  2.12:General options

  -s:

    從存儲的(.sqlite)文件加載會話。

相關文章
相關標籤/搜索