sql注入學習筆記(1)--sqlmap參數介紹

前言

最近停更了一段時間,主要是重新學習了一下sqlmap
sqlmap真的是sql注入最好的工具,不管是linux還是window環境,都是最好的
可能sqlmap是終端命令模式,用起來體驗可能沒有上面某些軟件好,但功能很完善,還是好好學習一下吧

sql注入

sql注入是個很老的漏洞,晚上對於這個的文章也很多.如果不瞭解的可以去看看手動注入的原理,不過學之前最好有一種數據庫的使用基礎,這樣可能更好理解
雖然sql注入是個很老的漏洞,可能很多人認爲現在人們不會犯這個錯誤了,但還是有很多地方還是有sql注入點,怎麼尋找就要看你的google使用啦
比如說昨天我從google上看的一個點

comments.php?id=

還是可以找到的
廢話不多說,下面正式開始

sqlmap介紹

sqlmap是kali裏面自動集成的了,如果其他環境需要下載,可以直接去git上尋找項目
sqlmap一般是六種漏洞檢測技術
基於bool,就是我們的and 1=1
基於錯誤
基於union聯合查詢
基於時間

' and (select * from (select(sleep(20)))a)--+

基於堆疊查詢(一般比較少見,這對於環境有要求,有可能程序設計的原因導致堆疊查詢無法正常進行)
基於內聯查詢
同時也支持很多的數據庫管理系統(DBMS)
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite,
Firebird, Sybase , SAP MaxDB,等等
但一般都是結構化數據庫,非結構化數據庫也存在sql注入,但就要利用另一個注入工具了

環境

學習的過程中,建議還是本地裝個靶機,然後通過kali注入metasploitalbe2,
metasploitalbe2
提取碼:u1l8

sqlmap的使用

輸入

sqlmap -h

可以看到幫助
在這裏插入圖片描述輸入

sqlmap -hh

會看到更詳細的內容
在這裏插入圖片描述當然也比較推薦第二種方法
那麼下面我們就從參數開始介紹啦
sqlmap參數是一類一類的,所以我們也按照類來進行介紹

基本的參數

-h         
 -hh                  
--version             版本號
-v VERBOSE            Verbosity level: 0-6 (default 1)
--update              更新

不過這個-v參數後面可以跟數字,就是顯示信息的詳細程度,數字越大顯示的信息越詳細,默認是1

Fingerprint指紋識別

這個下面的參數最少,就從他開始介紹

-f --fingerprint   查詢數據庫的版本指紋

-f和–fingerprint都可以,只不過是簡寫和全寫的區別
這個參數和後面的有個參數有點類似,我們可以比較一下他們的區別

-b, --banner       檢索數據庫管理系統的版本

-f查詢的結果

[INFO] actively fingerprinting MySQL
[08:45:26] [INFO] executing MySQL comment injection fingerprint
back-end DBMS: active fingerprint: MySQL >= 5.0.38 and < 5.1.2
               comment injection fingerprint: MySQL 5.0.51

-b查詢的結果

[INFO] the back-end DBMS is MySQL
[08:47:15] [INFO] fetching banner
back-end DBMS: MySQL 5
[08:47:16] [INFO] fetching banner

可以看出-f的參數得到的結果遠遠比-b要詳細,所以以後查詢指紋可以不用-b了,就用-f即可

Target目標

Get方法提交注入

   -u  --url=   目標url地址,一定是包含注入點的url 
   sqlmap -u "http://192.168.0.11234/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" //加雙引號是爲了更好識別,因爲有的url地址太長裏面可能有\#這些特殊字符,所以引起來也方便一些
   sqlmap --url="http://192.168.0.113134/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
  -l       從Burp或WebScarab代理日誌文件解析目標

這裏更多的是burp爲例,比如說我們之後訪問了很多站點,我們可以通過burp記載log,然後把burp的日誌文件導入sqlmap進而解析日誌裏面出現的站點是否存在sql注入
打開burp,進入projetct-options,選擇misc,找到logging,把proxy的request打勾並選擇保存位置
在這裏插入圖片描述然後我們可以讓瀏覽器開啓代理,然後在proxy裏關閉攔截,這樣我們訪問的記錄就會被保存在日誌裏面,這裏以1.log爲例

