SystemHacking/System(9)
-
가상머신에서 C언어 파일 컴파일 과정
가상머신 VMware에서 C언어 파일을 컴파일 해서 실행파일로 만드는방법에 대해서 알아보겠습니다 간단히 말하자면, C언어 파일을 만든뒤 컴파일하면 끝입니다 아래는 C언어 파일입니다 ( #vi hello.c ) 유닉스 운영체제에서 무료로 제공되는 컴파일러 gcc 를 사용하겠습니다 #gcc hello.c -o hello -o ( output ) 옵션 : 출력파일명 = hello file 명령어를 통해서 해당 파일의 종료를 확인할 수 있습니다 hello 라는 실행파일이 생성되었고, 실행시킬 수 있습니다 gcc를 이용해서 쉽게 C언어 파일을 실행파일로 컴파일 하였습니다 컴파일 되어지는 과정에 대해서 알아보겠습니다 [ 컴파일 과정 ] 1> 전처리 과정 hello.c -> hello.i include, define..
2017.10.12 -
[8] Use After Free / Double Free Bug
https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/ 해당 블로그를 참고하였고, 해당 내용은 공부하기 편하도록 단지 정리만 해놓은 문서입니다.Heap영역은 컴파일러가 예측할 수 없는 프로그래머가 관리하는 영역입니다동적할당으로 인해 컴파일 시기에 크기를 알 수 없는 데이터를 관리합니다이전 Heap게시글에서는 Heap Overflow 를 공부했고, 이번에는 UAF와 DFB에 대해 알아보겠습니다 [ UAF ] ( Use After Free )말그대로 free가 일어난 후에 발생하는 현상입니다ex1.heap.c #include #include int main(){ int *heap1; int *heap2; int *heap3; heap1 = (int*)malloc(25..
2017.06.16 -
[7] PLT / GOT / objdump활용법
[1] PLT ( Procedure Linkage Table )PLT는 일종의 실제 호출 코드를 담고있는 테이블로써 _dl_resolve함수를 통해서 실제 시스템 라이브러리 호출이 이루어진다 [2] GOT ( Global Offset Table )GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있다PLT가 외부 프로시져를 호출할 때 GOT를 참조해서 해당 주소로 점프한다 ex) 어떤 프로그램에서 printf()함수를 호출한 상황[1] printf()함수를 처음 호출 했을 때 과정1> printf()함수 호출2> PLT로 이동3> dl_resolve()함수 실행4> GOT에 printf()함수의 주소를 저장5> printf()함수의 실제 주소로 점프한다 [2] 다시한번 printf()함수를..
2017.06.14 -
[6] Format String Bug [FSB]
원재아빠님의 Format String 강좌를 보면서 개인공부를 위해 작성하였습니다. 포맷 스트링이란 변수의 형태를 지정해주는 것입니다 종류에는 %d : 정수형 상수 int %c : 문자형 char %f : 실수형 상수 float %x : 16진수 %o : 10진수 %s : 문자 스트링 등이 있으며, 중요한 %n 도 있습니다 [ 포맷스트링 예제 ] 포맷스트링의 빈틈은 다음과 같은 소스코드에서 발생합니다 #vi test2.c #gcc -o test2 test2.c [ 그림1 ] printf()함수에서 받아들인 변수 put을 스트링의 여과 없이 그대로 출력해주고 있습니다 여기서 문제가 발생합니다. 특정 스트링을 임의로 사용자가 넣으면 특이한 현상이 발생합니다 [ 그림2 ] fgets()를 통해서 put에 문자..
2017.06.08 -
[5] Heap Buffer Overflow ( Heap기반의 버퍼오버플로우 )
버퍼오버플로우공격은 Heap기반과 Stack기반으로 나뉘어집니다 Stack기반의 버퍼오버플로우공격은 1~4 게시글에서 공부했고 이번에는 Heap기반의 버퍼오버플로우 공격에 대해서 알아보겠습니다 힙 오버플로우란 힙 데이터 영역에서 일어나는 버퍼 오버플로우로써 스택기반 오버 플로우와는 다른 방법으로 공격합니다 힙 오버플로우 기술은 동적 메모리 할당 연결을 덮어 씀으로써 프로그램의 함수 포인터를 조작합니다 방식 : 버퍼오버플로우시켜 접근해 포인터가 가르키는 값을 변경하여 임의의 파일에 접근하거나 임의의 코드를 실행시킨다 예제를 만들어서 설명하겠습니다 [$vi /tmp/heap1.c] [ 그림1 ] 컴파일 후 인자로 HELLO 를 넣고 실행시켜보겠습니다 [ 그림2 ] 동적할당 시켜준 buf와 datafile의 ..
2017.06.07 -
[4] 환경변수를 이용한 버퍼 오버플로우 공격 ( 에그쉘)
게시글 [3] 에서 못다한 환경변수를 이용한 버퍼 오버 플로우 공격에 대해서 설명해드리겠습니다 해커스쿨 FTZ 문제들을 예로 들어서 어떤 식으로 환경변수를 사용하는지에 대해서 설명하겠습니다 환경변수를 사용한 공격에는 2가지 방법이 있습니다 1. 에그쉘을 이용해 환경변수를 생성하여 사용하기 2. 직접 환경변수를 선언해서 환경변수를 사용하기 1. 에그쉘을 이용해 환경변수를 생성하여 사용하기 ( /tmp/eggshell.c ) [level12@ftz tmp]$ cat eggshell.c #include #define DEFAULT_OFFSET 0 #define DEFAULT_BUFFER_SIZE 512 #define DEFAULT_EGG_SIZE 2048 #define NOP 0..
2017.06.05