SystemHacking(95)
-
[1] 어셈블리 배경지식 / xxd, objdump 명령어 사용법
어셈블러를 하기 전에 알아두어야 하는 것은 ELF 라는 리눅스 실행파일 구조이다 리눅스에서 실행파일들을 ELF 라는 구조를 가지고 파일시그니쳐에 ELF 가 있다 ELF의 형식을 간단히 표현하자면 다음과 같다 [ ELF 구조 ] : 여러개의 섹션들로 나뉘어 진다 1> .text section 명령어가 들어가있는 섹션 - 실행코드가 존재하는 역역 - 읽기전용 - 실행가능한 메모리 영역 - 기계어 코드 ( 0 , 1 ) 이다 2> .rodata section - 읽기만 가능한 데이터이다 3> .data section -읽기,쓰기가 가능한 메모리 영역 - 초기값을 가지는 글로벌 변수 ex) 전역변수 4> .bss 섹션 - 읽기,쓰기가 가능한 메모리 영역 - 초기화 되지 않은 데이터 영역 - 초기값이 없는 글로벌..
2017.10.15 -
가상머신에서 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 -
Protostar Heap3 [ Double Free Bug ]
참고한 사이트 : https://bpsecblog.wordpress.com/2016/10/06/heap_vuln/ Protostar 3번 문제입니다. 더블프리버그(DFB)에 관한 문제입니다[ 그림1 ]해당 프로세스는 변수 a,b,c 가 32byte만큼 메모리가 동적할당 된 후 인자들을 입력받은 다음 반환되는 흐름입니다우선 힙 구조를 살펴 보면 다음과 같습니다 [ 높은 주소 ] Stack 빈 공간 c ( 32byte ) b ( 32byte ) a ( 32byte ) [ 낮은 주소 ] 낮은주소에서 높은주소의 방향으로 해당 그림과 같이 a,b,c가 위치하고 있습니다free(c), free(b), free(a) 과정의 아래의 그림들을 살펴보면서 설명하겠습니다 $gdb file heap3(gdb) breab *a..
2017.06.14 -
Protostar Heap2 [ Heap Overflow ]
Protostar Heap2번 문제입니다[ 그림1 ] Heap에서는 Stack과는 반대로 낮은주소에서 높은주소로 데이터가 쌓입니다해당 문제에서는 service변수에서 데이터를 입력받을 때 오버플로우 시켜서 auth chunk를 건들일 수 있는지를 물어보고 있습니다따라서 우리는 service변수를 낮은 주소에 위치시킨 그 이후 주소에 auth chunk를 위치시킵니다 [ 그림2 ] 위 그림을 보시면 service : 0x0804c008 , auth : 0x0804c018 가 출력되는 것이 확인됩니다service와 auch청크와의 거리는 16byte만큼차이가 나서 "A"*16 을 오버플로우시키면 auth값을 변질시킬 수 있습니다
2017.06.14 -
Protostar Heap0 [구조체활용]
Protostar Heap0번 문제입니다 [ 그림1 ] 힙에서의 메모리 구조는 스택의 구조와는 반대로 생각하시면 됩니다( First-in-Frist-out )임의로 인자를 주어 파일을 실행시켜보면 포인터 d와 f의 주소가 나와있습니다이를 이용해 메모리 구조를 그려보자면 다음과 같습니다[ 높은 주소 ][ Stack ][ f ][ dummy (6byte) ][ d ][ 낮은 주소 ] [ 그림2 ] 포인터 d가 가리키고 있는 구조체 data의 name변수를 버퍼 오버 플로우 시키고 나머지 dummy값도 버퍼오버플로우시킵니다그리고 objdump명령어를 사용하여 알아낸 winner()함수의 주소를 포인터f의 값으로 덮어 씌우면 공격성공입니다
2017.06.14