sqlmap -l 1.log

然後就可以掃描日誌裏面的所有網頁

--scope=       正則表達式過濾目標, 可以過濾日誌內容,通過正則表達式匹配掃描目標
sqlmap -l 1.log --scope="(www)\.target\.(com|net|org)“
這個就限定了掃描的範圍,就是target.com,target.net,target.org
-m        掃描文本文件中給定的多個目標

在這裏插入圖片描述編輯一個文本文件,保存爲1.txt

sqlmap -m 1.txt

然後sqlmap就會自動識別裏面的url然後並問你是否需要測試這個url
在這裏插入圖片描述

  -g       將谷歌結果處理爲目標url

如果可以科學上網,這個選項是個不錯的選擇,這個是比我們在瀏覽器手動輸入,然後手動判斷再拿來掃描更好的,不過如果不可以科學上網,那就…只能跟我一樣手動爬,跟goole類似的就是bing,我們可以把google的語法直接放在bing裏面搜,這對於不可以科學上網的朋友是個福音

sqlmap -g "inurl:\".php?id=\""

中間加兩個"是爲了轉義,避免和一頭一尾的"閉合,裏面的語句也是比較經典的搜sql注入點的語句

  -d          用於直接數據庫連接的連接字符串

如果我們知道了對方的登錄賬號和密碼,就可以通過-d的參數直接連接,也不需要再額外下個別的數據庫組件了,其實這個就是通過直連的方式查詢數據庫的內容

sqlmap -d "mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME"
sqlmap -d "mysql://USER:@DBMS_IP:DBMS_PORT/DATABASE_NAME" //密碼爲空的時候也要:
sqlmap -d "access://DATABASE_FILEPATH"

這樣查詢更快一些

通過post的方法

-r     從文件加載HTTP請求

這裏還是要結合我們的burp
在這裏插入圖片描述捕獲到http請求之後,全選然後選擇copy to file,保存爲1.txt

sqlmap -r 1.txt

Request請求

這些選項可用於指定如何連接到目標URL
修改request的頭部

 -A  --user-agent    設置User-Agent的值 
 sqlmap -A "aaa"
 sqlmap --user-agent="aaa" 

因爲sqlmap掃描的時候默認頭是sqlmap/版本號,有的瀏覽器可能有攔截機制,所以我們可以修改頭部爲任意一個值,當然一般我們又記不住user-agent,所以我們可以通過

  --random-agent     使用隨機選擇的User-Agent
  sqlmap  --random-agent 
  (/usr/share/sqlmap/data/txt/user-agents.txt下面列有具體的user-agents的信息)

爲什麼要修改頭,因爲有時候sqlmap會報錯

[ERROR] the target URL responded with an unknown HTTP 
status code, try to force the HTTP User-Agent header with option --useragent or --random-agent

這是瀏覽器的安全機制,所以需要我們僞造客戶端請求
當然也可以把我們的sqlmap僞裝成mobile

 --mobile            通過HTTP用戶代理頭模擬智能手機
 sqlmap --mobile

下面這三個不用多說

    --host=       HTTP主機報頭
    --referer=    HTTP引用頭
     --method=    強制使用給定的HTTP方法(如PUT),具體什麼時候使用post我也還不是很清楚,慢慢練
-H   附加頭 這個只能添加一個
--headers=   多個附加頭(比如說 "Accept-Language: fr\nETag: 123")中間需要用\n來進行換行
 --data=DATA         通過POST發送的數據字符串
  --param-del=       用於分割參數值的字符(例如&),有時候可能參數之間使用的有其他的分割符,這個時候就需要我們自己手動指定
sqlmap -u "http://1.1.1.1/a.php" --data="q=foo;id=1" --param-del=";" 

