This page looks best with JavaScript enabled

matesCTF notebook

 ·  ☕ 2 min read

Notebook

Exploit

Bài này mình pwn được sau khi được tiền bối Đào Xuân Nghĩa thông não sau giờ.

Đây là 1 bài Heap overflow.

checksec:

[*] '/root/matesctf/notebook'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

Có 2 loại note (bình thường: 1000bytes. Lớn: 2000bytes)

Các notes được lưu ở dạng double linked-list. 16 bytes đầu của mỗi note sẽ lưu note tiếp theo(FD) và note trước (BK)

Goal

Overwrite FD và BK để nó trỏ về GOT của _IO_getc. Sau đó dùng chức năng Edit để ghi vị trí của canyourunme vào

Bug

Lỗi logic nghiêm trong ở phần Edit.

Đối với note bé, ta sẽ có (1000-16)=984 bytes cho dữ liệu, tuy nhiên, ta lại được EDIT những 992 bytes.

=> Tức là đã tràn 8 bytes để có thể edit cái size của note tiếp theo

Exploit

Như vậy là ta có thể áp dụng kĩ thuật overlapping chunks

Mình sẽ edit size của 1 note thành tổng của nó và cái tiếp theo rồi free.
Như vậy, ptmalloc2 sẽ bị lừa rằng là nó sẽ có 1 khoảng trống gấp đôi ở đó và sẽ allocate Big note vào đó.

Trên thực tế, cái note sau vẫn được chương trình coi như bình thường

=> Ta sẽ tạo 1 cái Big note ở đó rồi đè lên FD và BK bằng vị trí của GOT _IO_getc - 16

Khi đi qua cái note đó, thì dù Back hay Next đều khiến cho chương trình coi GOT là 1 cái note và tức là ta có thể edit tuỳ ý.

Edit nó bằng vị trí của canyourunme là ta có shell.

Như thường lệ, cat flag sẽ cho chúng ta flag.

Reference

Đào Trọng Nghĩa

how2heap

Share on

Nguyen Hoang Trung
WRITTEN BY
Nguyen Hoang Trung
Hobbyist Security Researcher