[kerference] defcon ctf 풀어보기 - 박상석(kert)

45
DEFCON CTF 풀어보기 KERT 박상석 [email protected]

Upload: naver-d2

Post on 07-Jan-2017

1.658 views

Category:

Engineering


0 download

TRANSCRIPT

DEFCON CTF 풀어보기

KERT 박상석

[email protected]

목차

1. 해킹 관련 용어 설명

2. DEFCON CTF

3. DEFCON CTF(BABY-RE) 나의 풀이

4. DEFCON CTF(BABY-RE) 남의 풀이

1. 해킹 관련 용어 설명

• 취약점(Vulnerability)

- 이용하여 권한을 호기득할 수 있는 소프트웨어적인 버그

• 공격코드(Exploit)

- 취약점을 공격할 수 있는 코드

• 개념 증명 코드(PoC Code)

- 취약점을 증명할 수 있는 코드

• 시스템 소유(System Pwned)

- 취약점을 이용하여 해당 시스템을 점유하였을 때 사용하는 표현

1. 해킹 관련 용어 설명

• CVE : Common Vulnerabilities and Exposures

- 취약점에 대한 정보를 모아놓은 List-up

- 취약점 공개(Vulnerability Disclosure)

• Software Bug Hunting

- 소프트웨어 취약점을 특정 이득을 위해 찾아내는 행위(Pwn2Own)

- 소프트웨어 결함, 체계 설계상 허점을 고의적으로 찾아내 금전적 이득, 테러 예방, 해커 명석획득 등의 특정 이득을 노리는 일련의 행위

1. 해킹 관련 용어 설명

• CTF(Capture the Flag)

- 사이버 인프라 구조를 방어하고

- 동시에 상대의 공격을 득점하는 모의 사이버 대회

- “깃발을 잡아라”라는 뜻의 대회명

• CTB(Capture the Bug)

- 취약점을 공격할 수 있는 코드

2. DEFCON CTF

2. DEFCON CTF

2. DEFCON CTF

2. DEFCON CTF

2. DEFCON CTF

2. DEFCON CTF

• GIT 을 이용해서 가져온다.

2. DEFCON CTF

2. DEFCON CTF

• baby-re는 RE 챌린지 파일이다, 이것은 선형함수에 대한 기본 셋이 들어가있다. 그 챌린지는 coefficients를 각 함수의 텀에 따라 내보낸다.

• 그 후 너는 수동으로 풀던가 인터넷 사이트에서 풀 수 있다. 그 모르는 함수는 플래그 바이트이다. 맞는 값을 넣으면 식에 대해서 체크하고 만약 맞으면플래그를 내보낸다. 선형 시스템의 사이즈는 플래그의 사이즈 이다.

• 플래그를 쉽게 만들기 위해 , 원하는 플래그 스트링을 세팅하고, baby-re.c를 출력하기위한 create-baby-re 실행할수 있는 것이 있다. 그 후babe-re.c로 아웃풋한뒤 런 메이크 시킨다.

• 안티 리버싱 바이트 기본이 들어가서 좀 힘들거다.

2. DEFCON CTF

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

• Baby-re

- 숫자 13개 넣으니 오류뜸.

- 13개가 옳게 드가면 플래그가 뜰거임

• create-baby-re

- 넣은 플래그에 맞춰서 baby-re 소스를 만든다.

3. DEFCON CTF(BABY-RE) 나의 풀이

• 시나리오

1. create-baby-re로 내가 넣은 abcd로 소스를 만든다.

2. Baby-re.c가 나온다. 그것을 컴파일해서 실행파일 생성

3. 그 실행파일 가지고 abcd하면 옳다.

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

• 시나리오

1. create-baby-re로 내가 넣은 abcd로 소스를 만든다.

2. Baby-re.c가 나온다. 그것을 컴파일해서 실행파일 생성

3. 그 실행파일 가지고 abcd하면 옳다.

4. 그러면 그 구조 소스오디팅&리버싱&분석

3. DEFCON CTF(BABY-RE) 나의 풀이

Var이라는 변수에 인풋을 받고

CheckSolution에 줘서 체크

3. DEFCON CTF(BABY-RE) 나의 풀이

Var변수가 변하는 지점 찾기

C변수에 자꾸 이상한 숫자 넣고연산해서 하드코딩해놓음

3. DEFCON CTF(BABY-RE) 나의 풀이

Var변수가 변하는 지점 찾기

Var 변수가 변하지 않고 if문으로linear system(방정식) 연산에이용됨

3. DEFCON CTF(BABY-RE) 나의 풀이

• 시나리오

1. create-baby-re로 내가 넣은 abcd로 소스를 만든다.

2. Baby-re.c가 나온다. 그것을 컴파일해서 실행파일 생성

3. 그 실행파일 가지고 abcd하면 옳다.

4. 그러면 그 구조 소스오디팅&리버싱&분석

5. C배열의 if문 체크루틴 바로 전의 값을 확인

6. 방정식을 풀어서 var[0]~var[3]을 구한다.

7. 그리고 푼다!

3. DEFCON CTF(BABY-RE) 나의 풀이

If문에서 곱 연산을 처음 실행하기때문에 그것만 따라가면서 찾아냄

$rbp-0x40에 c[0]값이 있다.

$rbp-0x48에 내가입력한var[0]값이 있다.

3. DEFCON CTF(BABY-RE) 나의 풀이

$rbp-0x40에 c[0]값이 있다.C[0] = 6731 ~~C[0]~c[15]까지 총 16개

이제 인자, 값 나왔으니 미지수만구하면 됨.

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

• 실제 주어진 문제를 풀어보자.

• 진짜 문제

- Var 배열 13개

- C 배열 0 ~ 168 : 169개

3. DEFCON CTF(BABY-RE) 나의 풀이

아까 같은 방식으로 값을 뽑아왔다.

하나씩 적기싫어서 복사해서 파싱하기로 함

3. DEFCON CTF(BABY-RE) 나의 풀이

방정식의 결과값도 != 뒤에 값이나온다는 규칙으로 파싱하기로 함

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

3. DEFCON CTF(BABY-RE) 나의 풀이

4. DEFCON CTF(BABY-RE) 남의 풀이

4. DEFCON CTF(BABY-RE) 남의 풀이

by smoke leet everyday

아이다로 뜯어봄

4. DEFCON CTF(BABY-RE) 남의 풀이

by smoke leet everyday

아이다로 뜸어봄그리고 디컴파일

4. DEFCON CTF(BABY-RE) 남의 풀이

by smoke leet everyday

아이다로 뜸어봄그리고 디컴파일Z3라는 이상한 모듈 사용

4. DEFCON CTF(BABY-RE) 남의 풀이

by ByteBandits

Hopper,angr사용나보다 코드 짧아보임

4. DEFCON CTF(BABY-RE) 남의 풀이

by SiBears

Mathematica라는 처음보는 유료API 사용

4. DEFCON CTF(BABY-RE) 남의 풀이

by duks

Hopper, ida decompile파이썬 Numpy 사용

4. DEFCON CTF(BABY-RE) 남의 풀이

by hack.carleton

Binary ninza 사용Angr(좋아보임) 사용

Reference

• http://www.slideshare.net/CodeEngn/2014-code-engn-conference-10

• https://github.com/legitbs/quals-2016

• https://ctftime.org/event/320

• http://equationsolver.intemodino.com/en/solve-systems-of-equations.html

• http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.solve.html

• https://ctftime.org/task/2402

Q&A