身份認證部分
有時候web應用需要基於cookie的身份認證,那麼就需要提供cookie信息

  --cookie=COOKIE     HTTP Cookie header value 
  sqlmap --cookie=""

有的cookie可能不標準,或者是專門這樣設計,比如說

ID=176d4c35bcasdaasds9ce39b:T=159assaddd2358914

中間是通過:分割的,那麼我們就需要利用cookie-del指定分割cookie的字符

sqlmap --cookie="ID=176d4c35bcasdaasds9ce39b:T=159assaddd2358914“ --cookie-del=":"
  --load-cookies=L.. 包含Netscape / wget格式的cookie的文件(這個應該就是之前那種標準的cookie)
  --drop-set-cookie  忽略響應中的Set-Cookie頭(我也不是很清楚爲什麼要忽略這個)
--auth-type=  HTTP身份驗證類型(Basic(基本)、 Digest(摘要)、NTLM(Windows NT LAN Manager )或PKI(公鑰基礎設施))
--auth-cred=  HTTP身份驗證憑證(name:password)
--auth-file=AUTH..  HTTP認證PEM證書/私鑰文件

就以basic(基於賬號密碼的來說)

sqlmap ....  --auth-type=Basic --auth-cred="root:password"

或者是pem證書的

sqlmap ...  --auth-file="ca.PEM"

*代理 *
比如說

sqlmap ....  --proxy="http://127.0.0.1:8080"  --proxy-cred="user:password"

當然也可以忽略代理

 --ignore-proxy      忽略系統默認代理設置,這個主要是掃描本地網絡目標

當然也可以從文件導入代理鏈

 --proxy-file= 從文件加載代理列表

說到代理不得不提到tor

    --tor              使用Tor匿名網絡
    --tor-port=   設置Tor代理端口以外的默認
    --tor-type=  設置Tor代理類型(HTTP, SOCKS4或SOCKS5(默認))
    --check-tor        檢查Tor是否正確使用  

保護機制
因爲檢測和盲注會產生大量的失敗請求,所以可以通過以下參數避免session被銷燬

--safe-freq= 訪問安全URL之間的定期請求,每發送 --safe-freq次注入請求之後就訪問安全的url地址
--safe-url=  測試期間訪問安全的URL地址,一般是不存在注入的url,避免session被銷燬
--safe-req=  從文件加載安全的HTTP請求,跟之前的-r因爲差不多
 --safe-post=  發送數據到一個安全的URL(只不過是使用post的方法)

這個的具體使用就是這樣

sqlmap ... --safe-freq=4 --safe-url="http://target.com"

忽略

--ignore-code=  忽略(有問題的)HTTP錯誤代碼(例如401)
--ignore-redirects  忽略重定向的嘗試
--ignore-timeouts   忽略連接超時

雜項

 --delay=     每個HTTP請求之間的延遲()
--timeout=  超時連接之前等待的秒數(默認爲30)
--retries=  連接超時重試(默認3)
--force-ssl        強制使用SSL/HTTPS,https站點
--skip-urlencode   跳過有效負載數據的URL編碼 ,因爲默認get方法會對傳輸內容進行編碼,而有的網站不遵守編碼標準,直接就使用原始字符
 --eval=     在請求之前執行提供的Python代碼 (e.g."import hashlib;id2=hashlib.md5(id).hexdigest()")每次請求都會對id編碼
--chunked         使用HTTP分塊傳輸編碼(POST)請求
--hpp               使用HTTP參數污染方法HTTP parameter pollution,繞過WAF/IPS/IDS的有效方法,尤其對ASP/IIS和ASP.NET/IIS
--randomize=   隨機改變給定參數的值,(長度,類型保持一致)

csrf
繞過CSRF檢測,這一塊我不是很瞭解,也就不詳細說了

--csrf-token=  用於保存反csrf令牌的參數
--csrf-url=  提取反csrf令牌訪問的URL地址
--csrf-method=  在反csrf令牌頁面訪問期間使用的HTTP方法(get,post)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章