본문 바로가기

버퍼오버플로우

Buffer Overflow - RTL(Return to library) 기법 /* written by kaspy (kaspyx@gmail.com)*/ 1. 서론 RTL(Return to library) 기법이란, 버퍼오버플로우(Buffer Overflow, 이하 BOF) 취약점이 존재하는 프로그램을 익스플로잇 할때 해당 프로그램의 스택(stack) 영역에 실행 권한이 존재하지 않을때 프로그램이 사용하는 glibc 내에 존재하는 함수를 호출하는 기법이다. 요즘 대부분의 리눅스 및 윈도우 시스템은 NX 또는 DEP등으로 스택(stack) 영역에 실행 권한을 주고있지않고, 특별한 컴파일 옵션을 주어서만 실행권한을 줄수있는만큼 간단하면서도 자주 사용되는 방법이다. 포너블문제(pwnable)에서는 기본중에 기본이니 잘알아두도록하자. * 테스트 환경은 우분투 리눅스 16.04 64bit 입.. 더보기
ROP(Return Oriented Programming) /* written by kaspy (kaspyx@gmail.com)*/ 1. 시작하며 ROP(Return Oriented Programming) 이란 버퍼 오버플로우 취약점이 발생하는 바이너리를 exploit 할때 가장 많이 사용되는 기법으로 바이너리 내부에 존재하는 gadget을 사용하여 호출 함수 및 인자를 조작하는 방법이다. 솔직히 관련 자료도 굉장히 많은데.. 나도 복습 할겸 정리해보았다. 일반적으로 ASLR이 걸려있는 바이너리는 Memory leak 또는 got, plt 등에 함수가 존재해야하는 특수한 전제가 붙어야 exploit 가능하지만, ROP 기법을 사용하면 (PIE가 걸려있지않아야함) 바이너리의 고정주소의 gadget을 활용하여 exploit 할수있다. 여기서 gadget이란 바이너리.. 더보기
리눅스 쉘코드(Shell Code)만들기 /* written by kaspy (kaspyx@gmail.com)*/ 버퍼 오버플로우나 포맷스트링버그 등의 취약점을 이용해서 해킹을 하는데이때 임의의 데이터를 입력할때, 쉘을 실행 시켜주는 루틴을 넣어주는데 이것이 바로 쉘코드입니다.그럼 이번 장에서는 쉘코드를 어떻게 만드는지 써보고자합니다.리눅스상에서는 쉘을 실행시켜주는 명령어 함수가 뭐가 있을까요??system(), execve(), execpl() 등등이 있는데 비교적 사용법이 단순한 execve() 함수로 작성을 해보겠습니다.아래와 같이 간단한 코딩을 해보겠습니다. ** 테스트한 환경은 32비트 우분투 리눅스 9.x 입니다.** 1. 쉘코드 프로그래밍 하기 void main(){ execve("/bin/sh",NULL,NULL);}// comp.. 더보기
버퍼오버플로우(Buffer Overflow) 해킹기법이란?? /* written by kaspy (kaspyx@gmail.com)*/ 정보보안 분야에서 버퍼오버플로우(Buffer Overflow) 해킹기법은 그 역사가 굉장히 오래되었고, 발생했을시에 굉장히 심각한 결함으로 이어질수 있는 취약점입니다. 버퍼오버플로우 해킹기법의 최초 시발점은 1988년 모리스웜을 들수있습니다. 네트워크를 통해 데이터를 입력받아 처리했던 당시의 컴퓨터는 웜에 의해 수천대의 컴퓨터가 감염되어 파괴되었고, 피해액만 100만달러가 넘었다고하네요. 버퍼오버플로우에 대한 간단한 정의를 하자면, 어떤 프로그램에 비정상적인 데이터를 많이 주입하여, 오류를 발생시키거나, 임의의 악성 코드를 실행하게 만드는 기법이라고 할수있습니다.(이하 BoF) BoF 취약점은 포인터가 존재하는 c/c++ 및 c# .. 더보기