86
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010 0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011 ㈜타이거팀아카데미 0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010 0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011 | 정보보호 전문가(모의해킹) 과정| 시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)

[무료] 시스템해킹(해커스쿨문제풀이) 공개버전

  • Upload
    -

  • View
    5.215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011

㈜타이거팀아카데미

시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)

01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011

| 정보보호 전문가(모의해킹) 과정|

㈜타이거팀아카데미

시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)

Page 2: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011

Contents

I. 시스템 해킹

1. 해커스쿨 FTZ 1~20 문제 풀이

01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011

Page 3: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹0. 문제 개요

20문제 개요

문제 내용

1. Backdoor 찾기 11. Stack Buffer overflow

2. Editor Shell Command 12. Buffer Overflow(2)

3. system() 취약점 13. Stack Guard

4. Xineted 백도어 14. 루틴분기 (1)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

3

5. Race Condition 15. 루틴분기(2)

6. System Interrupt 16. Function Pointer (1)

7. CipherText 17. Function Pointer (2)

8. Linux Password Crack 18. Pointer

9. Stack Buffer Overflow 19. Setreuid Shellcode

10. Shared Memory read/write 20. Format String Buffer Overflow

Page 4: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹1. Backdoor 찾기

문제 분석

find 명령을 통해서

Setuid가 설정된 파일을 찾아 실행시키는 문제

시스템의 파일 퍼미션에 대해서 충분히 이해하고

시스템 기본 명령인 find 명령에 대해서 충분히

숙지하고 있는지 확인하는 문제

© 2015 TigerTeamAcademy, Inc. All rights reserved.

4

find 명령을 통해서

Setuid가 설정된 파일을 찾아 실행시키는 문제

시스템의 파일 퍼미션에 대해서 충분히 이해하고

시스템 기본 명령인 find 명령에 대해서 충분히

숙지하고 있는지 확인하는 문제

Page 5: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹1. Backdoor 찾기

명령 실행 및 이해

퍼미션 옵션으로 (SetUID) 설정 파일만 소유자 옵션 표준 에러 출력 null 처리

© 2015 TigerTeamAcademy, Inc. All rights reserved.

5

Find 결과물에 대해서 2차 명령 실행

Page 6: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹1. Backdoor 찾기

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

6

Level2의 배쉬쉘 실행

Page 7: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹2. Editor Shell Command

문제분석

find 명령을 통해서

Setuid가 설정된 파일을 찾아 실행시키는 문제

리눅스 편집기 프로그램에서 지원하는 외부 명령

실행옵션에 대해서 이해가 필요한 문제

© 2015 TigerTeamAcademy, Inc. All rights reserved.

7

find 명령을 통해서

Setuid가 설정된 파일을 찾아 실행시키는 문제

리눅스 편집기 프로그램에서 지원하는 외부 명령

실행옵션에 대해서 이해가 필요한 문제

Page 8: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹2. Editor Shell Command

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

8

Page 9: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹3. system() 취약점

문제분석

char* strcpy(const char*, const char*); //문자열 복사

Char* strcat (char*, const char*); //문자열 덧붙이기

즉,

cmd 변수에는 “dig @ argv[1] version.bin chaos txt” 복사

및 실행됨. 따라서, argv[1]을 통해서 임의의 명령 실행을

시도하고 패스워드를 찾아내는 문제임

웹해킹의 command injection과 동일한 공격임.

dig 명령은 nslookup과 동일한 도메인의 IP 주소를

확인하는 명령으로 유닉스 계열 운영체제에 탑재되어 있음

© 2015 TigerTeamAcademy, Inc. All rights reserved.

9

char* strcpy(const char*, const char*); //문자열 복사

Char* strcat (char*, const char*); //문자열 덧붙이기

즉,

cmd 변수에는 “dig @ argv[1] version.bin chaos txt” 복사

및 실행됨. 따라서, argv[1]을 통해서 임의의 명령 실행을

시도하고 패스워드를 찾아내는 문제임

웹해킹의 command injection과 동일한 공격임.

dig 명령은 nslookup과 동일한 도메인의 IP 주소를

확인하는 명령으로 유닉스 계열 운영체제에 탑재되어 있음

Page 10: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹3. system() 취약점

문제분석

dig [@server] [name] [query type]

- server는 dns를 질의할 네임서버를 지정하며 이 옵션을 지정하지 않으면 /etc/resolv.conf를 참조하여 질의

- query type은 아래 중 하나가 올 수 있다.

a : network address

any : all query

mx : mail exchanger

soa : zone file의 SOA 정보

hinfo : host info

axfr : zone transfer

txt : txt 값

© 2015 TigerTeamAcademy, Inc. All rights reserved.

10

dig [@server] [name] [query type]

- server는 dns를 질의할 네임서버를 지정하며 이 옵션을 지정하지 않으면 /etc/resolv.conf를 참조하여 질의

