SlideShare a Scribd company logo
1 of 86
Download to read offline
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010
0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
㈜타이거팀아카데미
시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010
0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
| 정보보호 전문가(모의해킹) 과정|
㈜타이거팀아카데미
시스템해킹 (해커스쿨 FTZ 1~20 문제풀이)
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010
0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
Contents
I. 시스템 해킹
1. 해커스쿨 FTZ 1~20 문제 풀이
0100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000110010010000100100010010
0000100001110001010100011001010010100011100000000001111001100000011111000000001110111011100011100011011100111000100001110001010100011
시스템 해킹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 : 블록단위 512kb
c : byte
k : kbyte
w : 2byte 워드
아무런 단위를 붙이지 않은 경우 : 디폴트 값 b
파일크기에 +1024k 이렇게 +를 붙이는 경우에는 크기가 1024kbyte 이상인 것을 찾고,
-는 그 이하, +,-를 붙이지 않는 경우에는 그 크기의 파일을 찾음
ex)find / -size 1024k
시스템 전체에서 파일크기가 1024kbyte인 파일을 검색
© 2015 TigerTeamAcademy, Inc. All rights reserved.
28
[find size 옵션]
-size [+파일크기/-파일크기/파일크기][bckw중 택1] : 파일크기와 일치하는 파일
b : 블록단위 512kb
c : byte
k : kbyte
w : 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
264
bytes
4bytes
str
(256 + 8(dummy))
????
????
스택 증가 방향 / 낮은 메모리 주소
© 2015 TigerTeamAcademy, Inc. All rights reserved.
39
4bytes
4bytes
4bytes
4bytes
4bytesenv
argv
argc (0x00000002)
RET
SFP
높은 메모리 주소
4bytes
264
bytes
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))
264
bytes
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 RETdummy
dummy
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+”x67x45x23x01”+”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의 정확한 위치를
모른다는 점
함수호출 주소를 변조하기 위해서는 함수 포인터의
위치를 정확하게 알아내는 것이 매우 중요함
func
printit()
func
shell()
시스템 해킹17. Function Pointer (1)
명령 실행 및 이해
© 2015 TigerTeamAcademy, Inc. All rights reserved.
64
buf
20
dummy
20
56bytes
func
printit()
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
func
printit()
4
crap
4
dummy
8
* 스택의 구조는 앞 문제와 계속 동일함
© 2015 TigerTeamAcademy, Inc. All rights reserved.
67
func
printit()
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
4bytes
4bytes
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("%sn", s);
// 출력 결과: 가나다
printf("%dn", i);
// 출력 결과: 255
printf("%Xn", i);
// 출력 결과: FF
printf("%s %c %d %u %f %0.3f %X %x %02Xn", 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("%sn", s);
// 출력 결과: 가나다
printf("%dn", i);
// 출력 결과: 255
printf("%Xn", i);
// 출력 결과: FF
printf("%s %c %d %u %f %0.3f %X %x %02Xn", 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
%x
A
A
A
A
여기부분의 첫글짜
포맷문자열은 다음 주소글짜를 표기함
($esp 값이 +4만큼 이동함)
만약 해당 부분이 없다면 4f 대신
AAAA값 41414141이 출력되어야 함
fgets나 setreuid가 사용(??) 또는 반환
© 2015 TigerTeamAcademy, Inc. All rights reserved.
79
%x
A
A
A
A
%x
A
A
A
A
여기부분의 첫글짜
포맷문자열은 다음 주소글짜를 표기함
($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
%n
A
A
A
A
%n
A
A
A
A
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
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
| 정보보호 컨설팅(모의해킹 분야) 전문가 과정 |

More Related Content

What's hot

ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングjunk_coken
 
えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)otya mura
 
Format string Attack
Format string AttackFormat string Attack
Format string Attackicchy
 
실무자가 말하는 모의해킹
실무자가 말하는 모의해킹실무자가 말하는 모의해킹
실무자가 말하는 모의해킹양 한빛
 
第二回CTF勉強会資料
第二回CTF勉強会資料第二回CTF勉強会資料
第二回CTF勉強会資料Asuka Nakajima
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)Hiroshi Tokumaru
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよMasakazu Ikeda
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)kikuchan98
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達zaki4649
 
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチtrmr
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)abend_cve_9999_0001
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編hama7230
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すmonochrojazz
 
Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門shiracamus
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)makopi 23
 

What's hot (20)

Nmapの真実
Nmapの真実Nmapの真実
Nmapの真実
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
 
CTFとは
CTFとはCTFとは
CTFとは
 
えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)えっ今日はハッキングしてもいいのか?(CTF Web入門)
えっ今日はハッキングしてもいいのか?(CTF Web入門)
 
Format string Attack
Format string AttackFormat string Attack
Format string Attack
 
실무자가 말하는 모의해킹
실무자가 말하는 모의해킹실무자가 말하는 모의해킹
실무자가 말하는 모의해킹
 
第二回CTF勉強会資料
第二回CTF勉強会資料第二回CTF勉強会資料
第二回CTF勉強会資料
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ
(ISC)2 secure japan 2021 自動車のサイバーセキュリティアプローチ
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Marp Next Tips !
Marp Next Tips !Marp Next Tips !
Marp Next Tips !
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編
 
Use After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試すUse After Free 脆弱性攻撃を試す
Use After Free 脆弱性攻撃を試す
 
Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
 

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

(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라INSIGHT FORENSIC
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig baseINSIGHT FORENSIC
 
리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1Sangho Park
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법Youngjun Chang
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensicsINSIGHT FORENSIC
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016perillamint
 
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육NAVER D2 STARTUP FACTORY
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제Lee Sang-Ho
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략Cyworld AppStore (SK Communications)
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
Mr.Robot CTF Write-Up (Korean version)
Mr.Robot CTF Write-Up (Korean version)Mr.Robot CTF Write-Up (Korean version)
Mr.Robot CTF Write-Up (Korean version)Sehan Lee
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
(120114) #fitalk bootkit threat evolution in 2011
(120114) #fitalk   bootkit threat evolution in 2011(120114) #fitalk   bootkit threat evolution in 2011
(120114) #fitalk bootkit threat evolution in 2011INSIGHT FORENSIC
 
IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명JungWoon Lee
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전James (SeokHun) Hwang
 

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

(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
(Ficon2016) #2 침해사고 대응, 이렇다고 전해라
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig base
 
리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1리눅스 드라이버 실습 #1
리눅스 드라이버 실습 #1
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensics
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016
 
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육
[네이버D2SF] 안전한 서비스 운영을 위한 Ncloud 보안교육
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
Mr.Robot CTF Write-Up (Korean version)
Mr.Robot CTF Write-Up (Korean version)Mr.Robot CTF Write-Up (Korean version)
Mr.Robot CTF Write-Up (Korean version)
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
(120114) #fitalk bootkit threat evolution in 2011
(120114) #fitalk   bootkit threat evolution in 2011(120114) #fitalk   bootkit threat evolution in 2011
(120114) #fitalk bootkit threat evolution in 2011
 
IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명IBM DataPower OS(DPOS) 의 CLI 설명
IBM DataPower OS(DPOS) 의 CLI 설명
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
모바일 악성코드 분석 실무 요약(공개버전)_미완성 참고버전
 

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

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