Unexploitable (pwnable.tw 500) – Code War là một kỉ niệm buồn

Code War kết thúc, đã tới lúc phải trở lại với cuộc sống bình thường, bớt ảo tưởng, bớt mơ về những cái vốn nó không phải là của mình.
18120257_619477578250031_1863298449_o
Một noober đáng thương 😥
18110325_619477678250021_292883367_o
Bài này được coi như là note của mình về một kĩ thuật pwn mới. Và nếu có ai đọc được thì cũng chỉ là hint thôi.
Ở đây mình lưu ý những điều quan trọng sau đây:
– Control được eax và gọi được syscall sẽ là có tất cả (ebp mình sẽ không nói, vì đương nhiên chả có chương trình lỗi bof nào lại không control được ebp cả) vì SROP ( thay vì mình syscall exec thì mình syscall signal return ) rất vi diệu.
– sau khi read, số kí tự read sẽ trả về eax -> Control eax.
– Đè GOT (Global Object Table) 1,2,… bytes là một kĩ thuật rất hay nhưng không được sendline vì sendline sẽ có thêm “\n” làm mục đích mình bị thay đổi khá nhiều.

Sau đây là ý tưởng exploit:
Bước 1: ROP lần 1, để read 1 đoạn fakestack vào BSS, ebp mang giá trị fakestack cộng 8 ( debug để căn ebp cho chuẩn ).
Bước 2: Read vào BSS đoạn fakestack và đương nhiên phải control ebp để tí sài tiếp.
Bước 3: Read sigframe vào một nơi nào đó ta có thể control được, đủ quyền execute. Sigframe sẽ có dạng như thế này.

sigframe = p64(read_plt) + p64(0x0)
sigframe += (p64(0x0) * 2) * 6
sigframe += p64(bsh) + p64(0x0)       # rdi rsi
sigframe += p64(0x601040) + p64(0x0)  # rbp rbx
sigframe += p64(0x0) + p64(0x3b)      # rdx rax
sigframe += p64(0x0) + p64(0x601040)  # rcx rsp
sigframe += p64(read_plt) + p64(0x0)  # rip eflags
sigframe += p64(0x33) + p64(0x0)      # cs  err

Bước 4: Đè got 1 byte để read sẽ biến thành syscall, đồng thời ROP về return to sys_rt_sigreturn
Bước 5: Execute sys_rt_sigreturn bằng cách read 13 byte để frame thanh ghi quay về mô hình của mình
Ok vậy là xong, code thì mình sẽ không share để cho các bạn trải nghiệm, vì trải nghiệm mới thấy được điều kì diệu.

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s