當前位置:成語大全網 - 書法字典 - 部分sql註入概要

部分sql註入概要

我是壹名ctf玩家,我在最近的實踐中遇到了壹些sql註入問題,但sql註入壹直是我的弱項之壹,因此我寫壹份總結來記錄我最近了解到的壹些sql註入漏洞的利用情況。

在可以聯合查詢的主題中,數據庫查詢到的數據壹般會回顯到首頁,這是聯合註入的前提。

它適用於帶有echo的MYSQL數據庫和5.0以上的數據庫軟件版本,因為MYSQL會有壹個系統數據庫information_schema,用於存儲數據庫元數據(關於數據的數據),如數據庫名稱、表名、列數據類型、訪問權限等。

聯合註射的過程:

為了判斷註入點,and 1 = 1/and 1 = 2可以用來判斷註入點。

當註入類型為數字時,返回的頁面會有所不同,但都可以正常執行。

Sql註入通常是數字註入和字符註入:

1,數字註入

數字語句:

在這種情況下,直接使用AND 1 = 1/和1 = 2可以正常執行,但返回的接口不同。

2.字符註入

字符聲明:

字符語句輸入我們的輸入將由壹對單引號或這些雙引號結束。

因此,如果我們也輸入and 1 = 1/and 1 = 2,我們會發現回波圖像並無不同。

當我們傳入and 1 = 1/and 1 = 2時,語句變成

傳入的內容變成了字符串,而不是命令。

因此,最簡單的字符類型測試方法是添加單引號‘,這會導致錯誤。

添加註釋-正常回顯界面後。

這裏的另壹點是sql語句的閉包有時是不同的。以下是壹些常見的。

在這壹步中,您可以使用order by函數,該函數根據指定的字段名對MySQL中的查詢結果進行排序。除了指定的字段名稱之外,您還可以指定要排序的字段的字段。第壹個查詢字段是1,第二個是2,依此類推,因此可以使用order by判斷列數。

以字符註入為例:

當列數存在時,它將正常回顯。

但是當列數不存在時,將會報告錯誤。

這壹步解釋了為什麽它是聯合註射,並使用聯合。UNION的作用是合並兩個select查詢的結果。

但是,在顯示數據時,程序通常只獲取結果集中的第壹行數據,這使得聯合註入非常有用。

當我們查詢的第壹行不存在時,第二行將回顯給我們。

當查詢數據設置為-1時,第壹行的數據為空,第二行自然成為第壹行。

在此基礎上進行註射。

可以發現2和3都是可用的顯示點。

像以前壹樣使用union select,並壹次性顯示group_concat()。

目前很多Web程序都沒有正常的錯誤回顯,所以我們需要使用錯誤註入來註入SQL。

錯誤註入的利用步驟與聯合註入相同,但利用函數不同。

以updatexml為例。

update XML(XML _ target,xpath_expr,new_xml)

Xml_target:需要操作的Xml片段。

Xpath_expr:需要更新的xml路徑(Xpath格式)

New_xml:更新的內容

該函數用於更新所選xml片段的內容,用xml_target替換XML標記的給定片段的單個部分,然後返回更改後的XML。xml_target替換的部分匹配xpath_expr用戶提供的XPath表達式。

當xpath路徑錯誤時,該函數將報告錯誤,並將返回路徑內容,以便我們可以在錯誤內容中看到我們想要的內容。

而以~開頭的內容不是xml格式中的語法,那麽可以使用concat函數拼接~使其報錯,當然只要不符合格式就可以報錯。

【極客挑戰賽2019】hard SQL

登錄界面嘗試註入,測試後發現是單引號字符註入,union和空格被過濾,無法使用聯合註入,但回顯錯誤消息,表示可以使用錯誤註入。

通過使用updatexml函數的錯誤報告原則進行註入,並通過在路徑處使用concat函數將~與我們的註入語句進行拼接。

查找xpath錯誤並執行sql語句返回錯誤。

在off the charts的步驟中,發現等號也被過濾了,但可以使用like代替等號。

爆炸場

爆炸性數據

這裏有壹個問題是標誌不完整,因為updatexml可以查詢的字符串的最大長度是32,所以這裏使用了left函數和right函數來讀取它。

有許多函數可用於錯誤註入,以下三個函數也是常用的:

棧註入是多個語句壹起執行。

