網絡安全-sqlmap學習筆記

目錄

介紹

命令參數

指定目標

直連數據庫

服務型數據庫(前提知道數據庫用戶名和密碼)

文件型數據庫(前提知道數據庫絕對路徑)

URL探測

文件讀取目標

Google dork注入

Http參數

設置請求方法

POST提交參數

設置參數分隔符

設置Cookie

設置User-Agent

Host

Referer

額外的HTTP頭部

協議認證

設置代理

Tor匿名網絡

設置延遲

 設置超時

設置重試次數

設置隨機化參數

設置日誌過濾目標

設置忽略

設置HTTP私鑰

設置安全模式

設置忽略URL編碼

繞過反CSRF保護

強制使用SSL / HTTPS

性能優化

設置持久HTTP連接

設置不接收HTTP的body

設置多線程

設置預測輸出

 


介紹

檢測和利用SQL注入的工具。

官網:sqlmap官網

用戶手冊:sqlmapWiki

本文參考用戶手冊,有刪減,算是低創,但並非完全翻譯,有包含自己的抓包等內容。

命令參數

參數解釋
選項 含義 描述
-h,--help

 
幫助 顯示基本幫助消息並退出
-hh 高級幫助 顯示高級幫助消息並退出
--version 版本 顯示程序的版本號並退出
-u,-url=URL URL 目標URL(例如“ http://www.site.com/vuln.php?id=1”)
-d DIRECT 連接字符串,用於數據庫直接連接
-l LOGFILE 從Burp或WebScarab代理日誌文件中解析目標
-m BULKFILE 掃描文本文件中給定的多個目標
 -r       REQUESTFILE 從文件加載HTTP請求
 -g GOOGLEDORK 將Google dork結果處理爲目標URL
-c CONFIGFILE 從配置INI文件中加載選項
-A AGENT HTTP User-Agent標頭值
-H HEADER 額外的頭部(例如“ X-Forwarded-For:127.0.0.1”)
--method=METHOD METHOD 強制使用給定的HTTP方法(例如,PUT)
--data=DATA DATA 要通過POST發送的數據字符串(例如“ id = 1”)
--param-del=PARAM PARAM 用於分割參數值的字符(例如,&,;)
--cookie=COOKIE COOKIE HTTP Cookie標頭值(例如“ PHPSESSID = a8d127e ..”)
--random-agent User-Agent 使用隨機選擇的HTTP User-Agent標頭值
--auth-type=AUTH AUTH HTTP身份驗證類型(Basic, Digest, NTLM 或者 PKI)
--auth-cred=AUTH --auth-cred=AUTH HTTP身份驗證憑據(用戶名:密碼)
--proxy=PROXY PROXY 使用代理連接到目標URL
--tor Tor 使用Tor匿名網絡
--delay=DELAY DELAY 每個HTTP請求之間的延遲秒數
--timeout=TIMEOUT TIMEOUT 超時連接之前等待的秒數(默認爲30)
--randomize=RPARAM RPARAM 隨機更改給定參數的值
--check-tor Check Tor 檢查Tor是否正確使用
-p TESTPARAMETER 可測試的參數
--dbms=DBMS DBMS 強制將後端DBMS設置爲提供的值
--level=LEVEL LEVEL 要執行的測試級別(1-5,默認爲1)
--risk=RISK RISK 執行測試的風險(1-3,默認值爲1)
--technique=TECH TECHNIQUE 要使用的SQL注入技術(默認爲“BEUSTQ”)
-a, --all     ALL 檢索所有內容
-b, --banner        BANNER 檢索DBMS標語
--current-user current-user 檢索DBMS當前數據庫
--passwords passwords 枚舉DBMS用戶密碼哈希值
--tables tables 枚舉DBMS數據庫表
--columns columns 枚舉DBMS數據庫表列
 --schema schema 枚舉DBMS模式
--dump dump 轉儲DBMS數據庫表條目
 --dump-all  dumpall 轉儲所有DBMS數據庫表條目
-D DB DATABASE DBMS數據庫枚舉
 -T TBL TABLE 要枚舉的DBMS數據庫表
 -C COL COLUMN 要枚舉的DBMS數據庫表列
 --os-shell   提示輸入交互式操作系統外殼
--os-pwn   提示輸入OOB shell,Meterpreter或VNC
--batch   從不要求用戶輸入,使用默認行爲
--flush-session SESSION 刷新當前目標的會話文件
--sqlmap-shell   提示輸入交互式sqlmap shell
--wizard wizard 面向初學者的簡單向導界面

指定目標

直連數據庫

選項:-d

服務型數據庫(前提知道數據庫用戶名和密碼)

格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:

python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner
直連結果

可能出現的問題:

缺少包

提示是缺少包的問題,通過提示,使用以下命令可安裝所需包(根據自身python版本及平臺修改命令)

  git clone https://github.com/petehunt/PyMySQL/
  cd PyMySQL/
  python ./setup.py install
  pip3 install sqlalchemy
安裝PyMySQL成功
安裝sqlalchemy成功

文件型數據庫(前提知道數據庫絕對路徑)

格式:

DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)

