Upload
-
View
5.215
Download
0
Embed Size (px)
Citation preview
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
㈜타이거팀아카데미
시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
| 정보보호 전문가(모의해킹) 과정|
㈜타이거팀아카데미
시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
Contents
I. 시스템 해킹
1. 해커스쿨 FTZ 1~20 문제 풀이
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001001000100100000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
시스템 해킹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
시스템 해킹1. Backdoor 찾기
문제 분석
find 명령을 통해서
Setuid가 설정된 파일을 찾아 실행시키는 문제
시스템의 파일 퍼미션에 대해서 충분히 이해하고
시스템 기본 명령인 find 명령에 대해서 충분히
숙지하고 있는지 확인하는 문제
© 2015 TigerTeamAcademy, Inc. All rights reserved.
4
find 명령을 통해서
Setuid가 설정된 파일을 찾아 실행시키는 문제
시스템의 파일 퍼미션에 대해서 충분히 이해하고
시스템 기본 명령인 find 명령에 대해서 충분히
숙지하고 있는지 확인하는 문제
시스템 해킹1. Backdoor 찾기
명령 실행 및 이해
퍼미션 옵션으로 (SetUID) 설정 파일만 소유자 옵션 표준 에러 출력 null 처리
© 2015 TigerTeamAcademy, Inc. All rights reserved.
5
Find 결과물에 대해서 2차 명령 실행
시스템 해킹1. Backdoor 찾기
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
6
Level2의 배쉬쉘 실행
시스템 해킹2. Editor Shell Command
문제분석
find 명령을 통해서
Setuid가 설정된 파일을 찾아 실행시키는 문제
리눅스 편집기 프로그램에서 지원하는 외부 명령
실행옵션에 대해서 이해가 필요한 문제
© 2015 TigerTeamAcademy, Inc. All rights reserved.
7
find 명령을 통해서
Setuid가 설정된 파일을 찾아 실행시키는 문제
리눅스 편집기 프로그램에서 지원하는 외부 명령
실행옵션에 대해서 이해가 필요한 문제
시스템 해킹2. Editor Shell Command
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
8
시스템 해킹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 주소를
확인하는 명령으로 유닉스 계열 운영체제에 탑재되어 있음
시스템 해킹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 값
시스템 해킹3. system() 취약점
명령실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
11
시스템 해킹4. xinetd backdoor
문제분석
리눅스 서비스(telnet, ssh, finger, imap 등) 시스템의 구성
및 설정에 대해서 이해하는지를 확인
xinetd.d/ 디렉토리에 백도어 설정을 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
12
리눅스 서비스(telnet, ssh, finger, imap 등) 시스템의 구성
및 설정에 대해서 이해하는지를 확인
xinetd.d/ 디렉토리에 백도어 설정을 이해
시스템 해킹4. xinetd backdoor
문제분석
© 2015 TigerTeamAcademy, Inc. All rights reserved.
13
시스템 해킹4. xinetd backdoor
문제분석
© 2015 TigerTeamAcademy, Inc. All rights reserved.
14
포트가 열려 있으므로, 해당 데몬은 동작중이나
관련 프로그램이 없으므로 실행시 아무런
대응이 없음
따라서, 적절한 대응코드를 작성해서 처리하면
임의의 명령 수행이 가능함
시스템 해킹4. xinetd backdoor
명령실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
15
/bin/bash 로 설정하면~??
시스템 해킹5. Race condition
문제분석
파일 생성, 읽기, 쓰기 등의 과정에서 발생할 수 있는 Race
Condition에 대한 이해도를 테스트 하는 문제
/tmp/level5.tmp 파일에 다음 레벨 비밀번호값이
기록되므로, 해당 파일이 삭제되기 전에 읽어서 화면에
출력하면 됨
© 2015 TigerTeamAcademy, Inc. All rights reserved.
16
파일 생성, 읽기, 쓰기 등의 과정에서 발생할 수 있는 Race
Condition에 대한 이해도를 테스트 하는 문제
/tmp/level5.tmp 파일에 다음 레벨 비밀번호값이
기록되므로, 해당 파일이 삭제되기 전에 읽어서 화면에
출력하면 됨
시스템 해킹5. Race condition
문제분석
© 2015 TigerTeamAcademy, Inc. All rights reserved.
17
임시파일이 생성되나 즉시 삭제됨
시스템 해킹5. Race condition
문제분석
CPU
경쟁관계Race condition
공격이 가능한 프로그램의 특징
• 임시 파일을 생성하는 프로그램이여야 한다.
• 임시 파일 생성시 파일의 권한이 setuid(4755)
로 설정되어야 한다.
• 공격자가 경쟁관계를 생립시키기 위해서는
임시파일명을 미리 파악하고 있어야 한다.
• 레이스 컨디션에 대한 패치가 되지 않아야
한다.
© 2015 TigerTeamAcademy, Inc. All rights reserved.
18
Process A Process B
• 두 프로세스에게 동일하게 리소스 할당이 되지 않음
• 두 개 이상의 프로세스가 동시에 동작할 경우 서로
할당 받기 위한 경쟁에 빠짐
공격이 가능한 프로그램의 특징
• 임시 파일을 생성하는 프로그램이여야 한다.
• 임시 파일 생성시 파일의 권한이 setuid(4755)
로 설정되어야 한다.
• 공격자가 경쟁관계를 생립시키기 위해서는
임시파일명을 미리 파악하고 있어야 한다.
• 레이스 컨디션에 대한 패치가 되지 않아야
한다.
시스템 해킹5. Race condition
문제분석
전제조건
루트 권한으로 구동되는 setuid 프로그램
위 프로그램 실행시 임시 파일 생성
공격자 위 프로그램 실행시 임시 파일 생성
© 2015 TigerTeamAcademy, Inc. All rights reserved.
19
공격자 위 프로그램 실행시 임시 파일 생성
레이스컨디션 돌입 실제 setuid 프로그램 실행
공격 성공 Root 권한 획득
시스템 해킹5. Race condition
문제분석
© 2015 TigerTeamAcademy, Inc. All rights reserved.
20
임시파일이 생성되나 즉시 삭제됨
시스템 해킹5. Race condition
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
21
시스템 해킹5. Race condition
쓰레드를 이용한 Race Condition 공격 코드
© 2015 TigerTeamAcademy, Inc. All rights reserved.
22
시스템 해킹6. System interrupt
문제 분석
로그인시 bbs 텔넷 접속 메뉴에서는 많이 사용하던 해킹
기법이라는 표시만 나타나고,
엔터키를 입력하면 아래 그림과 같은 메뉴가 나타남.
1,2,3 어떤 메뉴를 선택해도 접속이 제대로 이루어지지
않으며, 접속 자체가 종료되어 버림.
© 2015 TigerTeamAcademy, Inc. All rights reserved.
23
로그인시 bbs 텔넷 접속 메뉴에서는 많이 사용하던 해킹
기법이라는 표시만 나타나고,
엔터키를 입력하면 아래 그림과 같은 메뉴가 나타남.
1,2,3 어떤 메뉴를 선택해도 접속이 제대로 이루어지지
않으며, 접속 자체가 종료되어 버림.
시스템 해킹6. System interrupt
명령 실행 및 이해
CTRL + C 인터럽트
© 2015 TigerTeamAcademy, Inc. All rights reserved.
24
my-pass 실행시
시스템 해킹7. CipherText
문제 분석
/bin/level7 실행시 패스워드 입력창이 나타나며
제대로 입력하지 못할 경우, /bin/wrong.txt의 내용이
나타난다.
해당 메시지를 통해서 패스워드를 유추해 내야 함
© 2015 TigerTeamAcademy, Inc. All rights reserved.
25
/bin/level7 실행시 패스워드 입력창이 나타나며
제대로 입력하지 못할 경우, /bin/wrong.txt의 내용이
나타난다.
해당 메시지를 통해서 패스워드를 유추해 내야 함
시스템 해킹7. CipherText
명령 실행 및 이해
- : 1, _: 0이진코드를 문자열로
© 2015 TigerTeamAcademy, Inc. All rights reserved.
26
- : 1, _: 0이진코드를 문자열로
시스템 해킹8. Linux password crack
문제 분석
기본 명령인 find의 size 옵션 사용법을 이해하는지 확인
패스워드 파일의 내용을 크랙할줄 아는지 확인
© 2015 TigerTeamAcademy, Inc. All rights reserved.
27
기본 명령인 find의 size 옵션 사용법을 이해하는지 확인
패스워드 파일의 내용을 크랙할줄 아는지 확인
시스템 해킹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인 파일을 검색
시스템 해킹8. Linux password crack
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
29
시스템 해킹9. Buffer Overflow
문제 분석
버퍼가 메모리에서 사용되는 형태에 대한 이해 여부
실제 버퍼를 오버플로우 시켜 원하는 값을 넣을 수 있는지
여부 등을 확인
예제를 보면, buf에 40문자까지 입력 받고 저장하는데,
buf를 초과하여 buf2에 go라는 문자열을 넣을 수 있는지
체크
© 2015 TigerTeamAcademy, Inc. All rights reserved.
30
버퍼가 메모리에서 사용되는 형태에 대한 이해 여부
실제 버퍼를 오버플로우 시켜 원하는 값을 넣을 수 있는지
여부 등을 확인
예제를 보면, buf에 40문자까지 입력 받고 저장하는데,
buf를 초과하여 buf2에 go라는 문자열을 넣을 수 있는지
체크
시스템 해킹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
스택 증가 방향
낮은 메모리 높은 메모리
단위 : 바이트
시스템 해킹9. Buffer Overflow
명령 실행 및 이해
buf[10] dummy
10 6
dummy SFP RET
6 4 482
buf2[10]
go가 입력되어야 함
스택 증가 방향
낮은 메모리 높은 메모리
© 2015 TigerTeamAcademy, Inc. All rights reserved.
32
시스템 해킹10. Shared memory read/write
문제 분석
공유메모리에 대한 기본 개념 이해
간단한 공유메모리 코딩
참고) 공유메모리 코딩을 통해서 비밀번호 획득이 안될경우
program 내의 실행 프로그램을 재실행 해보는 것이 좋음
© 2015 TigerTeamAcademy, Inc. All rights reserved.
33
공유메모리에 대한 기본 개념 이해
간단한 공유메모리 코딩
참고) 공유메모리 코딩을 통해서 비밀번호 획득이 안될경우
program 내의 실행 프로그램을 재실행 해보는 것이 좋음
시스템 해킹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) 통신
시스템 해킹10. Shared memory read/write
문제 분석
© 2015 TigerTeamAcademy, Inc. All rights reserved.
35
관련 내용 접근 불가또는 없음
실행내역 확인
시스템 해킹10. Shared memory read/write
공유메모리 생성 코드
© 2015 TigerTeamAcademy, Inc. All rights reserved.
36
//공유메모리를 BUFSIZE 만큼 생성함
//프로세스에서 공유 메모리 공간을 사용할 수 있게 attach 함
//공유 메모리 공간에 있는 값을 buf에 복사함
//프로세스에서 공유 메모리의 연결을 분리
시스템 해킹10. Shared memory read/write
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
37
//공유 메모리 ID 읽어오기
//프로세스에서 공유 메모리 공간을 사용할 수 있게 attach 함
//공유 메모리 공간의 값을 복사해옴
//공유 메모리 내역 해제
시스템 해킹11. Stack buffer overflow
문제 분석
버퍼 오버플로우의 취약점에 대한 공격 기법 이해
포맷 스트링의 개념 이해 및 취약점에 대한 공격 기법
© 2015 TigerTeamAcademy, Inc. All rights reserved.
38
버퍼 오버플로우의 취약점에 대한 공격 기법 이해
포맷 스트링의 개념 이해 및 취약점에 대한 공격 기법
버퍼 오버플로우 취약점
포맷스트링 오버플로우 취약점
시스템 해킹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
높은 메모리 주소
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
높은 메모리 주소
시스템 해킹11. Stack buffer overflow
eggshell.c
© 2015 TigerTeamAcademy, Inc. All rights reserved.
41
egg.c
시스템 해킹11. Stack buffer overflow
eggshell.c
© 2015 TigerTeamAcademy, Inc. All rights reserved.
42
시스템 해킹12. Buffer Overflow(2)
문제 분석
버퍼 오버플로우 심화 문제
버퍼의 주소가 랜덤하게 변함
환경변수를 이용한 공격 및 랜덤 버퍼를 무한 루프로
공격하는 방법
© 2015 TigerTeamAcademy, Inc. All rights reserved.
43
버퍼 오버플로우 심화 문제
버퍼의 주소가 랜덤하게 변함
환경변수를 이용한 공격 및 랜덤 버퍼를 무한 루프로
공격하는 방법
시스템 해킹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
시스템 해킹12. Buffer Overflow(2)
명령 실행 및 이해
버퍼의 시작
© 2015 TigerTeamAcademy, Inc. All rights reserved.
45
dummy buf
SPF RET
시스템 해킹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 발생
시스템 해킹12. Buffer Overflow(2)
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
47
시스템 해킹12. Buffer Overflow(2)
쉘코드를 버퍼에 직접 입력랜덤하게 변함
/bin/sh 실행시키는 쉘코드
© 2015 TigerTeamAcademy, Inc. All rights reserved.
48
버퍼의 주소가 랜덤하게변경되어 앞부분에 널코드를
주고 임의의 위치를 공략위치가 맞을때까지 무한루프
시스템 해킹13. Stack Guard
문제 분석
Stack Guard에 대한 이해 및 우회 기법
© 2015 TigerTeamAcademy, Inc. All rights reserved.
49
시스템 해킹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
시스템 해킹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+”주소값”’
시스템 해킹13. Stack Guard
명령 실행 및 이해
EGG환경변수로 리턴
© 2015 TigerTeamAcademy, Inc. All rights reserved.
52
EGG환경변수로 리턴
stack guard 값 재복사
시스템 해킹14. 루틴 분기 (1)
문제 분석
버퍼오버플로우 문제~^^
© 2015 TigerTeamAcademy, Inc. All rights reserved.
53
버퍼오버플로우 문제~^^
시스템 해킹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 값의 위치를 정확하게 알아내는 것이 매우 중요함
시스템 해킹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
시스템 해킹14. 루틴 분기 (1)
명령 실행 및 이해
40bytes 채우기
If구문을 통과하기위한 check 값 채우기
© 2015 TigerTeamAcademy, Inc. All rights reserved.
56
If구문을 통과하기위한 check 값 채우기
시스템 해킹15. 루틴 분기 (2)
문제 분석
14번과 매우 유사한 문제, 다만 포인터만 사용했음
© 2015 TigerTeamAcademy, Inc. All rights reserved.
57
14번과 매우 유사한 문제, 다만 포인터만 사용했음
시스템 해킹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
시스템 해킹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
시스템 해킹15. 루틴 분기 (2)
명령 실행 및 이해
buf : 20bytes
dummy: 20bytes
© 2015 TigerTeamAcademy, Inc. All rights reserved.
60
check : 4bytes
crap: 4bytes
dummy: 8bytes
SPF : 4bytes RET : 4bytescheck 값이 0으로 할당
시스템 해킹15. 루틴 분기 (2)
명령 실행 및 이해
20 20
56bytes
배열의주소값
4
crap
4
dummy
8
SFP
4
RET
4
0xdeadbeef… 0xdeadbeef
…
배열의 주소 포인터를 원하는 곳으로 이동하여 공격
배열의 주소가 랜덤하게 변하므로 다양한 테스트 필요
© 2015 TigerTeamAcademy, Inc. All rights reserved.
61
배열의 주소 포인터를 원하는 곳으로 이동하여 공격
배열의 주소가 랜덤하게 변하므로 다양한 테스트 필요
- 환경변수에 값을 저장하고 푸는 방법은??^^
- shellcode를 직접 입력하여 실행하는 방법은??^^
시스템 해킹16. Function Pointer (1)
문제 분석
함수 주소를 위변조하여 임의의 함수를 실행하도록 하는
문제
call() 함수 호출시 printit()이 아닌 shell() 함수가
호출되도록 하는 것이 문제임
© 2015 TigerTeamAcademy, Inc. All rights reserved.
62
함수 주소를 위변조하여 임의의 함수를 실행하도록 하는
문제
call() 함수 호출시 printit()이 아닌 shell() 함수가
호출되도록 하는 것이 문제임
시스템 해킹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()
시스템 해킹17. Function Pointer (1)
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
64
buf
20
dummy
20
56bytes
funcprintit()
4
crap
4
dummy
8
printit 함수
주소값 변경
shell함수
시스템 해킹17. Function Pointer (1)
명령 실행 및 이해
앞 buf 40자 채우기
© 2015 TigerTeamAcademy, Inc. All rights reserved.
65
함수 포인터값 shell 함수주소값으로 대체
- 환경변수에 값을 저장하고 푸는 방법은??^^
시스템 해킹17. Function Pointer (2)
문제 분석
setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의
호출을 임의의 쉘코드 주소로 변경하는 것으로
임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임
© 2015 TigerTeamAcademy, Inc. All rights reserved.
66
setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의
호출을 임의의 쉘코드 주소로 변경하는 것으로
임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임
시스템 해킹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 실행
시스템 해킹17. Function Pointer (2)
명령 실행 및 이해
환경변수 EGG에 shellcode 등록하고 관련 주소확인하는 명령 (export 명령으로도 가능함)
© 2015 TigerTeamAcademy, Inc. All rights reserved.
68
- shellcode를 버퍼에 입력하고 실행하려면??^^
시스템 해킹18. Pointer
문제 분석
cont 값이 string 버퍼에서사용되므로 이동처리 필요
0x80이 아니면 버퍼에 입력
© 2015 TigerTeamAcademy, Inc. All rights reserved.
69
실행시켜야 할 대상 코드하지만, check는 0x00
무한루프 돌다가 check 값이 0xdeadbeef이면 끝~^^
시스템 해킹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)
낮은 메모리 높은 메모리
시스템 해킹18. Pointer
명령 실행 및 이해
buf(112)
check(4)
x(4)
count(4)
fd_set(132)
낮은 메모리 높은 메모리
정상 데이터 입력시
문제 의도
변조대상
© 2015 TigerTeamAcademy, Inc. All rights reserved.
71
문제 의도
버퍼의 이전 위치에서도 데이터 읽기가 가능함
hint를 보면 0x80을 통해서 – 위치 이동이 가능함
시스템 해킹18. Pointer
명령 실행 및 이해
string 버퍼의 위치를 뒤로4bytes 이동
If 조건값을 해당 위치에입력
© 2015 TigerTeamAcademy, Inc. All rights reserved.
72
If 조건값을 해당 위치에입력
시스템 해킹19. Setreuid Shellcode
문제 분석
문제는 문자열을 입력받아서 출력하는 것으로 종료함
하지만, buffer overflow 취약점이 존재하고, 이를 이용하여
쉘을 실행할 수 있는 취약점이 존재함
단, shellcode에 setreuid() 함수를 포함해야 함 (즉, 쉘코드
작성 능력이 있는지를 확인함)
© 2015 TigerTeamAcademy, Inc. All rights reserved.
73
문제는 문자열을 입력받아서 출력하는 것으로 종료함
하지만, buffer overflow 취약점이 존재하고, 이를 이용하여
쉘을 실행할 수 있는 취약점이 존재함
단, shellcode에 setreuid() 함수를 포함해야 함 (즉, 쉘코드
작성 능력이 있는지를 확인함)
시스템 해킹19. Setreuid Shellcode
문제 분석
40bytes 확보
© 2015 TigerTeamAcademy, Inc. All rights reserved.
74
RET(4)
SPF(4)
dummy(20)
buf(20)
낮은 메모리 높은 메모리
시스템 해킹19. Setreuid Shellcode
명령 실행 및 이해
EGG 환경변수를 이용한 공격
© 2015 TigerTeamAcademy, Inc. All rights reserved.
75
buf 를 “A”로 채우고 리턴주소를 EGG로 변경
하지만, 쉘코드에 setreuid() 함수사용이 없어 권한 상승에 실패함
시스템 해킹19. Setreuid Shellcode
명령 실행 및 이해
EGG쉘코드에 다음 코드를 추가setreuid(3100); //추가코드 내용
© 2015 TigerTeamAcademy, Inc. All rights reserved.
76
shellcode 작성을 공부하세요~^^
시스템 해킹20. Format string buffer overflow (2)
문제 분석
setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의
호출을 임의의 쉘코드 주소로 변경하는 것으로
임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임
© 2015 TigerTeamAcademy, Inc. All rights reserved.
77
setreuid() 함수 호출뒤에 call 함수를 호출하는데, 이 함수의
호출을 임의의 쉘코드 주소로 변경하는 것으로
임의의 쉘코드 등록과 실행 방법을 이해하는 묻는 문제임
시스템 해킹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으로 채움
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이 출력되어야 함
시스템 해킹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 개수를 늘려가면서 파악이 가능함
시스템 해킹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가 기록 가능함
시스템 해킹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 대용번지)
시스템 해킹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
시스템 해킹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
시스템 해킹추천도서
© 2015 TigerTeamAcademy, Inc. All rights reserved.
85
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
| 정보보호 컨설팅(모의해킹 분야) 전문가 과정 |