CTF從入門到提升(二)約束條件的安全測試報錯注入

關於基於約束的SQL攻擊

在創建數據庫的時候,一般會先定義整個表的結構,假設我要做的是登錄入口,先簡單地創建一個用戶表。(用戶表中,我這裏是定義了三個字段,第一個是ID,然後第二個是用戶名)

在這裏插入圖片描述
表已經建完之後,看起來也沒什麼問題,那麼如果說我開發完了之後,應該有個登錄入口。

對沒有賬號的人來說,需要有一個註冊入口。註冊的本質是一個insert的過程,就是往裏插入一條數據。假如裏面數據庫沒有數據,我就要往裏加一個管理員賬戶。這個管理員我就會對它設置成admin,密碼是12346789。

(在這裏我做一個演示,如果大家想看可以到安全牛課堂的視頻裏看動手操作 CTF從入門到提升 課時2:3分0秒)

先去創建這張數據表,看一下,然後去創建一張,對吧?只有兩張表,然後我就去對uc。裏面是空的,對吧?我接下來就往裏插條數據insert。

在這裏插入圖片描述
在這裏插入圖片描述

剛纔我們提到了去註冊的時候,它的本質其實是我們一起插入一條數據,它的長度是有限制的,它限制了30位,如果說我們插入31位會這樣,它會自動的把31位就是說大於30的東西給吃掉,就是相當於抹掉了,它只會插入前30位。

那麼查出去插入的時候,它肯定會先去查一下,你去操作數據在表中原來存不存在。假設我去插了一個31位的數據,它自然表中是永遠不會存在的,那麼它就會把這31位的數據往表裏去插。

在這裏插入圖片描述
比如說用戶名是這個密碼是大於六位,且包含大寫字母小寫字母和數字。這麼複雜的大寫字母小寫字母和數字,我就隨便設一個,比如說大寫字母,這正常登錄試試看。大寫字母小寫字母數字就做一個段落。密碼就是一個去做一個登錄,發現這個時候就成功了,所以這個就是一個基於約束攻擊的簡單介紹。

題目:

(在這裏我做一個演示,如果大家想看可以到安全牛課堂的視頻裏看動手操作 CTF從入門到提升 課時2:10分20秒)

基於約束的就講這麼多。接下來的話就講一下報錯注的一些問題,然後去做一個簡單的分析,然後也會結合一道題目來講解。 首先來看一個簡單的一個公式,直接往上套就可以去用了,但是我覺得既然學了還是要能瞭解就去了解一下。

在這裏插入圖片描述

報錯注入

首先要去了解一下一些函數:
在這裏插入圖片描述
在這裏插入圖片描述

flow函數是向下取整。如果我們將rand*2之後,它的結果其實就會有0和1兩個結果。
在這裏插入圖片描述

這張表它其實就是默認會存在,而且這張數據表中的行數是很大的,後面我們也會去講到這個問題。在盲注中會用到一些笛卡爾積的形式調數據表數據量的問題。這個地方其實表中的數據量是很大的,所以說這個地方就是跟數據量會有一個關係,然後也可能跟後面的也會有一定的關係,要不然也不用這個橫豎了。
在這裏插入圖片描述
我們再繼續向下看,

在這裏插入圖片描述
它這個地方就是010101001,是這樣子,我第二次再執行一次。0011,這兩次的執行結果是不一樣的,你首先明白這個問題,然後第二另外一條語句它是加了一個0。

像這地方可以看一下,如果說0選中之後,去看這個序列,它是01101100的,即前幾位,我們再去做一個01101100。所以說他的前幾位序列是一致的,而且你要明白一個點,就是說剛纔我們去看它產生報錯的原因,是不是一條數據不報錯,然後調出兩條數據開始報錯,三條數據也可能報錯。它報出的前提條件就是前面幾條數據有就可以了,但到底需要幾條數據,這個地方我們要進一步去看。那麼所以說他肯定和序列是有關係的,因爲像這種不加零的情況下,它是隨機報錯,就是兩條數據,三條數據隨機報錯,但是加0必然報錯。

這個地方我們來看下演示。

(在這裏我做一個演示,如果大家想看可以到安全牛課堂的視頻裏看動手操作 CTF從入門到提升 課時2:21分26秒)
在這裏插入圖片描述

如果是不加零的話,我們可以是驗證一下我的說法。

(在這裏我做一個演示,如果大家想看可以到安全牛課堂的視頻裏看動手操作 CTF從入門到提升 課時2:23分40秒)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

group,by的話它key這一列它其實必然是唯一的,不能出現重複,那麼這個時候它就不符合表的一個結構問題,它自然就會報錯了。就是這樣的一個邏輯,可以看一下。
在這裏插入圖片描述

首先它會去建立一個虛擬表,就是我剛纔演示的演示的一個表,組件就是像這個地方一樣的,就像這個地方那樣列明,然後這個是它數量:

在這裏插入圖片描述
發現第一條結果爲零,查詢虛擬表0不存在,它要做一次插入。插入的時候,本質其實是第二次調用,第二次調用就會在被計算一次,那麼這時候插入的其實就是一個E那麼插入了一週,接下來又是個E0110和幺序列,就這個序列對吧?那麼又正常一的數量上去加一就是結果就是K等於1,它的那麼就是數量事兒,對吧?然後接下來又是個零011,就會重複上一次的操作,查到的是零,它又想插個1,1是存在的,所以就會報錯了。

在這裏插入圖片描述
去做一個插入,本質是第二次計算,第二次計算它就會超的一個實際值,然後第三次計算又是一個查詢,查詢之後又會做一個插入,那麼如果它出現報錯,其實只要是插入的值兩次是一致的,它就會報錯,所以說在你只有表中只有兩條數據的時候,如果是隨機數,那它就有可能去報錯,因爲你兩次超過值都是一樣的。產生一個序列是一個0101,假設就是個去掉,查到一個0插入個1,而且它查到又是個0,又查個1,這時候就直接報錯了。但是其實它查的數據只有兩行,這個就是數據量少的時候報錯的原因。

我們再仔細來看一下這個語句這條數據。
在這裏插入圖片描述

它報錯的關鍵點其實是在於這個裏面的這條數據,假如在於這條數據,我們可以把它複製出來看一下。
在這裏插入圖片描述

不一定要用0和1來代,只是爲了方便大家理解。

除了這個報錯函數之外,還有很多的其他的報錯函數可以再去看一下,因爲格式不符自然就要報錯。
在這裏插入圖片描述

像這個函數可以看一下,它的報錯,其實就是有侷限性。
在這裏插入圖片描述

(在這裏我做一個演示,如果大家想看可以到安全牛課堂的視頻裏看動手操作 CTF從入門到提升 課時2:41分27秒)

這包括函數的基本原理就是這些。接下來的話我們去看一個題目,這是來自於實驗題目。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
以上動手演示可見:CTF從入門到提升

課程地址:https://www.aqniukt.com/my/course/8954​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章