sqlmap基礎入門超詳細教程

前言:

總算進入了本身喜歡的行業. 要時刻記得當初本身說過的話, 不忘初心. Come on!php

資料:

感謝超哥分享的乾貨..  sqlmap乾貨點擊直達html

 

學習環境:

本次學習使用的是kali集成的sqlmap,包括後續的burp suite 不牽扯安裝.此步略過.python

 

sqlmap簡介:

  • sqlmap是一款開源免費的漏洞檢查、利用工具.
  • 能夠檢測頁面中get,post參數,cookie,http頭等.
  • 能夠實現數據榨取
  • 能夠實現文件系統的訪問
  • 能夠實現操做命令的執行
  • 還能夠對xss漏洞進行檢測

基本上能夠說 安全從業人員必備的一款神器之軟件.也是邁入安全圈的必要條件.mysql

 

支持檢測類型

sqlmap 支持5種漏洞檢測類型:web

  • 基於布爾的盲注檢測  (若是一個url的地址爲xxxx.php?id=1,那麼咱們能夠嘗試下的加上 and 1=1(和沒加and1=1結果保持一致) 和 and 1=2(和不加and1=2結果不一致),則咱們基本能夠肯定是存在布爾注入的. )
  • 基於時間的盲注檢測(和基於布爾的檢測有些相似.經過mysql的 sleep(int)) 來觀察瀏覽器的響應是否等待了你設定的那個值 若是等待了,則表示執行了sleep,則基本肯定是存在sql注入的
  • 基於錯誤的檢測 (組合查詢語句,看是否報錯(在服務器沒有抑制報錯信息的前提下),若是報錯 則證實咱們組合的查詢語句特定的字符被應用了,若是不報錯,則咱們輸入的特殊字符極可能被服務器給過濾掉(也多是抑制了錯誤輸出.))
  • 基於union聯合查詢的檢測(適用於若是某個web項目對查詢結果只展現一條而咱們須要多條的時候 則使用union聯合查詢搭配concat還進行獲取更多的信息)
  • 基於堆疊查詢的檢測(首先看服務器支不支持多語句查詢,通常服務器sql語句都是寫死的,某些特定的地方用佔位符來接受用戶輸入的變量,這樣即便咱們加and 也只能執行select(也不必定select,主要看應用場景,總之就是服務端寫了什麼,你就能執行什麼)查詢語句,若是能插入分號;則咱們後面能夠本身組合update,insert,delete等語句來進行進一步操做)

支持的數據庫管理系統

  已知的有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應用層的身份證多一點)

  包含密碼破解模塊..

  等.....

參數介紹

  由於參數太多,我這裏分項學習作筆記

  options類:

    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就會根據文件內容進行特定的掃描

實踐

get掃描

    掃描目標是我本機對象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強烈建議咱們提供掃描等級和風險等級...

 

 

 

那咱們就提高下掃描等級和風險等級:

掃了一圈結果仍是沒發現注入(我晚上在好好研究下.)...

 

post掃描

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的日誌文件生成方式爲:

 

Request類參數

    --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代碼.

    

     

       

sqlmap之cookie應用

對本機dvwa進行sql漏洞掃描. 首先這個網站是須要登陸的.

登陸過以後,在瀏覽器內獲取cookie信息.

 

 複製cookie信息到sqlmap ,多個cookie之間用分號間隔分開

很快就直接把數據庫給爆了出來,證實此url存在sql注入漏洞且sqlmap帶入cookie成功.

 

optimization(優化參數)

      -0            後續3個參數的集合(除--threads)

      --predict-output      根據檢測方法,比對返回值和統計表(/sqlmap/common-outputs.txt)內容,不斷縮小檢測範圍,提升檢測效率.(比對信息包括但不限於版本名,用戶名,密碼,表名,列名..等,與--threads參數不兼容)

      --keep-alive        使用http(s)長鏈接,新能好, 與--proxy參數不兼容.長鏈接避免重複簡歷鏈接的網絡開銷,但大量長鏈接會嚴重佔用服務器資源

      --null-connection      只獲取相應頁面的大小值,而非頁面具體內容.一般用於盲注判斷真/假,下降網絡帶寬消耗. 與--text-only(基於頁面內容的比較判斷)不兼容

      --threads           最大併發線程,默認爲1個線程,建議不要超過10個線程,不然可能影響站點可用性.與--predict-output參數不兼容

