목록분류 전체보기 (117)
EYEN
보호되어 있는 글입니다.

#1 버퍼오버플로우 취약점 : c언어나 c++에서 buffer에 데이터를 입력받을 때 입력 값의 크기를 검증하지 않아서 데이터가 다른 변수의 메모리를 덮어 씌우는 버그. 버퍼에 할당한 메모리보다 더 큰 양의 데이터를 집어넣어서 버퍼 안에 들어가지 못한 데이터가 다른 메모리에 들어가게 됨. 1. 스택의 기본 구조 buffer: 데이터가 저장되는 공간 sfp(saved frame pointer): 이전함수의 ebp 주소를 저장하고 있는 공간 ret:다음에 실행해야하는 명령이 위치한 메모리주소값 RET(4bytes) SFP(4bytes) buf 2. 버퍼오퍼플로우가 생기는 함수 - 예시 코드1 #include #include int main(int argc, char *argv[]) { char buf[256..
#1 보호기법 -셸 코드를 실행시킬 수 있는 조건과 그에 따른 보호기법 1. 반환 주소를 임의 주소로 덮을 수 있다.(Canary) 2. 버퍼의 주소를 알 수 있었다.-(ASLR)버퍼의 주소를 알기 어렵게 한다. 3. 버퍼가 '실행' 가능했다.-(NX bit)메모리 영역에서 불필요한 실행 권한을 제거하는 보호기법을 추가로 도입해야한다 1) Canary 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법 카나리의 위치 buf \x00 canary sfp ret 카나리 해제해서 컴파일하기 -fno-stack-protector //카나리 해제 카나리가 적용되면 바뀌는 부분 //프롤로그 0x00000000000006b2 : mov rax,Q..

#1 out of bound버퍼오버플로우랑 비슷한데, 이건 배열에서 발생하는 거다. 배열이나 범위를 선언하고, index값을 입력받을때 입력값을 검증하지 않아서 정해진 buf 주소의 밖(out of boundary)에 사용자가 값을 입력할 수 있게 된다. 1. 문제풀어보기1) fgets 함수함수 원형: char* fgets(char* str, int num, FILE* pFile); file+get+string을 조합한 이름, 파일에서 string을 가지고 오는 함수. char* str: 파일에서 갖고 온 문자열을 넣는 변수, 문자열을 가리키는 캐릭터 타입의 포인터 int num: 한번에 갖고 올 문자열의 길이를 넣는 변수 FILE* pFile: 파일의 파일 포인터 집어 넣기 함수의 동작: 문자열 끝의 ..

Ⅰ. 분석 대상 https://www.exploit-db.com/exploits/45694 libtiff 4.0.9 - Decodes Arbitrarily Sized JBIG into a Target Buffer libtiff 4.0.9 - Decodes Arbitrarily Sized JBIG into a Target Buffer EDB-ID: 45694 CVE: 2018-18557 Date: 2018-10-25 www.exploit-db.com 1. 취약점 개요 이 취약점은 libtiff 4.0.9 이하에서 발생합니다. 아래의 코드에서 JBIGDecode라는 함수가 JBIG이미지를 가져와서 디코딩하고 그 크기 만큼 버퍼에 _TIFFmemcpy함수로 복사하는 것을 확인할 수 있습니다. static in..
보호되어 있는 글입니다.

#1 PIE aslr이 코드영역에도 적용되기 때문에 고정주소가 없어서 코드가젯을 못씀. 1) 자세한 의미 aslr이 적용되면 바이너리가 실행될 때마다 .data .text .bss 등의 영역을 제외한 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑된다. 그러나 main함수의 주소는 매번 같다. 그래서 고정된 주소의 코드 가젯을 활용한 ROP를 수행할 수 있다. PIE는 aslr이 코드 영역에도 적용되게 해주는 기술이다. Position independent Executable(PIE)는 무작위 주소에 매핑돼도 실행 가능한 실행 파일을 뜻한다. aslr의 도입으로 인해 실행파일의 재배치가 필요했고, 호환성 문제로 인해 실행 파일도 무작위 주소에 매핑될 수 있게 하는 대신 원래 재배치가 가능했던 공유 ..

#1 어셈블리어로 구구단 구현하기 1. 컴파일 과정 1)전처리-hello.c->hello.i 필요한 헤더파일들을 불러옴 2)컴파일-hello.i->hello.s 고급 언어를 저급언어로 바꿈 3)어셈블-hello.s->hello.o 어셈블리어를 기계어로 바꾸어 오브젝트 파일 생성 4)링크-hello.0->hello.exe 여러 오브젝트 파일들끼리, 오브젝트 파일과 라이브러리를 합침 2. 파일 생성nano 파일명.s vi 파일명.s 3. 목적파일로 만들고 링킹하기nasm -f elf54 -o 파일명.o 파일명.s gcc -o 파일명 파일명.o4. memory segment 구조 1) stack: 지역변수를 포함한 함수에 대한 정보들을 포함한다. 여기서 취약점이 제일 많이 나온다. 버퍼오버플로우같ㅇ느 공격을 ..