- query type은 아래 중 하나가 올 수 있다.

a : network address

any : all query

mx : mail exchanger

soa : zone file의 SOA 정보

hinfo : host info

axfr : zone transfer

txt : txt 값

Page 11: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹3. system() 취약점

명령실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

11

Page 12: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹4. xinetd backdoor

문제분석

리눅스 서비스(telnet, ssh, finger, imap 등) 시스템의 구성

및 설정에 대해서 이해하는지를 확인

xinetd.d/ 디렉토리에 백도어 설정을 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

12

리눅스 서비스(telnet, ssh, finger, imap 등) 시스템의 구성

및 설정에 대해서 이해하는지를 확인

xinetd.d/ 디렉토리에 백도어 설정을 이해

Page 13: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹4. xinetd backdoor

문제분석

© 2015 TigerTeamAcademy, Inc. All rights reserved.

13

Page 14: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹4. xinetd backdoor

문제분석

© 2015 TigerTeamAcademy, Inc. All rights reserved.

14

포트가 열려 있으므로, 해당 데몬은 동작중이나

관련 프로그램이 없으므로 실행시 아무런

대응이 없음

따라서, 적절한 대응코드를 작성해서 처리하면

임의의 명령 수행이 가능함

Page 15: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹4. xinetd backdoor

명령실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

15

/bin/bash 로 설정하면~??

Page 16: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

문제분석

파일 생성, 읽기, 쓰기 등의 과정에서 발생할 수 있는 Race

Condition에 대한 이해도를 테스트 하는 문제

/tmp/level5.tmp 파일에 다음 레벨 비밀번호값이

기록되므로, 해당 파일이 삭제되기 전에 읽어서 화면에

출력하면 됨

© 2015 TigerTeamAcademy, Inc. All rights reserved.

16

파일 생성, 읽기, 쓰기 등의 과정에서 발생할 수 있는 Race

Condition에 대한 이해도를 테스트 하는 문제

/tmp/level5.tmp 파일에 다음 레벨 비밀번호값이

기록되므로, 해당 파일이 삭제되기 전에 읽어서 화면에

출력하면 됨

Page 17: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

문제분석

© 2015 TigerTeamAcademy, Inc. All rights reserved.

17

임시파일이 생성되나 즉시 삭제됨

Page 18: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

문제분석

CPU

경쟁관계Race condition

공격이 가능한 프로그램의 특징

• 임시 파일을 생성하는 프로그램이여야 한다.

• 임시 파일 생성시 파일의 권한이 setuid(4755)

로 설정되어야 한다.

• 공격자가 경쟁관계를 생립시키기 위해서는

임시파일명을 미리 파악하고 있어야 한다.

• 레이스 컨디션에 대한 패치가 되지 않아야

한다.

© 2015 TigerTeamAcademy, Inc. All rights reserved.

18

Process A Process B

• 두 프로세스에게 동일하게 리소스 할당이 되지 않음

• 두 개 이상의 프로세스가 동시에 동작할 경우 서로

할당 받기 위한 경쟁에 빠짐

공격이 가능한 프로그램의 특징

• 임시 파일을 생성하는 프로그램이여야 한다.

• 임시 파일 생성시 파일의 권한이 setuid(4755)

로 설정되어야 한다.

• 공격자가 경쟁관계를 생립시키기 위해서는

임시파일명을 미리 파악하고 있어야 한다.

• 레이스 컨디션에 대한 패치가 되지 않아야

한다.

Page 19: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

문제분석

전제조건

루트 권한으로 구동되는 setuid 프로그램

위 프로그램 실행시 임시 파일 생성

공격자 위 프로그램 실행시 임시 파일 생성

© 2015 TigerTeamAcademy, Inc. All rights reserved.

19

공격자 위 프로그램 실행시 임시 파일 생성

레이스컨디션 돌입 실제 setuid 프로그램 실행

공격 성공 Root 권한 획득

Page 20: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

문제분석

© 2015 TigerTeamAcademy, Inc. All rights reserved.

20

임시파일이 생성되나 즉시 삭제됨

Page 21: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

21

Page 22: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹5. Race condition

쓰레드를 이용한 Race Condition 공격 코드

© 2015 TigerTeamAcademy, Inc. All rights reserved.

22

Page 23: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹6. System interrupt

문제 분석

로그인시 bbs 텔넷 접속 메뉴에서는 많이 사용하던 해킹

기법이라는 표시만 나타나고,

엔터키를 입력하면 아래 그림과 같은 메뉴가 나타남.

1,2,3 어떤 메뉴를 선택해도 접속이 제대로 이루어지지

않으며, 접속 자체가 종료되어 버림.

© 2015 TigerTeamAcademy, Inc. All rights reserved.

23

로그인시 bbs 텔넷 접속 메뉴에서는 많이 사용하던 해킹

기법이라는 표시만 나타나고,

엔터키를 입력하면 아래 그림과 같은 메뉴가 나타남.

