Sqlmap 學習筆記1:sqlmap參數


SQLMP參數分析

1 目錄

    1、Target Options

    2、Requests Options 

    3、Injection Options

    4、Detection Options

    5、Techniques Options

    6、Fingerprint options

    7、Enumeration options

    8、Brute force options

    9、User-defined function options

    10、File system options

    11、Takeover options

    12、General options

2 學習前提

  1、眾所周知,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

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

           2、使用的是Access數據庫

           3、當前用戶權限不夠

  --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)文件加載會話。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM