強加密演算法下,SQL注入案例

2021-09-23 01:40:58 字數 2078 閱讀 9852

密碼學具有各種優點,包括資訊的機密性。然而,過度依賴密碼學來保護應用程式是乙個壞主意。今天我們就通過乙個案例研究,來認識一下通過加密的有效載荷識別和利用sql注入漏洞。

sql注入也許很多人都知道或者使用過,如果沒有了解或完全沒有聽過也沒有關係,因為接下來我們將介紹sql injection。

sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。

具體來說,它是利用現有應用程式,將惡意的sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入惡意sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。

那sql注入會在什麼時候發生呢?

假設我們在瀏覽器中輸入url www.sample.com,由於它只是對頁面的簡單請求無需對資料庫動進行動態請求,所以它不存在sql injection,當我們輸入www.sample.com?testid=23時,我們在url中傳遞變數testid,並且提供值為23,由於它是對資料庫進行動態查詢的請求(其中?testid=23表示資料庫查詢變數),所以我們可以在該url中嵌入惡意sql語句。

不過要提前說明一下,我們不會在本文中討論加密問題,而是只討論應用程式缺陷,我們會先生成加密的有效載荷,然後將其用於識別和利用sql注入。

在最近我們接觸到的乙個電子商務應用程式中,觀察了該**的大多數請求引數值已被加密。當請求引數被加密時,很難對應用程式進行模糊測試,除非我們可以去除加密,不過這需要知道金鑰和加密演算法。

下圖就是我們所找的樣本**的詳細資訊頁面,該頁面就是以加密格式傳送id(orderid)引數的。中國菜刀

注意:引數值(bdkfx3xnksc =)是加密的,而不是簡單的base64編碼。id引數的加密值以base64編碼格式表示。

我們還注意到,如果我們退出應用程式,然後以相同的使用者登入並導航到完全相同的頁面,則加密引數(npbri1km2ic =)的值現在不同,如下所示。

正如上圖所示,隨機金鑰在每個成功的登入或會話id(cookie的一部分)中用於加密,以某種方式用作金鑰的一部分。這看起來很安全,不過還是讓我們嘗試著sql注入。天空彩

首先,我們嘗試在多個位置注入單引號(')以測試輸入驗證,但請求引數被拒絕,因為這些引數需要加密格式(即有效的密文)。

不過我們在這裡可以使用購物車的乙個分享功能,此功能允許使用者與其他人共享購物車專案。當使用者儲存購物車進行共享時,會產生乙個帶有隨機查詢令牌的鏈結。通過訪問此鏈結(url),使用者可以訪問彼此的購物車。在購物車被要求儲存之前,使用者被要求在購物車上標記乙個名字。

由於這是接受明文輸入的罕見輸入字段之一,所以我們將其編碼為sqli,xss。在更深入的檢測中,我們發現生成的url中的令牌共享購物車實際上是我們為購物車選擇的購物車名稱的密碼。

不過請注意,共享購物車功能可不會輕易受到任何攻擊的影響,但可以用於為給定輸入(明文)生成加密的有效內容(密文)。現在,可以共享購物車功能的鏈結就可以生成乙個加密的攻擊有效載荷來檢查應用程式對sql注入,繞過授權等漏洞行為進行驗證了。為了測試sql注入,生成了單引號(')的加密值。

加密的有效載荷用於模糊僅接受密文值作為輸入的各種應用引數。我們花了一些時間來打到正確的位置,但是最終,orderitem頁面的id引數返回乙個sql錯誤訊息,確認該漏洞。

該錯誤訊息證明應用程式生成動態查詢,並可能容易受到sql注入攻擊。現在是從資料庫中提取資訊的時候了,基於union的sql查詢用於從資料庫中提取資料,聯合運算子用於組合兩個或多個select語句的結果。

第乙個任務是確定作為sql查詢的一部分返回的列數,使用試錯,我們在查詢中返回了一些列(30)。現在是時候從資料庫中提取資訊了,我們建立了乙個加密的有效載荷來提取資料庫版本資訊,如下所示。

然後,把上述有效載荷的輸出生成的密文作為頁面上易受攻擊的id引數輸入。

然後我們使用這個漏洞來構建資料庫系統,最終得到乙個shell。

總結

由上面的分析可知,用加密引數來實現應用程式中的安全性其實並不像想象中的那麼安全,比如用強加密演算法加密的資料,惡意攻擊者可以使用加密的有效載荷的方式來進行攻擊。 目前,加密仍被認為是保護資料免遭篡改或欺騙的有力機制,不過由於加密執行不力和缺乏明確的使用隱私保護,所以仍有可能會造成相當危險的安全漏洞。

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

gentry同態加密演算法 同態加密演算法

本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...

對稱加密演算法 非對稱加密演算法

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...