DVWA系列之6 SQL注入漏洞的挖掘與防禦

2021-12-29 16:27:32 字數 1497 閱讀 5266

下面我們來檢視high級別的sql注入原始碼。

可以看到除了之前的mysql_real_escape_string()函式之外,在它前面還多加了乙個stripslashes()函式,這個函式的作用是刪除由 addslashes() 函式新增的反斜槓,也就是去除addslashes()函式的轉義。

這裡為什麼要有這個操作呢?這是由於在high級別下,php的magic_quotes_gpc被自動設為on,magic_quotes_gpc被稱為魔術引號,開啟它之後,可以對所有的get、post和cookie傳值的資料自動執行addslashes()函式,所以這裡才要使用stripslashes()函式去除。magic_quotes_gpc功能在php5.3.0中已經廢棄並且在5.4.0中已經移除了,這也是為什麼在dvwa中一直強調使用mysql_real_escape_string()函式進行過濾的原因吧。

另外還可以發現,在執行查詢之前,使用了if語句進行判斷,判斷的條件是乙個is_numeric()函式,也就是判斷使用者輸入的資料是否是數字型,只要不是數字型就一概報錯,這樣那些and、or、select等語句都無法執行了。

最後在具體執行查詢時,還要求$id是字元型。經過這樣重重防護,這樣頁面就很難注入了。

所以dvwa中的high級別其實是為我們展示了乙個樣板,告訴我們該如何從**層面來防止sql注入。至於high級別能否被注入,那估計只有那些真正的黑客高手才能做到了。

最後總結一下,如何從**層面防止sql注入。

對於數字型注入,只要使用if語句,並以is_number()函式作為判斷條件就足以防禦了。

對於字元型注入,只要對用於接收使用者引數的變數,用mysql_real_escape_string()函式進行過濾也就可以了。

那麼又該如何從**層面來挖掘sql注入漏洞呢?

這裡的首要原則是:使用者的一切輸入都是有害的,或者說是不被信任的。

所以漏洞挖掘主要可以從以下幾個方面著手:

一是**中負責獲取使用者資料的變數,這些變數主要包括:$_get、$_post、$_cookie、$_server。

二是**中負責執行資料庫查詢操作的函式,如mysql_query()。

我們可以在**中對這些變數和函式進行搜尋跟蹤,從而分析是否存在漏洞。

這裡可以使用一款名叫閃電檔案搜尋的軟體來進行查詢分析,如下圖所示。

我們從中選取dvwa的登入檔案login.php進行分析,可以發現這裡的引數型別是字元型,主要從兩個方面採取了防禦措施:一是使用mysql_real_escape_string()函式進行過濾,二是在mysql_query()函式之前加了@符號,抑制報錯資訊。因而這個頁面就是相對安全的。

dvwa系列 sql注入

前言 本篇博文就不詳細講解sql注入的成因了,有興趣的就去看看我sqlilabs的博文吧,我後面會慢慢完成sqlilabs的博文 low我們先來判斷注入點吧,用最常規的單引號試一試,報錯了,初步判斷應該是字元型的單引號注入。下面就推斷一下後台執行的sql語句,因為這是乙個根據輸入的id來查詢資訊的地...

滲透測試學習6 sql工具注入

用最基礎的get型注入開始 1 當我們發現注入點的時候,python sqlmap.py u 2 檢視所有的資料庫 python sqlmap.py u dbs 3 檢視當前使用的資料庫 python sqlmap.py u current db 4 發現使用的是security資料庫,接下來對此資...

DVWA之從SQL注入到寫入webshell

這篇文章談論簡單的技術,利用sql注入 sqli 漏洞,並獲得乙個webshell,所有的演示都是用dvwa 滲透測試演練系統 對於sql注入利用,有以下幾個基本步驟 1,發現sql注入點 2,通過mysql資料庫幫助,進一步進行注入,獲取帳號密碼等敏感資訊 3,上傳webshell,獲得乙個反向連...