1,2,3 어떤 메뉴를 선택해도 접속이 제대로 이루어지지

않으며, 접속 자체가 종료되어 버림.

Page 24: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹6. System interrupt

명령 실행 및 이해

CTRL + C 인터럽트

© 2015 TigerTeamAcademy, Inc. All rights reserved.

24

my-pass 실행시

Page 25: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹7. CipherText

문제 분석

/bin/level7 실행시 패스워드 입력창이 나타나며

제대로 입력하지 못할 경우, /bin/wrong.txt의 내용이

나타난다.

해당 메시지를 통해서 패스워드를 유추해 내야 함

© 2015 TigerTeamAcademy, Inc. All rights reserved.

25

/bin/level7 실행시 패스워드 입력창이 나타나며

제대로 입력하지 못할 경우, /bin/wrong.txt의 내용이

나타난다.

해당 메시지를 통해서 패스워드를 유추해 내야 함

Page 26: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹7. CipherText

명령 실행 및 이해

- : 1, _: 0이진코드를 문자열로

© 2015 TigerTeamAcademy, Inc. All rights reserved.

26

- : 1, _: 0이진코드를 문자열로

Page 27: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹8. Linux password crack

문제 분석

기본 명령인 find의 size 옵션 사용법을 이해하는지 확인

패스워드 파일의 내용을 크랙할줄 아는지 확인

© 2015 TigerTeamAcademy, Inc. All rights reserved.

27

기본 명령인 find의 size 옵션 사용법을 이해하는지 확인

패스워드 파일의 내용을 크랙할줄 아는지 확인

Page 28: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹8. Linux password crack

문제 분석

[find size 옵션]

-size [+파일크기/-파일크기/파일크기][bckw중 택1] : 파일크기와 일치하는 파일

b : 블록단위 512kbc : bytek : kbytew : 2byte 워드

아무런 단위를 붙이지 않은 경우 : 디폴트 값 b

파일크기에 +1024k 이렇게 +를 붙이는 경우에는 크기가 1024kbyte 이상인 것을 찾고,-는 그 이하, +,-를 붙이지 않는 경우에는 그 크기의 파일을 찾음

ex)find / -size 1024k시스템 전체에서 파일크기가 1024kbyte인 파일을 검색

© 2015 TigerTeamAcademy, Inc. All rights reserved.

28

[find size 옵션]

-size [+파일크기/-파일크기/파일크기][bckw중 택1] : 파일크기와 일치하는 파일

b : 블록단위 512kbc : bytek : kbytew : 2byte 워드

아무런 단위를 붙이지 않은 경우 : 디폴트 값 b

파일크기에 +1024k 이렇게 +를 붙이는 경우에는 크기가 1024kbyte 이상인 것을 찾고,-는 그 이하, +,-를 붙이지 않는 경우에는 그 크기의 파일을 찾음

ex)find / -size 1024k시스템 전체에서 파일크기가 1024kbyte인 파일을 검색

Page 29: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹8. Linux password crack

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

29

Page 30: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹9. Buffer Overflow

문제 분석

버퍼가 메모리에서 사용되는 형태에 대한 이해 여부

실제 버퍼를 오버플로우 시켜 원하는 값을 넣을 수 있는지

여부 등을 확인

예제를 보면, buf에 40문자까지 입력 받고 저장하는데,

buf를 초과하여 buf2에 go라는 문자열을 넣을 수 있는지

체크

© 2015 TigerTeamAcademy, Inc. All rights reserved.

30

버퍼가 메모리에서 사용되는 형태에 대한 이해 여부

실제 버퍼를 오버플로우 시켜 원하는 값을 넣을 수 있는지

여부 등을 확인

예제를 보면, buf에 40문자까지 입력 받고 저장하는데,

buf를 초과하여 buf2에 go라는 문자열을 넣을 수 있는지

체크

Page 31: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹9. Buffer Overflow

문제 분석

버퍼간 거리 0x10 -> 16(10진수)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

31

buf[10] dummy buf2[10] dummy SFP RET

10 6 10 6 4 4

스택 증가 방향

낮은 메모리 높은 메모리

단위 : 바이트

Page 32: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹9. Buffer Overflow

명령 실행 및 이해

buf[10] dummy

10 6

dummy SFP RET

6 4 482

buf2[10]

go가 입력되어야 함

스택 증가 방향

낮은 메모리 높은 메모리

© 2015 TigerTeamAcademy, Inc. All rights reserved.

32

Page 33: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹10. Shared memory read/write

문제 분석

공유메모리에 대한 기본 개념 이해

간단한 공유메모리 코딩

참고) 공유메모리 코딩을 통해서 비밀번호 획득이 안될경우

program 내의 실행 프로그램을 재실행 해보는 것이 좋음

© 2015 TigerTeamAcademy, Inc. All rights reserved.

33

공유메모리에 대한 기본 개념 이해

