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ự ../

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

Segment Fault

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