bp靶場業務邏輯漏洞

积分别忘C發表於2024-10-20

修改商品價格

目標是修改價格後低價買下這件夾克,再home這個頁面的第一個商品就是
img

點選Add to cart,抓包,發現price的值可以該,改成000發現不行,0.00也不行,改成10後發現購物車裡面有了一件0.1美元的夾克,我們有100美元,直接買,通關.後來我再試了一次,看看這個改價格的機制是什麼,我把
price的值改成700,裡面就多了一件7美元的夾克,但是改成000也不能0美元買啊,覺得這個邏輯應該不允許價格為0,其他都可以

img

img
解決,下一關

高階版修改商品價格

還是買那個夾克,但是這次抓包沒有顯示價格了

img

Quantity是商品數量,改成0後就是購物車變空,但是改成-1後,購物車多了個數量為-1的jacket,點選下單,報錯Cart total price cannot be less than zero購物車總價不能小於零

img

這時候,先把jacket數量改回1,我們看看其他商品,比如Snow Delivered To Your Door,單價30.31美元,如果抓包把購買數量改成-44,1337-44*30.31=3.36,我們就可以買下。

img

事實證明可以這樣,ok

Inconsistent security controls

該實驗室的邏輯缺陷允許任意使用者訪問本應僅對公司員工可用的管理功能。要解決實驗室問題,請訪問管理皮膚並刪除使用者carlos

進去後它給了我們一個郵箱attacker@exploit-0ab500ae0367983780d2b12701650029.exploit-server.net

Displaying all emails @exploit-0ab500ae0367983780d2b12701650029.exploit-server.net and all subdomains

img

然後還有一個exp伺服器,可以檢視訪問https://exploit-0ab500ae0367983780d2b12701650029.exploit-server.net/及其子目錄的日誌

img

隨便註冊賬號,返回Emailclient看資訊,點選資訊裡面的連結完成註冊

訪問主頁admin子目錄,發現訪問不了
img

之前註冊頁面提示我們,如果我們為dont什麼什麼的工作,請使用@dontwannacry電子郵件地址,我們把郵箱地址改一改

img

然後發現可以訪問/admin目錄了

img

刪除carlos即可

Flawed enforcement of business rules

This lab has a logic flaw in its purchasing workflow. To solve the lab, exploit this flaw to buy a "Lightweight l33t leather jacket".
這個實驗室的採購流程存在邏輯缺陷。為了解決實驗室,利用這個缺陷購買“輕量級l33t皮夾克”。

You can log in to your own account using the following credentials: wiener:peter
您可以使用以下憑據登入到自己的帳戶:wiener:peter

登入進去,主頁底部多了個訂閱什麼什麼的

img

隨便搞個郵箱訂閱,返回彈窗

img

已知頂部有個提示,說新使用者有優惠卷NEWCUST5

img

都apply上,發現還是很貴

img

但是試了一下,可以反覆使用優惠卷,但是不能連續新增兩個同樣優惠卷,所以兩張優惠卷交替新增,直到夠錢

img

然後買了即可。

Low-level logic flaw

這關登入後照樣抓包新增購物車的頁面,修改商品個數的地方發現最大隻能填99,100會提示引數無效

img

我們就拿商品個數為99的資料包去一直爆破,我發了1000多個包,發現總價變成負數了。那看看能不能變成0呢

img