간단한 공유메모리 코딩

참고) 공유메모리 코딩을 통해서 비밀번호 획득이 안될경우

program 내의 실행 프로그램을 재실행 해보는 것이 좋음

Page 34: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹10. Shared memory read/write

문제 분석

Process A Process B Process N…

메모리공간 A 메모리공간 B 메모리공간 N…

메모리 공유를 하지 않는 상황

© 2015 TigerTeamAcademy, Inc. All rights reserved.

34

Process A Process B Process N…

공유메모리공간

공유 메모리 사용

메모리 공간 생성공유사용

공유 사용공유 사용

IPC(Inter Process Communication) 통신

Page 35: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹10. Shared memory read/write

문제 분석

© 2015 TigerTeamAcademy, Inc. All rights reserved.

35

관련 내용 접근 불가또는 없음

실행내역 확인

Page 36: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹10. Shared memory read/write

공유메모리 생성 코드

© 2015 TigerTeamAcademy, Inc. All rights reserved.

36

//공유메모리를 BUFSIZE 만큼 생성함

//프로세스에서 공유 메모리 공간을 사용할 수 있게 attach 함

//공유 메모리 공간에 있는 값을 buf에 복사함

//프로세스에서 공유 메모리의 연결을 분리

Page 37: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹10. Shared memory read/write

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

37

//공유 메모리 ID 읽어오기

//프로세스에서 공유 메모리 공간을 사용할 수 있게 attach 함

//공유 메모리 공간의 값을 복사해옴

//공유 메모리 내역 해제

Page 38: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹11. Stack buffer overflow

문제 분석

버퍼 오버플로우의 취약점에 대한 공격 기법 이해

포맷 스트링의 개념 이해 및 취약점에 대한 공격 기법

© 2015 TigerTeamAcademy, Inc. All rights reserved.

38

버퍼 오버플로우의 취약점에 대한 공격 기법 이해

포맷 스트링의 개념 이해 및 취약점에 대한 공격 기법

버퍼 오버플로우 취약점

포맷스트링 오버플로우 취약점

Page 39: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹11. Stack buffer overflow

문제 분석

4bytes

264bytes

4bytes

str(256 + 8(dummy))

????

????

스택 증가 방향 / 낮은 메모리 주소

© 2015 TigerTeamAcademy, Inc. All rights reserved.

39

4bytes

4bytes

4bytes

4bytes

4bytesenv

argv

argc (0x00000002)

RET

SFP

높은 메모리 주소

Page 40: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

4bytes

264bytes

4bytes

시스템 해킹11. Stack buffer overflow

명령 실행 및 이해

str(256 + 8(dummy))

????

????

스택 증가 방향 / 낮은 메모리 주소

4bytes

4bytes

4bytes

4bytes

4bytes

© 2015 TigerTeamAcademy, Inc. All rights reserved.

40

env

argv

argc (0x00000002)

RET

SFP

높은 메모리 주소

Page 41: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹11. Stack buffer overflow

eggshell.c

© 2015 TigerTeamAcademy, Inc. All rights reserved.

41

egg.c

Page 42: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹11. Stack buffer overflow

eggshell.c

© 2015 TigerTeamAcademy, Inc. All rights reserved.

42

Page 43: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

문제 분석

버퍼 오버플로우 심화 문제

버퍼의 주소가 랜덤하게 변함

환경변수를 이용한 공격 및 랜덤 버퍼를 무한 루프로

공격하는 방법

© 2015 TigerTeamAcademy, Inc. All rights reserved.

43

버퍼 오버플로우 심화 문제

버퍼의 주소가 랜덤하게 변함

환경변수를 이용한 공격 및 랜덤 버퍼를 무한 루프로

공격하는 방법

Page 44: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

문제 분석

SFP

str(256 + 8(dummy))

264bytes

4bytes

4bytes

264bytes 버퍼

© 2015 TigerTeamAcademy, Inc. All rights reserved.

44

env

argv

argc (0x00000002)

RET 4bytes

4bytes

4bytes

4bytes

Page 45: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

명령 실행 및 이해

버퍼의 시작

© 2015 TigerTeamAcademy, Inc. All rights reserved.

45

dummy buf

SPF RET

Page 46: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

명령 실행 및 이해

AAA…AAA

256

dummy

8

SFP

4

RET

4

© 2015 TigerTeamAcademy, Inc. All rights reserved.

46

AAA…AAA

256

AAAA…AAA

8

AAAA

4

AAAA

4 리턴 주소 조작으로Segmentation fault 발생

Page 47: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

47

Page 48: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹12. Buffer Overflow(2)

쉘코드를 버퍼에 직접 입력랜덤하게 변함

/bin/sh 실행시키는 쉘코드

© 2015 TigerTeamAcademy, Inc. All rights reserved.

48

버퍼의 주소가 랜덤하게변경되어 앞부분에 널코드를