Injection(注射參數)

      -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會 自動去對應文件夾加載對應的文件      

Detection(檢測)

      --level         檢測級別,默認1級. 可設定1-5.級別不一樣,檢測的細度不一樣./sqlmap/xml/payloads(檢測級別不一樣,發送的payloads不一樣,)

      --risk           風險級別 1-4 默認1, 若是指數太高,可能會對數據形成傷害(如:更新,刪除等)

Techniques(檢測sql漏洞存在的技術類型)

      就是以前提到的sqlmap的五種檢測類型, 默認是所有使用, 也能夠手動指定.

      --time-sec        基於時間的注入檢測相應延遲時間(默認5秒)

      --union-cols        默認聯合查詢1--10列,隨着--level增長 最多檢查50列.能夠手動指定.

      --union-char       聯合查詢默認使用null,可能會出現失敗,此時能夠手動指定數值.  例: union select null  union select 1111

           --dns-domain        若是攻擊了dns服務器,使用此功能能夠提升數據榨取速度

Fingerprint(指紋信息)

      -f(--fingerprint)            數據庫管理系統的指紋信息(數據庫類型,操做系統,架構,補丁等)

      -b (--banner)              banner信息

Enumeration(枚舉)

      --current-user            查詢當前數據庫管理系統帳號

      --current-db             查詢當前數據庫暱稱

      --hostname             查詢當前主機名

      --users               查詢數據庫系統中全部的帳號

      --peivileges-U xxx          -u 查詢指定帳號的權限 若是不跟指定用戶名 則查詢的是全部的用戶, -CU 查詢當前用戶

      -D                   指定數據庫

      --table               查詢全部表

      -T                   指定表

      --columns              查詢指定表的全部列

          -C                   指定某一列查詢

      --exclude-sysdbs          忽略系統庫

      --count               統計記錄

      --batch              批處理,也就是系統默認選項(按照默認的選項 全自動執行)

dump數據

      --dump              保存數據到本地(配合一系列的指令)

      -C                指定columns  若是不指定,默認整表

      -T                指定表名,

      -D                指定數據庫

      -start                數據起始位置 (按表的id進行取值)

      -stop                數據結束位置

      --dump-all            下載整表

      --sql-query            指定sql語句

 

Brute Force(暴力破解)

      在mysql <5.0的時候 ,是沒有information_schema庫的,這時候咱們就不能根據數據源表進行一系列的操做

      還有一種狀況是mysql>=5.0的時候,但無權限讀取information_schema庫,這時候可能就須要用到暴力破解

      在微軟access數據庫中,默認是無權讀取MSysObjects庫的

      --common-tables                  暴力破解表名(根據字典)

      --common-columns(Access系統表無列信息)      暴力破解表字段

Udf Injection(UDF注射)

      --udf-inject ,, --shared-lib

      --file-read              讀取目標系統指定文件(值爲具體文件的路徑)

      --file-write              寫入的文件  

      --file-dest               寫入保存的路徑

      --os-cmd                執行系統命令

      --os-shell                獲得系統shell

      --sql-shell               獲得sqlshell

Winwods RegisTory(windows註冊表相關)

      --reg-read              讀取註冊表鍵值

      --reg-add               向註冊表添加鍵值

      --reg-del                 刪除註冊表鍵值

      --reg-key --reg-value --reg-data --reg-type  輔助參數, 上面三個操做的時候能夠縮小範圍.

Genral(常規參數)

      -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

Miscellaneous(雜項)

      --mobile        模擬只能手機設備(實現方式只是替換對應的user-agent)

      --purge-output      清除output文件夾

      --smart          當有大量檢測目標時, 只選擇基於錯誤的檢測結果

      --wizard        嚮導模式. 

相關文章
相關標籤/搜索