7. 7
FPO (Frame Pointer Overwrite) [LOB golem → darkknight]
2017-03-12
시스템 해킹 기법 정리
int main(){
int main = 1;
…..
A();
…..
…..
}
void A(){
int a = 2;
…..
B();
…..
…..
}
void B(){
int b = 3;
…..
}
main
A
B
A
main
8. 8
FPO (Frame Pointer Overwrite) [LOB golem → darkknight]
2017-03-12
시스템 해킹 기법 정리
RET
SFP
1
RET
SFP
2
RET
SFP
3
RET
SFP
1
RET
SFP
2
RET
SFP
3
H
L
16. 16
FSB (Format String Bug) [pwnable.kr fsb]
Format String Bug의 약자로 C언어 printf() 함수 취약점
printf() 함수에 서식 문자(%~)를 지정하지 않고 배열을 그대로 넘겨줬을 때의 결과
하지만 이 때 buf 배열에 서식 문자가 들어있다면?
17. 17
FSB (Format String Bug) [pwnable.kr fsb]
하지만 이 때 buf 배열에 서식 문자가 들어있다면?
배열 안에 서식문자가 들어가니 서식 문자에 맞는 16진수(%x) 10진수(%d)가 찍혀 나온다
19. 19
FSB (Format String Bug) [pwnable.kr fsb]
정상적으로 printf() 함수를 사용했을 때의 결과
컴파일러의 경고도 없고 buf 배열 안에 서식 문자가 있음에도 문자열로 취급한다.
20. 20
FSB (Format String Bug) [pwnable.kr fsb]
기본적인 포맷 스트링 버그 공격은 %n을 이용
%n은 이 서식 문자를 만날 때 까지 총 출력된 값(바이트 수,글자 수,공백 포함)를
계산한 값을 그 다음 메모리 값의 위치(포인터로 값을 한 번 참조)에 넣는 기능을
한다
예)
printf(“%3735928559d%n”, &ptr) 의 의미:
0xdeadbeef의 10진수 값 >> ptr에 저장
29. 29
RTL (Return to libc) [LOB darkknight → bugbear]
2017-03-12
시스템 해킹 기법 정리
동적 컴파일시 갖는 공유 라이브러리로 리턴
NX bit(Never Executable bit)
기법 우회
→ 윈도우 DEP(Data Execution
Prevention)
→ 쉘코드를 실행하지 못하게 함
RTL
30. 30
RTL (Return to libc) [LOB darkknight → bugbear]
2017-03-12
시스템 해킹 기법 정리
PLT
GOT
Procedure Linkage Table
→ 함수(프로시저)를 나열한 테이블
→ 외부 라이브러리 함수 사용 시 PLT를 참조
Global Offset Table
→ 실제 함수(프로시저)의 주소를 갖는 테이블
→ GOT 참조로 함수의 실제 주소로 접근해 실행
@got.plt
PLT
0x80483e0
libc의 함수 주소
GOT
0x804a018
함수 실행
libc
libc의 함수 주소
36. 36
ROP (Return-Oriented Programming)
2017-03-12
시스템 해킹 기법 정리
ASLR
→ 주소 공간 랜덤화
→ 스택, 힙 주소를
랜덤화해서 주소를 예측할
수 없음
NX bit (DEP)
→ 데이터 실행 방지
→ 설정되어 있는 메모리
공간에서는 명령어
실행되지 않음
ASCII-armor
→ 공유 라이브러리 영역
상위 주소에 0x00(NULL)
을 넣어 공격자의 접근을
막음