URL探測

選項:-u或者--url

http協議及https協議都可以,指定端口時使用ip:port在url中添加即可。

  python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"

文件讀取目標

  1. -l     從Burpsuite proxy或WebScarab proxy中讀取Http請求日誌文件。
  2. -x    從sitemap.xml站點地圖文件中讀取目標探測。
  3. -m   從多行文本格式文件讀取多個目標,對多個目標進行探測。
  4. -r     從文本文件中讀取Http請求作爲Sql注入探測的目標。
  5. -c    從配置文件sqlmap.conf中讀取目標探測。

-l 博主僅安裝了Burpsuite,展示下Burpsuite如何操作。

Burpsuite日誌文件設置

 

部分日誌

示例

python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log
根據日誌批量檢測

按y進行探測並繼續。

-x 這個很多站點都沒有了,有的也基本沒有GET、POST,就不做展示了。

-m 多個目標就是指多個url,你可以把自己想要探測的多個url寫到txt文本中

python sqlmap.py -m urls.txt

-r 把抓到的http包複製到txt文件中,進行探測

示例

httpbin抓包
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt
get

這裏提示沒有參數,你可以嘗試其他的,或者靶場中的。

-c 配置文件探測

sqlmap.conf

從配置文件中我們可以看到一些參數,填寫參數即可。

Google dork注入

選項:-g

就是一些google高級搜索作爲url, 常見的高級搜索有infile,inurl,intitle,filetype等。

  python sqlmap.py -g "inurl:\".php?id=1\""
翻牆到goole

不怎麼樣,翻了牆也半天沒反應,瞭解下好了。

Http參數

有關Http協議的內容,可以參考網絡-http協議學習筆記(消息結構、請求方法、狀態碼等)

設置請求方法

sqlmap一般會調用合適的請求方法,但是,PUT等請求方法sqlmap不會自動調用,需要手動配置。

選項:--method=PUT

POST提交參數

sqlmap默認的是使用GET方法,可以使用--data參數來進行數據提交,key=value形式,使用&連接。

選項:--data=DATA

python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"

設置參數分隔符

默認的分割符爲&,可以進行設置,個人認爲就用默認的就好了

選項:--param-del=PARAM

python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"

設置Cookie

以下兩種情況可能會使用:

  • 測試頁面需要登錄,登錄狀態用cookie識別
  • 想要檢測是否存在Cookie注入

--cookie=COOKIE。同時,--leverl=2或者2以上

設置User-Agent

選項:–user-agent,-A,–random-agent

Sqlmap發送的HTTP請求中的User-Agent默認值爲:

  sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"
sqlmap

很明顯,sqlmap默認的User-Agent中含有sqlmap,而一般的網頁瀏覽是瀏覽器,比如下圖使用火狐瀏覽器進行訪問,因此,探測目標可能根據User-Agent對sqlmap進行攔截等處理,有必要進行User-Agent的僞造。

火狐

 使用-A參數進行修改,如下所示。

-A

再次抓包後發現User-Agent已修改。

當然,沒必要每次用瀏覽器抓包,你可以保存下來,或者使用–random-agent參數,用sqlmap中自帶的一些。

user-agents

當“–level”參數設置爲3或更高時,Sqlmap會檢測User-Agent是否存在注入漏洞。

Host

選項:–host

使用該參數可以手動指定HTTP頭中的Host值。

當“–level”參數設置爲5或更高時,Sqlmap會檢測Host是否存在注入漏洞。

Referer

選項:–referer

使用該參數可以指定HTTP頭中的Referer值。

當“–level”設置爲3或更高時,Sqlmap會檢測Referer是否存在注入漏洞

額外的HTTP頭部

選項:-H,--header,--headers

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner
添加blog頭部

當然,對於已有的頭部字段,也可以修改。

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner
修改User-Agent頭部

協議認證

選項:–auth-type和–auth-cred

“–auth-type”用於指定認證方式,支持四種身份認證方式:Basic、Digest、NTLM、PKI

一般就是Basic,輸入登錄的用戶名和密碼,類似於Postman中的Basic Auth。

設置代理

選項:–proxy、–proxy-cred、–proxy-file和–ignore-proxy

使用參數“–proxy”來設置一個HTTP(S)代理,格式是“http(s)://ip:port”。

