Writeup

Cảm nhận đầu tiên: Panic + đề hơi khoai so với dự tính trước khi em làm :))
Web01-flag1
Đây là chức năng chính của đoạn code
Trong route này nó đang cố lấy parameter segcret tại /freeflag nếu không nó sẽ trả về "Please...key!"
Vậy nên để query đến URL: /freeflag?segcret=xxx
Pass được điều kiện đầu tiên thì ta có thể bắt được session đó qua burp suite
Đây là khi ta truy cập thử thì thấy cookie có trường session = ...

Done:

Web01-flag3
Đây là chức năng của nó
Url này chỉ chấp nhận khi bạn request với method Post, vậy nên phải tương tác bằng burpsuite. Ở đây mình có hỏi GPT gen ra cho mình 1 đoạn payload nhỏ nhỏ tựa như Request trên BurpSuite

Send Request ta nhận được 1 meme với id là: a7858de1-3543-476e-b79b-b9cf0d818479


Trong file db.py, có 1 chức năng xử lí phần add_meme:
Đoạn c.execute xuất hiện vuln sqli. Trong đoạn code ta có thể control được title và filename như filename đã bị filter bởi các kí tự .. và /
Thì ta sẽ tập trung vào title:

Bây giờ mình sẽ vô hiệu hóa trường filename đằng sau và thêm trường filename từ title:

Done:

Pwn01
Bài này full protector nên mình phải tìm được điểm leak địa chỉ của chương trình:

Do chương trình hơi dài nên mình cũng cắt nhỏ từng phần như sau:
Đây là cấu trúc của Note
Cần chú ý nhất đó là hàm UpdateNote:
MAX_MESSAGE có giá trị là 200 nhưng tmp->owner chí chấp nhận tối đa 20 bytes. Ngoài ra buffer cũng chỉ chấp nhận 30 bytes
Để sử dụng được chức năng của hàm update_note(), bạn cần phải có trước ít nhất 1 note

Nếu bây giờ ta nối chuỗi đến: 0x555555559518 thì ta có thể leak được địa chỉ của

Để làm điều này ta cần 0x20 byte
Nếu view thì ta sẽ được địa chỉ đầu tiên, đó là Stack

Tiếp theo đến leak canary:
Stack Canary lằm tại ví trí: 0x7fffffffe0e8hơn vị trí stack leak: 312 + 1 (byte null)
Chú ý thì có thể tháy rằng
date đang là 1 con trỏ đến chuỗi Time và nằm gần cạnh chỗ mà ta tấn công buffer vào:
Tức ta có thể lợi dụng nguyên lí này để leak ra các giá trị bên trong địa chỉ:

Tiếp tục làm tương tự với địa chỉ của main:
Khi đã có đủ stack, canary, win rồi thì ta có thể sử dụng buffer overflow để hoàn thành nốt thử thách này.


Pwn02
Lỗi: Use-After-Free

Lí do là phần ptr sau không clear khi free:

Có 3 chức năng chính của pwn2 ảnh hưởng đến khai thác:
Và ta có win ở đây:
Attack map: Create --> Create (ngăn heap consolidate) --> Free --> Edit --> Win
Có thể thấy ta có thể edit bao nhiêu tùy thích và nó cũng sẽ malloc cho mình (có kiểm tra size nhưng không đáng kể) :>

Có thể thấy ta có thể ghi vào con trỏ của "header" của node thứ 1 (idx 0):


Done

Last updated