SystemHacking(95)
-
Protostar Stack1 [little endian]
Protostar Stack1번입니다 버퍼오버플로우 시킨 후 " modified "변수에 0x61626364 라는 값을 덮어씌우면 됩니다" little endian " 규칙을 적용시켜야합니다little endian 은 1byte씩 주소값을 순서를 반대로 입력시키는 것입니다코드는 아래 사진과 같습니다
2017.06.11 -
Protostar Stack0 [BufferOverflow]
Protostar Stack0번입니다 gets()함수를 이용해서 문자열을 입력받아 " buffer "변수에 저장합니다 문자를 64byte만큼을 입력하면 buffer변수의 공간은 가득채워지고 문자를 더 입력하면 버퍼 오버플로우가 발생합니다하여 modified 변수의 값이 변질됩니다
2017.06.11 -
[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 -
[3] Buffer Overflow 공격
해당 게시글의 내용은 해커스쿨-도서관 에서 다운받은 파일을 기반으로 저의 공부를 위해 작성했습니다 " 해커 지망자들이 알아야 할 Buffer Overflow Attack의 기초 " By 달고나 님의 pdf의 사진과 글을 요약 정리했습니다 공격을 위해 먼저 취약점이 있는 프로그램을 하나 생성하도록 하겠습니다 strcpy()함수를 이용해 인자로 넘어온 문자열을 buffer 문자열배열에 저장하는 소스코드입니다 [1],[2] 에서 배웠던 내용을 토대로 쉽게 이해 할 수 있을겁니다 1024byte의 버퍼공간을 쉘 생성코드와 NOP로 채우고 base pointer있는 SFP(4byte) 공간에도 NOP로 채웁니다 마지막으로 return address 가 들어있는 RET주소에 쉘 생성코드가 저장되어 ..
2017.06.03