原理是mysql_multi_query()支持多條sql語句同時執行。成堆地分離和執行sql語句。

例如

如果妳有足夠的權限,妳甚至可以添加、刪除和檢查數據庫。但是疊加註入的局限性很大。但與union聯合執行不同的是,它可以同時執行無數條語句和任何sql語句。union執行的語句是有限的。

【強力網杯2019】便簽

判斷註入類型後,我們嘗試了聯合註入,發現select被過濾,不區分大小寫的過濾是常規的。

然後使用堆棧註入,並使用show來避免select。

接下來,獲取表信息和字段信息。

那串數字非常可疑。flag很有可能在其中。看看這個。

這裏的表名應該加上反單引號,這是數據庫的引用字符。

找到了標誌,但沒有辦法直接讀取它。再次閱讀單詞時,我發現其中有壹個id字段,我猜數據庫語句是

結合1‘或1=1#,可以讀取所有數據。通過重命名,可以將1919810931114更改為單詞。

最終有效載荷:

盲註應掌握的幾個功能?

當網頁屏蔽錯誤信息時,只能通過網頁返回真假判斷,本質上是壹種暴力破解,這是布爾盲註的利用點。

首先,判斷註射點和註射類型相同。

但是盲註沒有判斷列數的步驟和判斷顯示位的步驟,這與回聲註入不同。

判斷完註入類型後,需要判斷數據庫的長度,這裏使用了length函數。

以【WUSTCTF2020】顏值評分查詢為例。

輸入參數後,我發現get在url處傳入了壹個stunum。

然後使用長度函數測試是否有註入點。

發現頁面有明顯變化。

把進來的變成

該頁面顯示該學生不存在。

那麽可以得出結論,數據庫名稱的長度為3。

測試發現空格被過濾。

然後有必要檢查數據庫名稱。有兩種方法。

壹,只有substr函數,直接比較

在編寫腳本時,該方法可用於直接遍歷。

第二,添加ascii函數

在編寫腳本時,也可以直接遍歷這個有效負載,還可以用於二分搜索法,這樣速度更快。

下壹步與聯合註入相同,只是使用substr函數逐個截取字符並逐個進行判斷。但是,這種壹個壹個的盲註手工筆記非常麻煩,所以需要腳本。

直接遍歷腳本

二分法腳本

當在代碼中使用時間盲時,存在sql註入漏洞,但頁面既不會回顯數據也不會回顯錯誤消息。

語句執行後,它不是真的或假的,因此我們不能通過頁面的內容來判斷它。

所以有布爾盲就壹定有時間盲,但時間盲不壹定有布爾盲。

時間盲註主要利用sleep功能使網頁的響應時間不同從而實現註入。

無sql實驗室8:

無論妳進入什麽,只有壹個妳在...會被回響,這是時間盲註的特點。

正常輸入時。當id=1時,時間為11毫秒。

判斷是單引號字符註入後,插入sleep語句。

顯而易見,響應時間為3053毫秒。

使用不同的時間,您可以使用腳本來運行數據庫,並且後續步驟與布爾盲註相同。

爆破倉庫

(指空氣質量指數)超過500微克/立方米

爆炸場

腳本

在SQL註入過程中,union、and、or都被完全過濾掉了,所以我們可以考慮使用XOR註入。

什麽是異或?

異或是壹種邏輯運算。簡單來說,算法就是:兩個條件相同(真或假),為假(0),兩個條件不同,為真(1)。null和任意條件之間的異或運算為null。如果從數學的角度來理解,空集和任意集合的交集都是null。

即1 1 = 0,0 0 = 0,1 0 = 1。

利用這壹原理,當並、與或都被過濾時,可以實現註入

【極客挑戰賽2019】final SQL

給出了五個選項,但都沒有用。點擊後它們都會出現在網址上?身份證.

And union、And、or都被過濾。

測試結果?ID = 1 1將給出壹個錯誤。

但是呢?Id = 1 0將返回?id=1的頁面,就是前面說的原理,1的時候等於1,那麽return?id=1的頁面。

根據原理寫payload,然後寫腳本。

爆破倉庫

(指空氣質量指數)超過500微克/立方米

爆炸場

基於此,我們可以編寫壹個基於XOR的布爾盲註腳本。

實驗推薦:課程:SQL註入基礎(和田網安實驗室)