SlideShare a Scribd company logo
RTOOOS
문제 설명
문제 컨셉트
• OSX Exploit
• Pseudo-Hypervisor
주어진 것
바이너리 파일 (crux) – kernel
rtooos.quals2019.oooverflow.io 5000
문제 바이너리 분석
문제의 흐름
문제의 흐름
• 사용가능한 명령어
• cat
• ls
• id
• help
• export
• env
• exit
문제의 흐름 (ls)
• ls 명령어를 통해 존재하는 파일
을 확인할 수 있음
• honcho라는 바이너리를 뽑아야
되는 것으로 보임
문제의 흐름 (cat)
• honcho를 cat 하면 커널에서 블락되었
다고 나온다.
• crux 파일을 분석하면 honcho 문자열을 막음.
문제의 흐름 (cat)
• flag파일은 하이퍼바이저에서 막는
다고 알려줌.
• 하이퍼바이저 바이너리(honcho)가 없기 때문에 확인 불가.
문제의 흐름 (cat)
• crux kernel이 하이퍼바이저 아래에서 실행되고 있는 형태
• 즉 honcho가 하이퍼바이저 느낌
시나리오
honcho
(Hypervisor)
crux
(kernel)
시나리오
honcho
(Hypervisor)
crux
(kernel)
crux guest code execution (LPE)를
통해 honcho 바이너리 추출
시나리오
honcho
(Hypervisor)
crux
(kernel)
VM(Hypervisor) Escape를
통해 Flag 파일 읽기
FLAG
문제의 흐름 (crux)
• CS가 0이라 가정
• 코드가 RWX일 것이라 가정
문제의 흐름 (crux)
• 이러한 명령어들이 있음.
• 단순한 switch/case 구조
문제의 흐름 (crux)
• 입력 값을 저장하고 출력하는 부분은 `export` 기능을 통해
환경변수 작성 밖에 없었음.
• 이 부분을 유심히 분석
문제의 흐름 (crux)
• alloc 함수
• 할당하고자 하는 사이즈가
남아있는 사이즈보다 크면
0을 반환
문제의 흐름 (crux)
문제의 흐름 (crux)
• 8번째 export를 할 때 죽음
• 0페이지에 값이 할당되어 코드가 바뀐 것으로 가정
문제의 흐름 (crux)
• 8번째 할당 때
• export a=payload 를 해주니 무한루프 걸림 (가정이 맞음) -- 오예
문제의 흐름 (crux)
• honcho 바이너리 추출
• 하이퍼바이저 콜을 통해 바이너리 뽑아냄.
• (**특이하게도 vmcall 대신** in / out instructions)
문제의 흐름 (honcho)
• Mach-O 64bit 파일
문제의 흐름 (honcho)
• 예상과 동일하게 flag 파일을
못 읽게 막음
문제의 흐름 (honcho)
• 'c’, ‘d’ 명령어를 수행하는 과정에서
boundary check가 존재하지 않음.
• OOB r/w 취약점
문제의 흐름 (honcho)
• OSX의 경우 큰 사이즈를 valloc 이미지 베이스 기준 + X(고정)
주소에 할당됨 (디버깅 해보니 그럼)
풀이
• __la_symbol_ptr 영역에서 library 주소를 알아낼 수 있음.
• ELF GOT
풀이
• __la_symbol_ptr 영역에서 puts를 system으로 덮어서
puts(“/bin/sh”);
풀이 (Exploit)
• system function address를 계산해서 call 하면 됨 system(“/bin/sh”);
풀이 (Exploit)

More Related Content

More from Theori

[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000
Theori
 
[OpenTRS-001] Vitor
[OpenTRS-001] Vitor[OpenTRS-001] Vitor
[OpenTRS-001] Vitor
Theori
 
[OpenTRS-001] Keynote
[OpenTRS-001] Keynote[OpenTRS-001] Keynote
[OpenTRS-001] Keynote
Theori
 
[OpenTRS-001] LCARS022
[OpenTRS-001] LCARS022[OpenTRS-001] LCARS022
[OpenTRS-001] LCARS022
Theori
 
[OpenTRS-001] election_coin
[OpenTRS-001] election_coin[OpenTRS-001] election_coin
[OpenTRS-001] election_coin
Theori
 
[OpenTRS-001] ooops
[OpenTRS-001] ooops[OpenTRS-001] ooops
[OpenTRS-001] ooops
Theori
 
[OpenTRS-001] ASRybaB
[OpenTRS-001] ASRybaB[OpenTRS-001] ASRybaB
[OpenTRS-001] ASRybaB
Theori
 

More from Theori (7)

[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000[OpenTRS-001] LCARS000
[OpenTRS-001] LCARS000
 
[OpenTRS-001] Vitor
[OpenTRS-001] Vitor[OpenTRS-001] Vitor
[OpenTRS-001] Vitor
 
[OpenTRS-001] Keynote
[OpenTRS-001] Keynote[OpenTRS-001] Keynote
[OpenTRS-001] Keynote
 
[OpenTRS-001] LCARS022
[OpenTRS-001] LCARS022[OpenTRS-001] LCARS022
[OpenTRS-001] LCARS022
 
[OpenTRS-001] election_coin
[OpenTRS-001] election_coin[OpenTRS-001] election_coin
[OpenTRS-001] election_coin
 
[OpenTRS-001] ooops
[OpenTRS-001] ooops[OpenTRS-001] ooops
[OpenTRS-001] ooops
 
[OpenTRS-001] ASRybaB
[OpenTRS-001] ASRybaB[OpenTRS-001] ASRybaB
[OpenTRS-001] ASRybaB
 

[OpenTRS-001] RTOoOS