주고 임의의 위치를 공략위치가 맞을때까지 무한루프

Page 49: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹13. Stack Guard

문제 분석

Stack Guard에 대한 이해 및 우회 기법

© 2015 TigerTeamAcademy, Inc. All rights reserved.

49

Page 50: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹13. Stack Guard

명령 실행 및 이해

버퍼의 시작과 끝

stack guard[4bytes] – 0x1234567

dummy[12bytes]

buf[1024bytes]

© 2015 TigerTeamAcademy, Inc. All rights reserved.

50

…생략… 스택가드값

SPF RETdummydummy

RET

SPF

dummy[8bytes]

stack guard[4bytes] – 0x1234567

Page 51: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹13. Stack Guard

명령 실행 및 이해

dummy[12bytes]

buf[1024bytes]

AAAA…AAAA

AAAAAAA……AAAAAAA1024

12

© 2015 TigerTeamAcademy, Inc. All rights reserved.

51

RET

SPF

dummy[8bytes]

stack guard[4bytes] – 0x1234567

특정 주소 변조

AAAA

AAAA

0x1234567사전에 값을 읽어강제로 입력시킴

4

8

4

4

python -c ‘print “A”*1036+”\x67\x45\x23\x01”+”A”*12+”주소값”’

Page 52: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹13. Stack Guard

명령 실행 및 이해

EGG환경변수로 리턴

© 2015 TigerTeamAcademy, Inc. All rights reserved.

52

EGG환경변수로 리턴

stack guard 값 재복사

Page 53: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹14. 루틴 분기 (1)

문제 분석

버퍼오버플로우 문제~^^

© 2015 TigerTeamAcademy, Inc. All rights reserved.

53

버퍼오버플로우 문제~^^

Page 54: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹14. 루틴 분기 (1)

문제 분석

버퍼 크기 : 56

© 2015 TigerTeamAcademy, Inc. All rights reserved.

54

buf

20

check

4

crap

4

dummy

28

SFP

4

RET

4

56bytes

하지만, 여기서 문제점은 dummy의 정확한 위치를 모른다는 점if 문을 통과하기 위해서는 check 값의 위치를 정확하게 알아내는 것이 매우 중요함

Page 55: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹14. 루틴 분기 (1)

문제 분석

buf check crap

40bytes 4bytes

56bytes

© 2015 TigerTeamAcademy, Inc. All rights reserved.

55

buf

20

dummy

20

check

4

crap

4

dummy

8

SFP

4

RET

4

0xdeadbeef

Page 56: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹14. 루틴 분기 (1)

명령 실행 및 이해

40bytes 채우기

If구문을 통과하기위한 check 값 채우기

© 2015 TigerTeamAcademy, Inc. All rights reserved.

56

If구문을 통과하기위한 check 값 채우기

Page 57: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹15. 루틴 분기 (2)

문제 분석

14번과 매우 유사한 문제, 다만 포인터만 사용했음

© 2015 TigerTeamAcademy, Inc. All rights reserved.

57

14번과 매우 유사한 문제, 다만 포인터만 사용했음

Page 58: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹15. 루틴 분기 (2)

문제 분석

버퍼 크기 : 56

하지만, 여기서 문제점은 dummy의 정확한위치를 모른다는 점if 문을 통과하기 위해서는 check 값의 위치를정확하게 알아내는 것이 매우 중요함

© 2015 TigerTeamAcademy, Inc. All rights reserved.

58

buf

20

check

4

crap

4

dummy

28

SFP

4

RET

4

56bytes

하지만, 여기서 문제점은 dummy의 정확한위치를 모른다는 점if 문을 통과하기 위해서는 check 값의 위치를정확하게 알아내는 것이 매우 중요함

0xdeadbeef

Page 59: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹15. 루틴 분기 (2)

명령 실행 및 이해

buf check crap

40bytes 4bytes

20 20

56bytes

4 4 8 4 4

© 2015 TigerTeamAcademy, Inc. All rights reserved.

59

buf

20

dummy

20

check

4

crap

4

dummy

8

SFP

4

RET

4

0xdeadbeef

Page 60: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹15. 루틴 분기 (2)

명령 실행 및 이해

buf : 20bytes

dummy: 20bytes

© 2015 TigerTeamAcademy, Inc. All rights reserved.

60

check : 4bytes

crap: 4bytes

dummy: 8bytes

SPF : 4bytes RET : 4bytescheck 값이 0으로 할당

Page 61: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹15. 루틴 분기 (2)

명령 실행 및 이해

20 20

56bytes

배열의주소값

4

crap

4

dummy

8

SFP

4

RET

4

0xdeadbeef… 0xdeadbeef

배열의 주소 포인터를 원하는 곳으로 이동하여 공격

배열의 주소가 랜덤하게 변하므로 다양한 테스트 필요

© 2015 TigerTeamAcademy, Inc. All rights reserved.

61

