SQL注入攻擊



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級別.

相關文章
相關標籤/搜索