pwnable.tw

pwnable.tw > Starbound

March 13, 2026 Easy

pwnable.tw > criticalheap

Vuln: User được setenv() tuỳ ý.

tl;dr: Sử dụng strace; Đọc man page; localtime() có sử dụng đến env var "TZ".

March 10, 2026 Easy

pwnable.tw > Food Store

Vuln: Con trỏ next trỏ đến Recipe tiếp theo ko đc init khi tạo Recipe mới, có thể bị lợi dụng để trỏ về chunk đã free, dẫn đến UAF, tạo chunk overlap.

tl;dr: Không chỉ setup heap cho mục tiêu ngay trước mắt, mà cần tính toán cho các bước về sau; Heap spray, rồi lợi dụng alignment khi cấp phát để kiểm soát uninit data.

March 7, 2026 Hard

pwnable.tw > Break Out

Vuln: Không xoá reference sau khi free, gây UAF và chunk overlap; Không kiểm tra con trỏ next trỏ đến object hợp lệ trong linked list.

March 7, 2026 Easy

pwnable.tw > Ghost Party

Vuln: Vi phạm Rule Of Three trong C++ do thiếu copy constructor, gây double free sau khi pass by value; Gán raw pointer vào thành viên class, pointer được free ngay khi out of scope, gây UAF.

March 7, 2026 Hard

pwnable.tw > Bounty Program β

Vuln: Không kiểm tra NULL trước khi sử dụng strtok().

tl;dr: Bounty Program α

March 3, 2026 Hard

pwnable.tw > Bounty Program α

Vuln: Không kiểm tra NULL trước khi sử dụng strtok().

tl;dr: Hành vi nguy hiểm của strtok(NULL, delim); Hàm calloc() bỏ qua tcache; Env var có thể tác động đến hành vi của ptmalloc.

March 3, 2026 Hard

pwnable.tw > WannaHeap

tl;dr: Bớt map to another variable trong IDA lại :); Tìm gadgets hiệu quả hơn; Setcontext gadget để setup toàn bộ register.

March 1, 2026 Hard

pwnable.tw > unexploitable

February 28, 2026 Medium

pwnable.tw > Printable

tl;dr: Tận dụng địa chỉ ld còn sót trên stack; Ghi đè l_addr, để nhảy đến fini_array entry giả; printf() tự ghi đè return address của nó; printf() luôn thông qua bss của binary để tìm đến stdout; Dùng stderr thay cho stdout.

February 26, 2026 Hard

pwnable.tw > De-ASLR

tl;dr: Tận dụng địa chỉ libc, ld còn sót lại trên stack, phía dưới stack frame thì do tổ tiên caller, phía trên thì do callee; Bruteforce ASLR với xác suất; Exploit trên remote có thể cần nhiều lần chạy kể cả khi local chỉ cần 1 lần;

February 25, 2026 Hard

pwnable.tw > Re-alloc Revenge

Vuln: Chương trình không kiểm tra cẩn thận sau khi sử dụng realloc, cho phép kẻ tấn công thực hiện use-after-free.

tl;dr: Partially overwrite địa chỉ libc, cần bruteforce với xác suất thành công 1/16; Có thể gộp các chunk liền kề nhau trong fastbin và đặt vào unsortedbin bằng cách trigger malloc_consolidate().

February 24, 2026 Hard

pwnable.tw > MnO2

Vuln: Alphanumeric shellcode.

tl;dr: Tạo alphanumeric shellcode, sử dụng ModR/M byte.

February 23, 2026 Hard Puzzly

pwnable.tw > CAOV

Vuln: Chương trình C++ vi phạm cơ chế return by value của SYSV ABI, dẫn đến lời gọi destructor trên dữ liệu trên stack trước đó được attacker kiểm soát.

tl;dr: Cơ chế của sysv abi ở C++, trên C ko có cái này.

February 23, 2026 Medium

pwnable.tw > Heap Paradise

tl;dr: Chunk overlap, vừa trong unsortedbin, vừa trong fastbin; Partially overwrite ko cần leak libc; Ghi đè flags của stdout thành 0xfbad1800 và _IO_write_base để leak libc.

February 20, 2026 Medium

pwnable.tw > Kidding

tl;dr: Tương tác out-of-band; Mở socket để tạo reverse shell.

February 19, 2026 Medium Puzzly

pwnable.tw > BookWriter

Vuln: Off-by-one error cho phép attacker ghi out-of-bound vào kích thước của page, dẫn đến buffer overflow tuỳ ý trên heap khi chỉnh sửa page content.

February 19, 2026 Medium

pwnable.tw > Secret Of My Heart

