總算進入了本身喜歡的行業. 要時刻記得當初本身說過的話, 不忘初心. Come on!php
感謝超哥分享的乾貨.. sqlmap乾貨點擊直達html
本次學習使用的是kali集成的sqlmap,包括後續的burp suite 不牽扯安裝.此步略過.python
基本上能夠說 安全從業人員必備的一款神器之軟件.也是邁入安全圈的必要條件.mysql
sqlmap 支持5種漏洞檢測類型:web
已知的有mysql,sql server,oracle,sqlite.............. 基本上所有支持了,若是某些小衆的不支持,放心,咱們通常也接觸不到,目前仍是以mysql爲主流(我的看法,歡迎糾正)sql
這些好像都要版本>= 0.8以後纔可使用, 我本次使用的是1.0shell
-d 若是你知道了對方數據庫帳號,密碼,端口等一些信息,則能夠經過sqlmap直接鏈接 不須要再裝客戶端管理軟件 例 :Navicat數據庫
能夠與burp suite ,google搜索引擎,結合使用. windows
get,post,cookie,referer,user-agent 均可以指定和隨機產生. (cookie過時後自動更新cookie)後端
併發,延遲等修改.(好比設置間隔請求時間(避免被服務器發現),併發大一點,以達到追求速度的效果,)
支持Basic,Digest,NTLM,CA等身份認證(但我的感受仍是web應用層的身份證多一點)
包含密碼破解模塊..
等.....
由於參數太多,我這裏分項學習作筆記
sqlmap --version 查看sqlmap版本信息.
-h 查看功能參數(經常使用的)
-hh 查看全部的參數 (若是有中文包 就最好了)
-v 顯示更詳細的信息 一共7級, 從0-6.默認爲1, 數值越大,信息顯示越詳細.
Target(指定目標):
-d 直接鏈接數據庫偵聽端口,相似於把本身當一個客戶端來鏈接.
-u 指定url掃描,但url必須存在查詢參數. 例: xxx.php?id=1
-l 指定logfile文件進行掃描,能夠結合burp 把訪問的記錄保存成一個log文件, sqlmap能夠直接加載burp保存到log文件進行掃描
-x 以xml的形式提交一個站點地圖給sqlmap(表示不理解..)
-m 若是有多個url地址,能夠把多個url保存成一個文本文件 -m能夠加載文本文件逐個掃描
-r 把http的請求頭,body保存成一個文件 統一提交給sqlmap,sqlmap會讀取內容進行拼接請求體
-g 利用谷歌搜索引擎搭配正則來過濾你想要的
-c 加載配置文件,配置文件能夠指定掃描目標,掃描方式,掃描內容等等.加載了配置文件sqlmap就會根據文件內容進行特定的掃描
掃描目標是我本機對象Mutillidae,
username | password 隨便鍵入值,
獲得url :http://192.168.21.134/mutillidae/index.php?page=user-info.php&username=1&password=1&user-info-php-submit-button=View+Account+Details
咱們知道 在這段url中,有用的信息只有username & password 因此咱們就能夠對這兩個變量進行注入測試
sqlmap :
-u 指定一個帶參數的url地址進行掃描.
-p 只對特定的參數進行掃描(咱們知道,page等是用不到的,在這串url中,只有password和username是有價值的信息,因此咱們只對username進行掃描)
因爲我kali python環境的問題, sqlmap的 字體和常規不一致..(常規綠色,),我也沒有着手解決, 很快,sqlmap就掃描到告終果,疑似發現注入,而且發現了咱們後端使用的是mysql數據庫,問咱們是否跳過數據庫類型的檢測,(總之就是這意思,原理我渣渣的英文讀寫能力...),既然已經知道數據庫了,咱們就不必進行其餘類型的檢測了,常規跳過就好,:..
以後又提示咱們檢測的級別(level)和風險值(risk), 級別,風險越高,對web形成的傷害性也就越高,常規爲默認.(試想下,你幫客戶作滲透,結果滲透沒作好,把人家web給掃描出問題了....,若是黑客出於攻擊行爲來使用的話,確定越高越好..我的理解..) 這裏咱們選擇默認..
接下來sqlmap就會運用以前說的5種掃描方式來對咱們指定的url種的特定參數 ,進行一系列的全自動注入,
遺憾的是經過sqlmap一系列的掃描和我不斷的 嘗試,好像並無注入,可是sqlmap強烈建議咱們提供掃描等級和風險等級...
那咱們就提高下掃描等級和風險等級:
掃了一圈結果仍是沒發現注入(我晚上在好好研究下.)...
sqlmap 支持2種post 掃描. 1, 請求文件. 2,busp suite log文件.
請求文件:
首先須要設置瀏覽器代理.
打開抓包工具,這裏以burp suite爲例
把咱們抓到的數據包 所有複製下來 保存爲一個txt文件
接下來.. sqlmap啓動, sqlmap -r request.txt -f
還有一種方式 就是經過加載burp suite的日誌文件進行掃描注入..
sqlmap -l xxx.txt -f --dbs ...
burp suite的日誌文件生成方式爲:
--data 提交的時候要攜帶的參數. (get,post通用,最簡單的post請求方式).
--users 獲取數據庫用戶
--dbs 獲取因此數據庫
--param-del 變量分隔符,默認爲&,
--cookie 設置cookie頭
--user-agent 指定user-agent(防止對方服務器偵測到)
--random-agent 隨機agent
--host 指定host頭
--level 安全級別 (1-5, >=3,檢測anent,>=5,檢測host頭)
--referer 指定referer頭(level >=3才檢測)
--headers 指定額外的headers請求頭(多個必須使用換\n,首字母必須大寫)
--method 指定請求方式, 默認爲get,get請求不成功嘗試post
--auth-type 身份認證類型 (Basic,Digest,NTLM) ,
--auth-cred 身份認證帳號密碼 "username:password" , 完整demo: http://xxx.php?id=1 --auth-type Basic --auth-cred "u:p" (我的認爲不經常使用)
--auth-cert / --auth-file 基於客戶端證書進行校驗,(我的感受很是很是很是之不經常使用,略過...嘿嘿,放肆一把,就不學這個了)
--proxy 指定代理
--proxy-cred 指定代理的帳號密碼(代理須要帳號密碼的前提下)
--ignore-proxy 忽略系統代理(咱們設置的代理都是經過瀏覽器進行設置的,一般用於掃描本地系統)
--delay 每次請求的延遲時間,單位秒,默認無延遲.
--timeout 請求超時時間,默認30秒.
--retries 鏈接超時重試次數 ,默認3次
--randomize 長度,類型與原始值保持一致的狀況下,指定每次請求隨機取值的參數名 例: xxx.php?id=100, --randomize=''id" 則id的值在100-999隨機出現
--scope 過濾日誌內容,經過正則篩選掃描對象. 例: sqlmap -l burp.log --scope="(www)?\.aaa\.(com|net|org)" 則只會掃描以www開頭.aaa.com或者net或者org
--safe-url \ --safe-freq 掃描的時候回產生大量的url,服務器可能會銷燬session.每發送--safe-freq 次注入請求後 就發送一次正常請求.
--safr-url 須要掃描的url.
--safe-freq 出現錯誤(或者說帶sql注入請求)的次數
--skip-urlencode get請求會對url進行編碼. 某些web服務器不遵循標準編碼 此參數就是不對get請求的url進行編碼
--eval 每次請求前指定執行特定的python代碼.
對本機dvwa進行sql漏洞掃描. 首先這個網站是須要登陸的.
登陸過以後,在瀏覽器內獲取cookie信息.
複製cookie信息到sqlmap ,多個cookie之間用分號間隔分開
很快就直接把數據庫給爆了出來,證實此url存在sql注入漏洞且sqlmap帶入cookie成功.
-0 後續3個參數的集合(除--threads)
--predict-output 根據檢測方法,比對返回值和統計表(/sqlmap/common-outputs.txt)內容,不斷縮小檢測範圍,提升檢測效率.(比對信息包括但不限於版本名,用戶名,密碼,表名,列名..等,與--threads參數不兼容)
--keep-alive 使用http(s)長鏈接,新能好, 與--proxy參數不兼容.長鏈接避免重複簡歷鏈接的網絡開銷,但大量長鏈接會嚴重佔用服務器資源
--null-connection 只獲取相應頁面的大小值,而非頁面具體內容.一般用於盲注判斷真/假,下降網絡帶寬消耗. 與--text-only(基於頁面內容的比較判斷)不兼容
--threads 最大併發線程,默認爲1個線程,建議不要超過10個線程,不然可能影響站點可用性.與--predict-output參數不兼容
-p 掃描指定的參數,例 xxx.php?id=2&name=root -p id 只會掃描id變量的值 (能夠指定多個變量名,多個變量名逗號隔開)
(在使用-p的時候會使--level失效,例如--level=3的時候纔會掃描user-agent,可是咱們使用手動指定了掃描參數user-agent 雖然沒有指定--level=3,但此時也會掃描)
--skip 排除指定的參數,例如--level=3 會掃描user-agent 可是咱們不但願掃描useragent 可使用--skip跳過此參數的掃描
--dbms 指定後端數據庫,在已知web應用的數據庫前提下,略去sqlmap掃描判斷後端數據庫過程,提升效率.例: --dbms="mysql"(<5.0>指定版本)
--os 指定目標操做系統
--invalid-bignum/ --invalid-logical 默認使用負值使參數失效,bignum使用最大參數值使參數失效,logical使用布爾判斷值使取值失效
--no-cast 榨取數據時,sqlmap將全部結果轉換爲字符串,默認用空格替換null, 老版本可能不支持空格替換,使用--no-cast關閉替換
--no-escape 不逃逸,也就是說當payload中用丹壹號界定字符串時,sqlmap使用char()編碼逃逸的方法替換字符串,也就是說否則sqlmap對payload中 的單引號進行編碼
--prefix/ --suffix 前綴/後綴
--tamper 混淆腳本,用於繞過應用層過濾,IPS,WAF. 編寫好的腳本存放於(sqlmap/tamper/...)使用的時候直接寫出腳本名稱便可,sqlmap會 自動去對應文件夾加載對應的文件
--level 檢測級別,默認1級. 可設定1-5.級別不一樣,檢測的細度不一樣./sqlmap/xml/payloads(檢測級別不一樣,發送的payloads不一樣,)
--risk 風險級別 1-4 默認1, 若是指數太高,可能會對數據形成傷害(如:更新,刪除等)
就是以前提到的sqlmap的五種檢測類型, 默認是所有使用, 也能夠手動指定.
--time-sec 基於時間的注入檢測相應延遲時間(默認5秒)
--union-cols 默認聯合查詢1--10列,隨着--level增長 最多檢查50列.能夠手動指定.
--union-char 聯合查詢默認使用null,可能會出現失敗,此時能夠手動指定數值. 例: union select null union select 1111
--dns-domain 若是攻擊了dns服務器,使用此功能能夠提升數據榨取速度
-f(--fingerprint) 數據庫管理系統的指紋信息(數據庫類型,操做系統,架構,補丁等)
-b (--banner) banner信息
--current-user 查詢當前數據庫管理系統帳號
--current-db 查詢當前數據庫暱稱
--hostname 查詢當前主機名
--users 查詢數據庫系統中全部的帳號
--peivileges-U xxx -u 查詢指定帳號的權限 若是不跟指定用戶名 則查詢的是全部的用戶, -CU 查詢當前用戶
-D 指定數據庫
--table 查詢全部表
-T 指定表
--columns 查詢指定表的全部列
-C 指定某一列查詢
--exclude-sysdbs 忽略系統庫
--count 統計記錄
--batch 批處理,也就是系統默認選項(按照默認的選項 全自動執行)
--dump 保存數據到本地(配合一系列的指令)
-C 指定columns 若是不指定,默認整表
-T 指定表名,
-D 指定數據庫
-start 數據起始位置 (按表的id進行取值)
-stop 數據結束位置
--dump-all 下載整表
--sql-query 指定sql語句
在mysql <5.0的時候 ,是沒有information_schema庫的,這時候咱們就不能根據數據源表進行一系列的操做
還有一種狀況是mysql>=5.0的時候,但無權限讀取information_schema庫,這時候可能就須要用到暴力破解
在微軟access數據庫中,默認是無權讀取MSysObjects庫的
--common-tables 暴力破解表名(根據字典)
--common-columns(Access系統表無列信息) 暴力破解表字段
--udf-inject ,, --shared-lib
--file-read 讀取目標系統指定文件(值爲具體文件的路徑)
--file-write 寫入的文件
--file-dest 寫入保存的路徑
--os-cmd 執行系統命令
--os-shell 獲得系統shell
--sql-shell 獲得sqlshell
--reg-read 讀取註冊表鍵值
--reg-add 向註冊表添加鍵值
--reg-del 刪除註冊表鍵值
--reg-key --reg-value --reg-data --reg-type 輔助參數, 上面三個操做的時候能夠縮小範圍.
-s sqllite會話文件保存位置
-t 記錄流量文件保存位置
--charset 強制字符編碼
--crawl 從起始位置爬站深度
--csv-del dump下來的數據默認存於","分割的csv文件中,--csv-del用來指定其餘分隔符
--dbms-cred 指定數據庫帳號
--flush-session 清空session
--force-ssl 針對https的網站..
--fresh-queries 忽略本地session 重新發送請求
--output-dir 指定一個輸出目錄
--parse-errors 分析和顯示數據庫中內建報錯信息
--save 將命令保存成配置文件
--check-waf 檢測waf.ips.ids
--hpp 繞過WAF,IPS,IDS 尤爲對ASP,/IIS.ASP.NET/IIS
--identify-waf 更完全的檢查waf
--mobile 模擬只能手機設備(實現方式只是替換對應的user-agent)
--purge-output 清除output文件夾
--smart 當有大量檢測目標時, 只選擇基於錯誤的檢測結果
--wizard 嚮導模式.