목록Pwnable/Study (14)
Iriton's log
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. Return Oriented Programming리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법입니다. 공격자는 이를 이용해서 문제 상황에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다.스택 카나리, NX를 적용하여 컴파일한 바이너리를 ROP를 이용한 GOT Overwrite으로 익스플로잇 하는 실습(wargame: rop)를 진행한다.// Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#include #include int main() { char b..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.Return to Library프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리의 코드 영역과 바이너리가 참조하는 라이브러리의 코드 영역이다.여기서 공격자가 주목한 것은 다양한 함수가 구현된 라이브러리이다. 몇몇 라이브러리에는 공격에 유용한 함수들이 구현되어 있다. 예를 들어 리눅스에서 C언어로 작성된 프로그램이 참조하는 libc에는 system, execve 등 프로세스의 실행과 관련된 함수들이 구현되어 있다.이런 함수들로 NX를 우회하고 셸을 획득하는 공격을 Return to library라고 불린다.실습을 진행할 코드이다.// Name: rtl.c// Compile: gcc -o rtl..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.라이브러리프로그램들이 함수나, 변수를 공유해서 사용할 수 있게 한다.자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다.C의 표준 라이브러리인 libc는 우분투에 기본으로 탑재된 라이브러리 링크많은 프로그래밍 언어에서 컴파일의 마지막 단계로 알려져 있다.프로그램에서 어떤 라이브러리의 함수를 사용한다면 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다.리눅스에서 c 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일로 번역된다.오브젝트 파일은 실행 가능한 형식을 갖추고 있지만, 라..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.NX(No-eXecute)실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법어떤 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해지기 쉽다.예를 들어, 코드 영역에 쓰기 권한이 있으면 공격자는 코드를 수정하여 원하는 코드가 실행되게 할 수 있고, 반대로 스택이나 데이터 영역에 실행 권한이 있으면 Return to Shellcode와 같은 공격을 시도할 수 있음.CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다.checksec 명령어를 이용하..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다.분석보호기법 탐지보호기법을 파악할 때 주로 사용하는 툴이 checksec다.pwntools를 설치할 때 같이 설치되어 ~/.local/bin/checksec에 위치한다.checksec을 사용하면 간단한 커맨드 하나로 바이너리에 적용된 보호기법들을 파악할 수 있다.만약 해당 커맨드를 사용했을 때 command not found 에러가 발생한다면, ~/.bashrc 파일의 마지막 줄에 다음 줄을 추가한다.export PATH="$HOME/.local/bin/:$PATH" 취약점 탐색1. buf의 주소이 예제에서는 실습의 편의를 위해 buf 의 주소 및 rbp 와 buf 사이의 주소 차이를 알려준다.print..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. Stack Canary함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다.카나리 값의 변조가 확인되면 프로세스는 강제 종료된다.스택 버퍼 오버플로우로 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 된다.이 경우, 에필로그에서 변조가 확인되어 공격자는 실행 흐름을 획득하지 못합니다. Canary의 작동 원리정적 분석스택 버퍼 오버플로우가 발생하는 예제 코드// Name: canary.c#include int main() { char buf[..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 분석 취약점 분석/트리거 // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 스택 버퍼 오버플로우 스택의 버퍼에서 발생하는 오버플로우 버퍼 CS에서 버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소의 의미로 사용된다. 데이터 처리속도가 다른 두 장치가 있을 때, 이 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다. 이해를 돕기 위해 키보드에서 데이터가 입력되는 속도보다 데이터를 처리하는 속도가 느린 프로그램이 있다고 가정해 보자. 사 이에 별도의 장치가 없다면 키보드의 입력 중에 프로그램에서 수용되지 못한 데이터는 모두 유실될 것이다. 이런 문제를 해결하고자 수신 측과 송신 측 사이에 버퍼라는 임시 저장소를 두고 이를 통해 간접적으로 데이..