Vuln: Chương trình đặt null byte sau input của user không cẩn thận, gây 1 null byte overflow, ghi đè vào size của chunk liền sau, attacker có thể gây chunks overlap từ đó.

tl;dr: Lại là 1 null byte overflow; Heap chunk consolidation, overlapping.

February 19, 2026 Medium

pwnable.tw > Secret Garden

tl;dr: Bớt giả định, nhìn xem dòng code đang thực sự làm gì; Ghi one gadget vào realloc hook, ghi realloc vào malloc hook; hoặc ghi one gadget vào malloc hook và double free để trigger malloc printerr.

February 19, 2026 Easy

pwnable.tw > BabyStack

Vuln: Chương trình kiểm tra mật khẩu không cẩn thận với hàm strncmp(), dẫn đến bị bruteforce bởi attacker. Chương trình copy dữ liệu với hàm strcpy() nhưng không kiểm tra kích thước buffer, dẫn đến stack buffer overflow.

tl;dr: Từ hàm này có thể gây overflow trên stack frame của hàm khác.

February 14, 2026 Easy

pwnable.tw > Spirited Away

Vuln: Chương trình sử dụng sprintf() cho ra chuỗi kết quả vượt quá kích thước buffer, gây buffer overflow ghi đè vào len, tiếp tục gây buffer overflow ở các buffer khác.

tl;dr: Buffer overflow rất tinh vi, check size buffer thật kỹ.

February 14, 2026 Easy

pwnable.tw > seethefile

Vuln: Hàm scanf() với format %s gây buffer overflow trên vùng bss dẫn đến ghi đè file pointer.

tl;dr: fclose() gọi đến _IO_SYSCLOSE() ở offset 0x44 của vtable nếu flags có 0x2000, finish() luôn đc gọi ko phụ thuộc flags; Kiểm soát RIP đến printf() để có fmb.

February 8, 2026 Easy

pwnable.tw > Tcache Tear

Vuln: Chương trình ép kiểu không cẩn thận từ int về unsigned, dẫn đến buffer overflow trên heap do có chênh lệch giữa kích thước cấp phát và kích thước thực tế được input.

February 8, 2026 Easy

pwnable.tw > Re-alloc

Vuln: Chương trình không kiểm tra cẩn thận sau khi sử dụng realloc, cho phép kẻ tấn công thực hiện use-after-free.

tl;dr: Hành vi của realloc() phụ thuộc nhiều vào tham số đc đưa vào.

February 7, 2026 Medium

pwnable.tw > applestore

Vuln: Chương trình giữ reference toàn cục đến biến cục bộ của hàm. Khi hàm khác được gọi, vị trí biến cục bộ bị overlapped, dẫn đến chương trình sử dụng input do attacker kiểm soát.

tl;dr: Cần check xem biến cục bộ nào trong stack bị lưu lại tham chiếu; Không giả định rằng chương trình sử dụng bao nhiêu data đc input vào thì mình chỉ nhập bấy nhiêu đó.

February 4, 2026 Medium

pwnable.tw > Silver Bullet

Vuln: Việc sử dụng strncat() không cẩn thận dẫn đến 1 null byte overflow ở cuối, ghi đè bộ đếm gây ra stack buffer overflow.

tl;dr: 1 null byte overflow cần để ý kỹ (sau khi user input); Stack pivot để đặt rbp vào nơi hợp lý và control RIP đến nơi tính toán địa chỉ dựa trên rbp.

February 3, 2026 Medium

pwnable.tw > hacknote

tl;dr: Đôi khi ko cần heap fengshui quá phức tạp; Cần để ý tham số cần truyền vào là gì, ko mặc định plt giống với hàm wrapper custom của chương trình.

February 2, 2026 Easy

pwnable.tw > dubblesort

Vuln: Chương trình không kiểm tra số lượng số được nhập vào, dẫn đến buffer overflow trên stack, kết hợp với việc stack canary bị bypass do hành vi của hàm scanf().

tl;dr: scanf() gặp input ko khớp với format thì sẽ bỏ qua buffer cần ghi; offset ở local và remote có thể khác nhau dù đã patch binary.

February 2, 2026 Easy

pwnable.tw > 3x17

tl;dr: Ghi đè fini_array; Break toàn bộ địa chỉ trong GOT entries.

January 31, 2026 Medium Puzzly

pwnable.tw > calc

Vuln: Chương trình tin rằng bộ đếm luôn nằm trong khoảng hợp lệ, tuy nhiên thực tế bộ đếm được cộng trừ bất kiểm soát, dẫn đến ghi out-of-bound.

January 31, 2026 Medium
There are 30 pages in this directory.