# ångstromCTF 2023 WRITEUP --- ###### tags: `CTF` `Writeup` ## 1. Celeste Speedrunning Association ![](https://i.imgur.com/GsUwq4L.png) - Đề bài bảo ta rằng chơi speedrun ở `/play`, nên em đã thử chơi và đưa trang web này vào BurpSuite - Thứ em để ý là 2 tab này: ![](https://i.imgur.com/4EE81EA.png) ![](https://i.imgur.com/S5njYS6.png) - Trang web đã cấp phát 1 giá trị **start** sau đó gửi đi trong tab POST, nên giá trị này là mấu chốt của vấn đề - Em nghi ngờ đây là giá trị time stamp, khi mình gửi thằng này lên, nó sẽ lấy 1 giá trị gốc của server trừ đi giá trị start này, nên em suy luận là chỉ cần thời gian start này lớn là được, khi đó trừ đi sẽ được giá trị âm, từ đó phá kỷ lục speedrun: ![](https://i.imgur.com/2l0iIim.png) - Chỉ cần thêm số 1 là em đã có được flag: **actf{wait_until_farewell_speedrun}** ## 2. Celeste Tunneling Association ![](https://i.imgur.com/rHWr56W.png) - Challenge đồng thời đưa cho em file source code: ```python!= # run via `uvicorn app:app --port 6000` import os SECRET_SITE = b"flag.local" FLAG = os.environ['FLAG'] async def app(scope, receive, send): assert scope['type'] == 'http' headers = scope['headers'] await send({ 'type': 'http.response.start', 'status': 200, 'headers': [ [b'content-type', b'text/plain'], ], }) # IDK malformed requests or something num_hosts = 0 for name, value in headers: if name == b"host": num_hosts += 1 if num_hosts == 1: for name, value in headers: if name == b"host" and value == SECRET_SITE: await send({ 'type': 'http.response.body', 'body': FLAG.encode(), }) return await send({ 'type': 'http.response.body', 'body': b'Welcome to the _tunnel_. Watch your step!!', }) ``` - Nôm na thì đoạn code này cho ta biết cách thức để tạo 1 header, đồng thời cách để hiện ra được flag, đó là nó sẽ check giá trị host bằng cách tìm name nào bằng `host`, nếu số lượng host bằng 1 thì check xem value có giống với SECRET_SITE không, giống thì hiện ra flag - Ở trong header ta có đã có tên Host, còn giá trị của Host đang là **pioneer.tailec718.ts.net** ![](https://i.imgur.com/UKl8GZa.png) - Giờ ta chỉ cần chuyển giá trị của host này về cùng giá trị của SECRET_SITE, mà cụ thể ở đây là `SECRET_SITE = b"flag.local"`, em thay đổi giá trị của host là flag.local, và flag đã hiện ra: ![](https://i.imgur.com/R4Xcty1.png) - Flag của challenge là: **actf{reaching_the_core__chapter_8}**