如果代理需要認證,使用參數“–proxy-cred”來提供認證憑證,格式是“username:password”。

使用參數“–proxy-file”來指定一個存儲着多條代理的文件。

使用參數“–ignore-proxy”忽略本地代理設置。

一些代理
代理使用失敗

 事實證明,不花錢就想得到免費ip代理,,,是在想peach。。。

Tor匿名網絡

選項:–tor、–tor-type、–tor-port和–check-tor

設置延遲

前端時間看見一位b站up主,吐槽自己的親戚好友,讓他使用刷*等軟件刷視頻賺錢,然後他寫了一個腳本,跳過廣告,自動滾屏,然後一天弄了幾十塊,還沒提現,就被後臺封號了。

爲什麼提到這個呢,因爲一些後臺會看你的訪問頻率,檢測DDOS攻擊或其他危險行爲,所以這裏我們設置延遲,讓兩個數據包之間有延遲,模擬人工瀏覽器訪問。

–-delay

python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner

 設置超時

選項:-–timeout

超時時間默認是30秒,可以用參數“–timeout”指定超時時間。

設置重試次數

選項:-–retries

超時後Sqlmap會進行重試,重試次數默認爲3,可以用參數“–retries”指定最大重試次數。

設置隨機化參數

選項:-–randomize

使用該參數,Sqlmap會隨機生成每次HTTP請求中參數的值,可以進行簡單的fuzz,類似於Peach,內部原理是變異還是什麼目前還不清楚。

前面是xxx,後面是123

前面是a=xxx,sqlmap有隨機的賦值a其他的值,a=123時,也會隨機更改爲4184等值。

設置日誌過濾目標

選項:-–scope,配合-l參數

指定一個Python正則表達式對代理日誌進行過濾,只測試符合正則表達式的目標,如:

python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

設置忽略

選項:--ignore-code

如果測試的站點偶爾返回導致常規sqlmap運行出現問題的HTTP錯誤代碼(例如,401(未授權)),想忽略該站點並繼續進行測試,可以使用 --ignore-code

設置HTTP私鑰

選項:--auth-file

文件格式爲包含證書和私鑰的PEM格式

設置安全模式

選項:--safe-url--safe-post--safe-req--safe-freq

避免過多的請求失敗後會話被破壞,對錶明safe的不進行任何類型的注入

  • --safe-url:測試期間經常訪問的URL地址。
  • --safe-post:HTTP POST數據發送到給定的安全URL地址。
  • --safe-req:從文件加載並使用安全的HTTP請求。
  • --safe-freq:測試兩次訪問給定安全位置之間的請求。

設置忽略URL編碼

選項:–skip-urlencode

使用該參數可以關閉URL編碼,服務器端不支持RFC標準時使用。

繞過反CSRF保護

選項:--csrf-token--csrf-url

許多站點都以令牌,每個頁面響應期間隨機設置的隱藏字段值的形式結合了反CSRF保護。SqlMap的會自動嘗試識別並繞過這種保護,但也有選項--csrf-token,並--csrf-url可以用來進一步微調它。選項--csrf-token可用於設置包含隨機標記的隱藏值的名稱。在網站爲此類字段使用非標準名稱的情況下,這很有用。選項--csrf-url可用於從任意URL地址檢索令牌值。如果易受攻擊的目標URL最初不包含必要的令牌值,但需要從其他位置提取該令牌值,則此功能很有用。

強制使用SSL / HTTPS

選項: --force-ssl

如果用戶想要向目標強制使用SSL / HTTPS請求,則可以使用此選項。在使用選項--crawl收集URL或爲-l選項提供Burp日誌的情況下,這個選項很有用。

性能優化

設置持久HTTP連接

選項:-–keep-alive

該參數讓Sqlmap使用HTTP長連接,頭部的Connection字段會變爲keep-alive。該選項與“–proxy”不兼容。

設置不接收HTTP的body

選項:-–null-connection

有特殊的HTTP請求類型,可用於獲取HTTP響應的大小而無需獲取HTTP正文。這種知識可以在盲目注射技術被用來區分TrueFalse響應。提供此選項後,sqlmap將嘗試測試和利用兩種不同的NULL連接技術:RangeHEAD。如果目標Web服務器支持其中任何一種,則可以明顯節省已使用的帶寬,從而提高速度

設置多線程

選項:-–threads

使用該選項指定Sqlmap可以達到的最大併發數。默認爲3個,可修改,最大爲10。

設置預測輸出

選項: --predict-output

此選項在推理算法中用於對要檢索的值的字符進行順序統計預測。此開關與--threads選項不兼容。

 

未完待續...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章