SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。php
對於初學者而言,找漏洞最好是基於白盒審計進行,所謂白盒審計能夠簡單地理解爲就是看着代碼找漏洞,固然了,在web方面的代碼審計可沒想象的那麼輕鬆,不會像C語言中很經典的溢出,先定義一個buffer,而後用一個gets()函數直接獲取內容,這麼簡單的溢出,泥萌也過小瞧程序媛/猿了。在web方面的代碼審計,感謝偉大的社會主義社會,我國大部分的網站都是php建的(畫外音:php是世界是最好的語言,哈哈),因此大多數狀況下咱們都是審計php代碼,php函數又那麼多,相互之間互相調用,使得代碼審計不容易,固然了,也不難,只要掌握了技巧,結合經驗,就能找出漏洞所在。mysql
在正式挖洞前,咱們先看看DVWA給出的四種級別的SQL注入的源代碼。web
0x01基於dvwa的代碼審計sql
初學者接觸到入門級別的代碼審計的內容。數據庫
DVWA使用界面安全
SQL注入(SQL Injection)服務器
在左下角的DVWA Security能夠調節難度係數,即low,medium,high,impossible選中後點擊submit提交便可。函數
點擊左下角view source能夠看到源代碼,方便進行代碼審計測試
咱們能夠看到四種級別的代碼分別以下所示:網站
代碼:
低級(low)
分析:
關鍵語句:
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
能夠看到:
Low級別的代碼對來自客戶端的參數id沒有進行任何的檢查與過濾,存在明顯的SQL注入。
中級(medium)
分析:
關鍵代碼:
$id = mysql_real_escape_string( $id );
// Check database
$query = "SELECT first_name, last_name FROM
users WHERE user_id = $id;";
能夠看到:
Medium級別的代碼利用mysql_real_escape_string函數對特殊符號\x00,\n,\r,\,’,」,\x1a進行轉義,在必定程度上控制了用戶的輸入
高級(high)
分析:
關鍵語句:
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id
LIMIT 1
能夠看到:
代碼但願經過LIMIT 1來控制使得只輸出一個查詢結果
不可能(Impossible)
分析:
關鍵代碼:
$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );
$data->bindParam( ':id', $id, PDO::PARAM_INT );
能夠看到:
代碼中限制返回的查詢結果數量爲一時,纔會輸出,防止了大量數據的泄露,同時採用了PDO技術,隔離了代碼與數據,使得用戶輸入的數據再也不被看成代碼執行,採用這種方案,杜絕了SQL注入漏洞的發生
0x02挖掘漏洞
注:
1.接下來的過程當中會大量用到sqlmap,部分站點的漏洞將直接以sqlmap的形式給出。因此建議小夥伴先去熟悉下sqlmap。
2. 如下提交的漏洞均已被廠家修復,小夥伴們就不要想搞事情了
3.本文展示的漏洞在測試前已獲受權,請小夥伴們勿非法測試
先來枚有web頁面的漏洞:
存在漏洞的頁面
掃目錄時發現該url下存在某事件型漏洞
採用某位大神的中轉腳本:
經過sqlmap神器成功挖到漏洞
拿到的數據庫
Sqlmap測試時截圖
總結:第一枚漏洞主要是採用某事件型漏洞結合sqlmap挖到的,難度至關於DVWA中的Medium級別
什麼?沒有數據看着不過癮?你這是要搞事情啊大兄弟!好吧,再來一枚數據量大的
第二枚漏洞:
測試時沒有截web的圖,只有sqlmap,將就着看吧,看看
存在漏洞的站點
Sqlmap掃一發
加個—tables繼續
就拿上張圖的mallbuilder來開刀吧
繼續—current-db
紅色打碼的部分是手機號或真實姓名或郵箱號,過於敏感就打碼了,能夠看到圖中下面password就是密碼編碼加密後的字符串
拿到用戶名和密碼後咱們能夠登錄後臺
紅色打碼部分爲收貨人姓名及手機號,有一條還包括收貨地址
紅色打碼部分爲手機號
能夠看到後臺全部的功能咱們都是可使用的,就不繼續了
總結:經過簡單的sqlmap命令指定特定的表、數據庫來「脫褲」,拿到後臺登錄賬號密碼,進而進行進一步的操做。此站點的代碼強度至關於DVWA中的Medium級別.