배열의 주소 포인터를 원하는 곳으로 이동하여 공격

배열의 주소가 랜덤하게 변하므로 다양한 테스트 필요

- 환경변수에 값을 저장하고 푸는 방법은??^^

- shellcode를 직접 입력하여 실행하는 방법은??^^

Page 62: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹16. Function Pointer (1)

문제 분석

함수 주소를 위변조하여 임의의 함수를 실행하도록 하는

문제

call() 함수 호출시 printit()이 아닌 shell() 함수가

호출되도록 하는 것이 문제임

© 2015 TigerTeamAcademy, Inc. All rights reserved.

62

함수 주소를 위변조하여 임의의 함수를 실행하도록 하는

문제

call() 함수 호출시 printit()이 아닌 shell() 함수가

호출되도록 하는 것이 문제임

Page 63: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (1)

문제 분석

버퍼 크기 : 56

하지만, 여기서 문제점은 dummy의 정확한 위치를모른다는 점함수호출 주소를 변조하기 위해서는 함수 포인터의위치를 정확하게 알아내는 것이 매우 중요함

© 2015 TigerTeamAcademy, Inc. All rights reserved.

63

buf

20

void*&printit

4

crap

4

dummy

28

SFP

4

RET

4

56bytes

하지만, 여기서 문제점은 dummy의 정확한 위치를모른다는 점함수호출 주소를 변조하기 위해서는 함수 포인터의위치를 정확하게 알아내는 것이 매우 중요함

funcprintit()

funcshell()

Page 64: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (1)

명령 실행 및 이해

© 2015 TigerTeamAcademy, Inc. All rights reserved.

64

buf

20

dummy

20

56bytes

funcprintit()

4

crap

4

dummy

8

printit 함수

주소값 변경

shell함수

Page 65: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (1)

명령 실행 및 이해

앞 buf 40자 채우기

© 2015 TigerTeamAcademy, Inc. All rights reserved.

65

함수 포인터값 shell 함수주소값으로 대체

- 환경변수에 값을 저장하고 푸는 방법은??^^

Page 66: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (2)

문제 분석

setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의

호출을 임의의 쉘코드 주소로 변경하는 것으로

임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임

© 2015 TigerTeamAcademy, Inc. All rights reserved.

66

setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의

호출을 임의의 쉘코드 주소로 변경하는 것으로

임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임

Page 67: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (2)

문제 분석

buf

20

dummy

20

56bytes

funcprintit()

4

crap

4

dummy

8

* 스택의 구조는 앞 문제와 계속 동일함

© 2015 TigerTeamAcademy, Inc. All rights reserved.

67

funcprintit()

printit 함수Shell코드

- 임의의 위치로 shellcode 로딩

- printit 함수 주소값을 shellcode 주소값으로 변경

- shellcode 실행

Page 68: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹17. Function Pointer (2)

명령 실행 및 이해

환경변수 EGG에 shellcode 등록하고 관련 주소확인하는 명령 (export 명령으로도 가능함)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

68

- shellcode를 버퍼에 입력하고 실행하려면??^^

Page 69: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹18. Pointer

문제 분석

cont 값이 string 버퍼에서사용되므로 이동처리 필요

0x80이 아니면 버퍼에 입력

© 2015 TigerTeamAcademy, Inc. All rights reserved.

69

실행시켜야 할 대상 코드하지만, check는 0x00

무한루프 돌다가 check 값이 0xdeadbeef이면 끝~^^

Page 70: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹18. Pointer

명령 실행 및 이해

256bytes

© 2015 TigerTeamAcademy, Inc. All rights reserved.

70

112bytes

4bytes4bytes

4bytes

132bytes

buf(112)

check(4)

x(4)

count(4)

fd_set(132)

낮은 메모리 높은 메모리

Page 71: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹18. Pointer

명령 실행 및 이해

buf(112)

check(4)

x(4)

count(4)

fd_set(132)

낮은 메모리 높은 메모리

정상 데이터 입력시

문제 의도

변조대상

© 2015 TigerTeamAcademy, Inc. All rights reserved.

71

문제 의도

버퍼의 이전 위치에서도 데이터 읽기가 가능함

hint를 보면 0x80을 통해서 – 위치 이동이 가능함

Page 72: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹18. Pointer

명령 실행 및 이해

string 버퍼의 위치를 뒤로4bytes 이동

If 조건값을 해당 위치에입력

© 2015 TigerTeamAcademy, Inc. All rights reserved.

72

If 조건값을 해당 위치에입력

Page 73: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹19. Setreuid Shellcode

문제 분석

문제는 문자열을 입력받아서 출력하는 것으로 종료함

하지만, buffer overflow 취약점이 존재하고, 이를 이용하여

쉘을 실행할 수 있는 취약점이 존재함

단, shellcode에 setreuid() 함수를 포함해야 함 (즉, 쉘코드

작성 능력이 있는지를 확인함)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