我把商品刪除,重新爆破,換成300、200等請求次數,價格都是負的,但是100的時候是正的,所以應該把範圍縮小到100--200,但是好像也不得啊。
後來我發現196個的時候價格是負數,然後一個一個增加商品數量,負數絕對值是在減小的,如果一直點選可以減到0,看來這個邏輯是價格會隨商品數量增加呈現週期性變化。這題參考這位大佬的吧,原理是整數溢位,理解起來倒是簡單,但是我數學不好,推理不出,反正就是把價格搞到一個負數再用其他商品湊成正數就得了。(參考這個大佬做的https://www.freebuf.com/articles/web/404230.html)

折磨了很久,終於搞得了,老是把控不住爆破次數。。。。

img

img

Inconsistent handling of exceptional input

這關輸入一個比較長的郵箱註冊但是字尾是@exploit-0a37004b040c7a0b8166b0330198001d.exploit-server.net

發現展示資訊的地方net不見了,看來展示郵箱的資訊有長度限制,計算出是255

img

於是可以用截斷的方法使得郵箱字尾是@dontwannacry.com

a='q'*238
print(a+"@dontwannacry.com")
print(len(a+"@dontwannacry.com"))

# qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq@dontwannacry.com

因為他說Displaying all emails @exploit-0a37004b040c7a0b8166b0330198001d.exploit-server.net and all subdomains
顯示所有電子郵件 @exploit-0a37004b040c7a0b8166b0330198001d.exploit-server.net 和所有子域
所以可以用下面的來註冊
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq@dontwannacry.com.exploit-0a37004b040c7a0b8166b0330198001d.exploit-server.net

img

顯示我們郵箱是@dontwannacry.com字尾的了,可以進管理介面刪除了

img

Weak isolation on dual-use endpoint

註冊後更改密碼抓包,刪除current密碼欄位,把使用者名稱改成administrator即可,然後登入管理員賬號操作就得了

img

img

img

Insufficient workflow validation

本實驗對採購工作流程中的事件順序做出了錯誤的假設。為了解決實驗室,利用這個缺陷購買“輕量級l33t皮夾克”。

這靶場告訴我們如果不能直接買的話,就藉助其他商品發現漏洞。
比如說買Conversation Controlling Lemon

點選place order 抓包,發現會請求/cart/checkout,這請求又會跳轉到
/cart/order-confirmation?order-confirmed=true

img

現在新增Lightweight "l33t" Leather Jacket進購物車,點選購買後抓包

POST /cart/checkout HTTP/2
Host: 0a4a00300374c0a182034cba006a00a7.web-security-academy.net
Cookie: session=LZdKsAqShz7CF87VdKovbJOYVVa7paMA
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 37
Origin: https://0a4a00300374c0a182034cba006a00a7.web-security-academy.net
Referer: https://0a4a00300374c0a182034cba006a00a7.web-security-academy.net/cart
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers

csrf=6aqT97TN07TzLTmeOvOnjhpzW5p9m7hV

資料包的/cart/checkout直接改成/cart/order-confirmation?order-confirmed=true,方法改成GET

img

Authentication bypass via flawed state machine

登入後有個角色選擇器,抓包改角色是管理員,發現沒用。。。

img

img

那就放掉跳到選角色頁面的包,直接請求home頁面(根目錄)

img
(把上面那個role-selector刪掉)

發現直接變管理員了。。。

img

Infinite money logic flaw

又是訂閱,直接輸入自己郵箱訂閱

img

獲得SIGNUP30

賬號介面有禮品卡兌換功能,主頁有個禮品卡商品

img

用折扣卡購買禮品卡後獲得兌換碼,兌換後得到錢,100美元變成103美元了。再次回到home,輸入郵箱可以再次獲得優惠卷,這次買九張禮品卡
9eSIAmrcla
JA5ibMJAgf
6hG3KX7SSs
A7qoMKWCxB
mHZflE7iKl
SqknMhuZbF
KfJm7XsjB4
VSAlofyi0u
qz6mEQlwzO
然後現在我們有了更多錢,所以繼續去獲得優惠卷然後用全部錢買禮品卡,刷錢就是了。不過手動太耗時間了,我看了其他大佬的操作,自己試了一下,而且那位大佬漏講了一些東西,我就詳細說明過程吧。

先把bp請求歷史清空,然後去home主頁點進禮物卡頁面,新增禮物卡,回到購物車使用優惠卷買一張禮物卡,然後去賬號頁面兌換成錢。

這時候在bp的proxy-->proxy settings-->左側選擇session-->找到macro(中文版叫宏),我們點選新增.

img

然後按住ctrl選擇五條記錄分別是

POST /cart
POST /cart/coupon
POST /cart/checkout
GET /cart/order-confirmation?order-confirmed=true 
POST /gift-card 

img

然後確認,之後選擇我們新增的宏(macro),點選編輯(edit)

img

選擇第四條記錄,然後點專案設定

img

設定介面右下角點選新增(add).然後選擇響應的HTML資料中Code下面的第一條兌換碼,引數名稱寫gift-card,確定新增.

img

最後選擇第五條記錄的專案設定,引數處理的地方,找到gift-card,右邊選擇Derive from prior response,然後選擇響應4.

img

確定後,宏編輯器右下角選擇測試宏.

img測試宏

透過狀態碼判斷測試結果,如果成功,重新整理賬號頁面會發現自己的錢增加了.

回到設定介面的session介面,最上面那個Session handling rules點選新增,找到rules actions點選新增,選擇run macro(執行宏),選擇剛剛我們新增的宏,確認

img

回到規則編輯器,點選範圍(scape),在url scope
中,使用自定義範圍,新增下面6條url

https://xxxxxxx.web-security-academy.net/cart
https://xxxxxxx.web-security-academy.net/cart/coupon
https://xxxxxxx.web-security-academy.net/cart/checkout
https://xxxxxxx.web-security-academy.net/cart/order-confirmation?order-confirmed=true
https://xxxxxxx.web-security-academy.net/cart
https://xxxxxxx.web-security-academy.net/gift-card
https://xxxxxxx.web-security-academy.net/my-account

接下來訪問https://xxxxxxx.web-security-academy.net/my-account抓包,把這包發到intruder.選none payload,400多個payload數量應該夠了

在代理的http歷史記錄中找到請求/my-account這條記錄右鍵新增到範圍

img

(scope),然後建立單執行緒資源池爆破(不然錢可能不會增加),怎麼搞單執行緒爆破網上應該很多教的了.

最後說幾個坑的地方,就是做這關動作要快點因為lab給的cookie是有過期時間的,超時得重新進入實驗室重新登入,cookie會變lab的url也會變,之前配置的那些宏啊規則都要做相應修改,第一次我就是太慢了沒搞得(😡)

反正錢夠了之後買jacket就得了

img

Authentication bypass via encryption oracle

此實驗包含一個邏輯缺陷,該缺陷會向使用者暴露加密oracle。要解決此問題,請利用此漏洞訪問管理皮膚並刪除使用者carlos。
勾選Stay logged in登入後修改郵箱,但是郵箱格式要輸入一個錯誤的,然後抓包修改郵箱的請求,這裡主要是兩個資料包

img

img

第二個資料包發到重放器,傳送檢視響應

img

發現響應包裡面有這個東西

<header class="notification-header">
    Invalid email address: 1111
</header>

之前cookie裡面有notification欄位,推測那個header是解碼該欄位後的內容,我們把cookie中stay-logged-in欄位的值替換notification欄位的值,再次發包,發現剛剛那個header變成了

<header class="notification-header">
wiener:1729329448766
</header>

推測是正確的,並且知道stay-logged-in的值是使用者名稱加時間戳,而經過實驗發現時間戳再一次登入後不會變,所以我們可以偽造管理員的cookie來替換身份。

在更改郵箱處寫administrator:1729330294196(因為中途斷網了重新登入了一次時間戳變了,各位寫自己當時的時間戳就行),點選更改後抓包,notification的值應該就是加密的administrator:1729330294196,我們在請求my-account頁面的資料包把這個加密的值替換掉stay-logged-in的值,然後發包,發現還是普通使用者

img

看響應包對應header位置,變成

<header class="notification-header">
   Invalid email address: administrator:1729330294196 </header>

應該是notification欄位會給非法格式郵箱加字首Invalid email address: 後編碼,所以我們把該欄位的值先發到decoder模組,url解碼,然後base64解碼,刪除前23個位元組(“Invalid email address: ”長度是23)

img

刪掉後再次base64編碼,再url編碼,把新值給到notification欄位

img

img

報錯說輸入長度必須的16的倍數。
因此要對email輸入進行9字元填充,輸入xxxxxxxxxadministrator:1729330294196,然後再次抓包,把notification的值發到decoder,url解碼,base64解碼,刪掉前32個位元組,再base64編碼,再url編碼替換Cookie的notification欄位的值。

img

img

可以看到Invalid email address: 不見了,說明這次構造的編碼是對的,用這個base64編碼替換cookie的stay-logged-in值。
在瀏覽器f12,點選儲存,改掉stay-logged-in的值,再把session欄位右鍵刪掉(不然無效)。

img

訪問admin頁面成功

img

Bypassing access controls using email address parsing discrepancies

If you work for GinAndJuice, please use your @ginandjuice.shop email address

這關目前對我來說太難了,網上也找不到其他人的解答。。。放著先吧

相關文章