LeaveRet JFF Season3 pwnable vaja

크리에이티브 커먼즈 라이선스
Creative Commons License

[문제 개요]

emulated된 환경안에서의 custom opcode gadget을 활용한 ROP 혹은 메모리 R/W 미 검증을 이용해 vm escape해 공격할 수 있는 문제

virtual machine 바이너리와 해당 machine에서 돌아가는 바이너리가 각각 주어진다

vaja = virtual machine

target = virtual binary


에뮬레이터, 바이너리 제작 스크립트

vaja_source.zip



바이너리 제작스크립트에선 vajacode와 vajadata가 필요한데

vajadata는 그냥 수동으로 제작해줬고

vajacode는 

asmcode.txt

vaja_asm_to_machine.py

위 asmcode.txt를 작성하고 vaja_asm_to_machine.py를 실행하면 만들어준다

실행한후에 machinecode를 가져다가 서버에서 vajacode를 열어 데이터를 집어넣어주고

vaja_source.py에 있는 make_vaja.py를 실행하면 target바이너리가 생성된다


문제를 제작하면서 검수할땐 어셈블러에서 주소를 출력해주기 때문에

바로 ROP 가젯을 이용해 ROP를 했는데

실제로 문제를 풀땐 opcode의 구조를 분석해 디스어셈블러를 직접 만들어서 풀어야 하는 문제였다

이 과정이 최소 3시간은 걸리지 않을까 싶어서 빠르면 다섯시간안에 문제가 풀리겠다고 생각하고 있었는데

정원이랑 PPP에서 2시간만에 풀어서 소름돋았다

정원이한테 물어보니 의도치 않은 쉬운풀이가 아니라 정석대로 생각한대로 풀었는데도

소오오오르으으음;;;;


아인슈타인 사진에 대해 얘기를 하자면

가상화 문제를 풀때 pintool같은걸 이용해서 인스트럭션핸들러가 호출될때 실행되는 opcode를 로깅해서 푸는경우가 있는데

아인슈타인사진은 무려 2294바이트가 되고

루프 코드에 4개의 opcode가 있기 때문에

약 9000개의 무의미한 opcode가 로깅되게 된다

아인슈타인 사진은 pintool을 사용하지 않고 디스어셈블러를 직접 만드는 방향으로 유도하기 위해 삽입했다


vm escape가 가능한건 맞는거같은데 익스짜보기가 무서워서

일부러 만들어둔 pop r4~r1, fp, ret 가젯과 syscall;ret 가젯을 이용해 풀었다

exploit.py




카이스트 곤 팀으로 푸신 은수형과 형석형께 물어보니 곤도 디스어셈블러까지 다 짜는데는 2시간걸렸다고 한다

디스어셈블러만 다짜면 익스플로잇은 5분내로 되는거라 그냥 차라리 플래그이름을 예상하기 힘들게해 vm escape로 유도할걸 그랬다

이문제가 쉬운이유는 플래그이름이 flag이기 때문이다 ( 익스플로잇 참고 )

신고

'해킹공부 > 캡쳐더플래그' 카테고리의 다른 글

HITCON 2015 matrix  (0) 2015.10.23
WhiteHat Contest 2015 cd80  (6) 2015.10.12
LeaveRet JFF Season3 pwnable vaja  (1) 2015.07.26
Codegate2015 junior writeup  (5) 2015.03.16
pCTF 2013 pork  (3) 2014.08.18
ebCTF2013 pwn200 Frainbuck Interderper  (3) 2014.06.20

설정

트랙백

댓글


티스토리 툴바