73

문제는 문자열을 입력받아서 출력하는 것으로 종료함

하지만, buffer overflow 취약점이 존재하고, 이를 이용하여

쉘을 실행할 수 있는 취약점이 존재함

단, shellcode에 setreuid() 함수를 포함해야 함 (즉, 쉘코드

작성 능력이 있는지를 확인함)

Page 74: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹19. Setreuid Shellcode

문제 분석

40bytes 확보

© 2015 TigerTeamAcademy, Inc. All rights reserved.

74

RET(4)

SPF(4)

dummy(20)

buf(20)

낮은 메모리 높은 메모리

Page 75: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹19. Setreuid Shellcode

명령 실행 및 이해

EGG 환경변수를 이용한 공격

© 2015 TigerTeamAcademy, Inc. All rights reserved.

75

buf 를 “A”로 채우고 리턴주소를 EGG로 변경

하지만, 쉘코드에 setreuid() 함수사용이 없어 권한 상승에 실패함

Page 76: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹19. Setreuid Shellcode

명령 실행 및 이해

EGG쉘코드에 다음 코드를 추가setreuid(3100); //추가코드 내용

© 2015 TigerTeamAcademy, Inc. All rights reserved.

76

shellcode 작성을 공부하세요~^^

Page 77: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

문제 분석

setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의

호출을 임의의 쉘코드 주소로 변경하는 것으로

임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임

© 2015 TigerTeamAcademy, Inc. All rights reserved.

77

setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의

호출을 임의의 쉘코드 주소로 변경하는 것으로

임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임

Page 78: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

문제 분석

#include <stdio.h>

void main(void) {

char s[] = “가나다";char c = 'A';int i = 255;unsigned long iUL = 0xFFFFFFFFUL;float f = 1.234f;

printf("%s\n", s);// 출력 결과: 가나다

printf("%d\n", i);// 출력 결과: 255

printf("%X\n", i);// 출력 결과: FF

printf("%s %c %d %u %f %0.3f %X %x %02X\n", s, c, i, iUL, f, f, i, 255, 10);// 출력 결과: 가나다 A 255 4294967295 1.234000 1.234 FF ff 0A

}

포맷문자 내용

%s 문자열

%c 문자 1개

%d +-부호 있는 정수

%u +-부호 없는 정수

%f 실수

실수 (소수점 3자리까지 나오게)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

78

printf() / sprintf() / fprintf() 함수 속의 퍼센트(%)

기호들은, "Format Specifier" 라고 하는데, 출력

형식을 지정하는 것입니다.

#include <stdio.h>

void main(void) {

char s[] = “가나다";char c = 'A';int i = 255;unsigned long iUL = 0xFFFFFFFFUL;float f = 1.234f;

printf("%s\n", s);// 출력 결과: 가나다

printf("%d\n", i);// 출력 결과: 255

printf("%X\n", i);// 출력 결과: FF

printf("%s %c %d %u %f %0.3f %X %x %02X\n", s, c, i, iUL, f, f, i, 255, 10);// 출력 결과: 가나다 A 255 4294967295 1.234000 1.234 FF ff 0A

}

%0.3f 실수 (소수점 3자리까지 나오게)

%X 16진수 대문자로

%x 16진수 소문자로

%02X 16진수 대문자로. 2자리 헥사에서, 앞의 빈 칸 있으면 0으로 채움

Page 79: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

printf(“AAAA%08x……)

44

?????

44

시스템 해킹20. Format string buffer overflow (2)

명령 실행 및 이해

AAAA%x

80

dummy

8 4

SPF

4

RET

4

%xAAAA

여기부분의 첫글짜포맷문자열은 다음 주소글짜를 표기함($esp 값이 +4만큼 이동함)

만약 해당 부분이 없다면 4f 대신AAAA값 41414141이 출력되어야 함

fgets나 setreuid가 사용(??) 또는 반환

© 2015 TigerTeamAcademy, Inc. All rights reserved.

79

%xAAAA

%xAAAA

여기부분의 첫글짜포맷문자열은 다음 주소글짜를 표기함($esp 값이 +4만큼 이동함)

만약 해당 부분이 없다면 4f 대신AAAA값 41414141이 출력되어야 함

Page 80: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

문제 분석

%08x는 16진수 소문자 표현 포맷.

포맷을 사용할때마다 주소값이4바이트씩 뒤로 이동됨

그리고 인해서, 버퍼의 시작점을유추할 수 있음

printf(“AAAA%08x……)

44

????

4

3101

4

© 2015 TigerTeamAcademy, Inc. All rights reserved.

80

AAAA

80

dummy

8

96bytes (추정)

4

SPF

4

RET

444

버퍼의 시작점 파악 완료~^^

버퍼의 시작점은 %08x 개수를 늘려가면서 파악이 가능함

Page 81: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

문제 분석

[서식 문자 : %n]

