慕課網sqlmap學習筆記:
一、SQL注入
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
例如
(1)在url上添加參數請求查詢:http://index.com/?id=1
以上是通過url查詢id為1的數據,但如果我們在后面傳參這樣寫:http://index.com/?id=1' or '1'='1
那么執行的查詢語句就是where xx='1' or '1'='1',這樣查詢的就是全部的數據。
(2)或者是登錄時的免密登錄,在傳參的時候將注釋符號#傳入,注釋后面密碼的查詢和驗證,這樣就可以只通過用戶名免密登錄
用戶名:' or 1=1#
這樣查詢語句執行的就是:where username='' or 1=1# and password='',直接注釋掉密碼的驗證
(3)對數據表的惡意操作
傳入的參數為 or 1=(drop xx from xx)等,可以對數據表進行刪除操作,所以sql注入的安全性問題很重要,sql注入是在保證查詢where語句恆真的情況下可以對數據表做任意操作
(4)資源枚舉,其實就是通過枚舉法也就是窮舉法對數據庫名,備份數據庫名,數據表名,列名等進行猜測,然后通過服務器返回的錯誤提示中得到信息,便可以進行sql注入操作。
而為何一些表單提交和輸入文本框中的請求可以sql注入呢,就是后端沒有對用戶輸入的數據進行過濾驗證。所以判斷是否可以進行sql注入是我們即將進行sql注入攻擊的第二步。
第一步是確定我們要進行sql注入的地方。
第二步嘗試性地輸入一個使wehre查詢語句恆真的語句,通過返回的錯誤的提示可以知道該輸入域是否對輸入的字符串進行過濾
第三步可以通過猜測表名,列名等方法可以測試
二、sql注入工具--Sqlmap
Sqlmap是一款自動化sql注入的工具,其功能強大,支持多種數據庫,包括mysql,sqlserver等主流的數據庫,采用獨特的sql注入方法來達到自動化注入掃描漏洞的目的。
1)基於布爾的盲注(Type:boolean-based blind),即可以根據返回頁面判斷條件真假的注入。
2)基於時間的盲注(Type:time blind),即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。
3)基於報錯注入(Type:error-based),即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中。
4)聯合查詢注入(union query),可以使用union的情況下的注入。
5)堆查詢注入,可以同時執行多條語句的執行時的注入
1、sqlmap環境搭建
(1)python2.7版本下載
(2)sqlmap下載:http://sqlmap.org/,將sqlmap文件放在python2.7的文件夾下
(3)環境變量設置,添加sqlmap文件夾的環境變量
(4)打開命令窗口,輸入sqlmap.py -h則安裝成功
2、測試環境搭建
搭建一個包含了sql注入,xss等漏洞的測試環境以便學習sql注入知識點。
安裝php環境:由於源碼是php的則需要安裝php的環境
(1)安裝php環境:wampserver下載安裝:Apache+mysql+php集成安裝環境,簡化該集合環境安裝配置流程,減少了環境配置的繁瑣
問題1:安裝完成后打開時報錯:
解決方案:http://blog.csdn.net/xiaoqiang_0719/article/details/52785604
下載安裝:
重啟電腦即可。如果還是彈出該錯誤,首先檢查下下載的軟件是32位的還是64位的,第二可以卸載wampserver重新下載安裝即可。
問題2:wampserver本地環境啟動后顯示橙色不顯示綠色
解決方案:http://www.xuewangzhan.net/wenti/10270.html
80端口號被占用,修改端口號即可
將wampserver>bin>apache>apachex.xx>httpd.conf文件以下信息的端口號換成8080
Listen 0.0.0.0:80
Listen [::0]:80
改成:
Listen 0.0.0.0:8080
Listen [::0]:8080
右鍵圖標refresh即可。
(2)准備測試源碼dvwa:https://github.com/ethicalhack3r/DVWA
a.下載dvwa解壓,解壓到運行代碼的位置,即將解壓的安裝包放在wampserver下的www文件夾下
b.復制dvwa解壓的路徑
c.圖標鼠標右鍵Apache>http.config,修改文件
d.添加host:計算機>c盤>windows>system>drivers>etc>hosts,文件結尾添加127.0.0.1 dvwa的域名:dvwa.localhost,即127.0.0.1 dvwa.localhost,修改時顯示權限不足時,在彈出的窗
口點擊是即可
e.測試是否域名添加成功:打開命令窗口,ping dvwa.localhost
f.重啟wampserver
(3)修改配置文件,添加數據庫賬號
a.打開dvwa>config>復制config文件,將文件后綴名改為php結尾
b.打開config.inc.php,修改用戶名,密碼,端口號(3306)
用戶名為root,密碼修改為空,端口號5432改為3306
c.瀏覽器打開http://localhost:8080/dvwa/setup.php,進入安裝界面
d.點擊Create/Reset Database創建數據庫,過會頁面會自動跳轉到登錄頁面:
e.數據庫的登錄賬號和密碼獲取:右鍵dvwa圖標>phpMyadmin>users表:admin/password
f.登錄dvwa,默認的用戶名和密碼為:admin/password,進入到以下的頁面
3、sqlmap使用
(1)獲取系統的基本信息
登錄dvwa,設置安全的等級,設置為low,網站的安全等級為low時才能進行注入測試。
點擊SQL injection輸入注入的信息,復制注入信息后提交的url
a.sqlmap的參數格式:
sqlmap.py -u 目標地址
sqlmap.py -u "http://localhost:8080/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="" --batch #不加入地址后面的#
查找注入點以及可注入的方式,得到數據庫是mysql,以及數據庫的版本,注入點的參數為id
sqlmap.py -r 保存的請求頭文件:
谷歌瀏覽器>測試的網站右鍵>檢查
>Networks>F5重新加載網站>選中網址信息右鍵>copy>copy request header
在sqlmap文件夾下新建一個文本文件重新命名,將復制的頭文件的信息粘貼保存
(2)sqlmap數據庫檢測
通過sqlmap獲取數據庫的數據
a.查看數據庫
sqlmap.py -u 目標地址 --cookie=“” --dbs:查看數據庫名稱
查找大數據庫的名稱為‘dvwa’
b.掃描數據表
查看數據庫表名稱:sqlmap.py -u 目標地址 --cookie=“” --table:查詢出所有數據庫的所有表
查詢數據表數據:sqlmap.py -u 目標地址 --cookie=“” --dump:查詢出所有數據表的所有數據
c.導出數據
sqlmap.py -u 目標地址 --cookie=“” --dump-all
e.指定數據庫查詢
dvma下所有數據表數據
(1)指定數據庫名稱查找數據表:sqlmap.py -u 目標地址 --cookie=“” -D 數據庫名稱 --dump
指定dvwa數據庫查找到兩個表:users,guestbook,查詢結果:
(2)指定數據表名稱查找數據表的數據:sqlmap.py -u 目標地址 --cookie=“” -D 數據庫名稱 --dump -T 數據表名稱
指定查找dvwa數據庫users數據表的數據查詢結果:
(3)指定查詢users表的表結構:
查詢結果:
(4)破解密碼
查詢到了users表的數據后發現密碼都是md5加密存儲的
可以網上直接搜索md5解密,將加密后的字符解密后得到的admin用戶的密碼為:password
另外,也可以用sqlmap自帶的字典破解密碼:
在獲取users數據表的過程中會出現問題選擇,詢問是否破解密碼
最后破解密碼顯示為:
括號內的為破解后的密碼
4、sqlmap 注入post
1、post注入參數介紹
2、如何使用post請求注入
sqlmap.py -u "url" --cookie="" --data=“post源碼” --batch --smart
注:--batch --smart啟發式判斷,batch自動執行yes,smart智能判斷
post源碼的獲取:
(1)dvwa網站>xss stored>輸入參數點擊提交
(2)復制提交后的url
(3)谷歌瀏覽器>測試的網站右鍵>檢查>Network,復制cookie以及Form Data
選擇view source復制:
(4)運行post注入測試
(5)刷新dvwa的網站查看注入的結果
3、如何快速地批量注入測試
sqlmap.py -l txt文件名 --batch --smart
text文件:請求的地址,請求的頭信息以及Form Data即post源碼信息
(1)谷歌瀏覽器>測試的網站右鍵>檢查>Network,Request Header>view source
(2)新建text文件,第一行填寫請求的網站地址及端口號,第二行開始粘貼復制的Request Header,最后粘貼復制的Form Data的view source信息,如下所示:
(3)多個請求即批量注入,復制添加以上信息放在文件的后面,用分割符區分開保存即可
5、批量檢測注入漏洞
sqlmap.py -g "url匹配" --batch --smart
url匹配使用谷歌搜索語法,由於谷歌瀏覽器沒有翻牆,這個后期補充上筆記。
三、防護sql注入
那么,如何防護sql的注入呢
(1)永遠不要相信用戶的輸入,必須對用戶的輸入進行校驗,過濾,可以通過正則表達式,輸入的字符長度限制但雙引號,轉義字符等,可以前后端進行結合對用戶的輸入驗證
(2)重要的數據等不能明文顯示,必須加密
(3)不要用管理員的權限登錄數據庫,可以在數據庫的安全性文件夾-架構-新建架構,然后在數據表上添加架構的名稱,查詢數據表時需要在表明前面加上架構的前綴才能查詢,這樣有效防止對數據表名的猜測。
(4)對於系統的錯誤提示盡可能少,或者對其提示進行改變,隱藏不必要的系統信息。