%n이 나오기 전에 출력된 모든 글자수(자릿수)를 계산하여 스택의 다음 4바이트에 있는

내용을 주소로 생각하고 그 주소에 해당 곳에 자릿수 값(숫자)를 입력함

printf(“AAAA%08x……)

44

?????

44

AAAA%x

80

dummy

8 4

SPF

4

RET

4

© 2015 TigerTeamAcademy, Inc. All rights reserved.

81

%nAAAA

%nAAAA

AAAA%n 이라고

입력했을 경우

1. “AAAA”를 출력

2. “%n”을 만나면 출력된 글자수 4를 카운트

3. 스택의 다음 4바이트 “0x41414141” 주소에

해당 값 4를 기록함 (메모리의 특정 위치에

값을 조작할 수 있음을 의미함)

4. %100c%n을 사용하면 100이라는 숫자와 4가

더해져 104가 기록 가능함

Page 82: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

포맷스트링 공격 공식~^^

AAAA낮은주소AAAA높은주소%8x%8x%8x%64128c%n%50519c%n

%n%50519c

%n%64128c

%8x%8x%8x

높은주소AAAA

낮은주소AAAA

%n%50519c

%n%64128c

%8x%8x%8x

높은주소AAAA

낮은주소AAAA

1. “AAAA낮은주소AAAA높은주소는”까지는 출력

2. 현재 esp가 printf에 있기 때문에 버퍼까지 이동을 시키기 위해서

%8x를 3번 사용함

3. 이미 출력된 값이 40글자이고 64128글자값이 합산됨

4. %c를 만나서 esp 값이 버퍼 시작점 “AAAA”에서 낮은주소로

이동함

5. %n을 만나서 해당 주소값에 합산된 숫자값이 기록됨

(낮은주소값에 2byte만 기록함). esp 값 또한 4바이트 이동함

6. 이미 출력된 모든 값들을 포함하여 50519값을 추가하여 값을

합산함

7. %c를 만나서 esp 값이 “AAAA”에서 다시 높은 주소로 이동함

8. %n을 만나서 해당 부분에 합산된 값을 기록함

이동할 주소번지(쉘코드주소)

© 2015 TigerTeamAcademy, Inc. All rights reserved.

82

%n%50519c

%n%64128c

%8x%8x%8x

높은주소AAAA

낮은주소AAAA

%n%50519c

%n%64128c

%8x%8x%8x

높은주소AAAA

낮은주소AAAA

……

printf(…..)printf(…..)

1. “AAAA낮은주소AAAA높은주소는”까지는 출력

2. 현재 esp가 printf에 있기 때문에 버퍼까지 이동을 시키기 위해서

%8x를 3번 사용함

3. 이미 출력된 값이 40글자이고 64128글자값이 합산됨

4. %c를 만나서 esp 값이 버퍼 시작점 “AAAA”에서 낮은주소로

이동함

5. %n을 만나서 해당 주소값에 합산된 숫자값이 기록됨

(낮은주소값에 2byte만 기록함). esp 값 또한 4바이트 이동함

6. 이미 출력된 모든 값들을 포함하여 50519값을 추가하여 값을

합산함

7. %c를 만나서 esp 값이 “AAAA”에서 다시 높은 주소로 이동함

8. %n을 만나서 해당 부분에 합산된 값을 기록함

à 이제 낮은주소, 높은주소인 공격 타겟 주소만 찾으면 됨

변조할 주소번지(ret 대용번지)

Page 83: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

변조할 공격 주소번지 찾기

…생략…

© 2015 TigerTeamAcademy, Inc. All rights reserved.

83

덮어쓸 주소 심볼 삭제(.dtors값으로 컴파일시 제거)

…생략…

공격대상과 4bytes 차이남

GNU 컴파일러로 컴파일된 프로그램은 생성자와 소멸자를 위해

.dtors와 .ctors를 생성함. .ctors는 main() 시작전, .dtors는 exit

콜로 종료전에 호출됨. 따라서 .dtors 영역을 이용하여 흐름을

조작할 수 있으며, 주소는 dtors + 4바이트 지점임

à 따라서 덮어쓰야할 공격주소는 0x08049598

Page 84: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹20. Format string buffer overflow (2)

명령 실행 및 이해

환경변수 주소값 변환

bfff à 1bff – 62159 = 52528

f2cf à 62159 – 40 = 62119

덮어쓰야 할 공격주소는 0x08049598

© 2015 TigerTeamAcademy, Inc. All rights reserved.

84

…생략… AAAA낮은주소AAAA높은주소%8x%8x%8x%64128c%n%50519c%n

Page 85: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

시스템 해킹추천도서

© 2015 TigerTeamAcademy, Inc. All rights reserved.

85

Page 86: [무료] 시스템해킹(해커스쿨문제풀이) 공개버전

0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100

0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100

| 정보보호 컨설팅(모의해킹 분야) 전문가 과정 |