no image
Return to Library
문제 코드// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt"); // Leak canary printf("[1] Leak Canary\n"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); // Overwrit..
2024.05.29
no image
Exploit Tech: Return to Library
지금까지 학습한 공격 기법과 보호 기법Return Address Overwrite: 반환 주소를 악성 함수의 주소로 덮어서 셸 획득Stack Canary: 스택 프레임의 반환 주소 전에 랜덤한 카나리를 주입하여 반환 주소를 덮기 어렵게 함Return to Shellcode: 카나리를 우회하고, 셸 코드를 주입한 버퍼의 주소로 반환 주소를 덮어서 셸 획득ASLR: 임의 버퍼의 주소를 알기 어렵게 함NX: 각 세그먼트에 불필요한 실행권한을 제거함으로써 공격자가 임의 버퍼에 주입한 코드를 실행하기 어렵게 함 Return to LibraryNX로 인해 공격자가 버퍼에 주입한 셸 코드를 실행하기는 어려워졌지만, 스택 버퍼 오버플로우 취약점으로 반환 주소를 덮는 것은 여전히 가능했다.→ 따라서 공격자들은 실행 권한..
2024.05.29
no image
Background: Library - Static Link vs. Dynamic Link
01 라이브러리라이브러리는 컴퓨터 시스템에서, 프로그램들이 함수나, 변수를 공유해서 사용할 수 있게 한다.printf, scanf, strlen, memcpy, malloc 등 프로그램에서 공통으로 사용하는 함수들이 있다. C언어를 비롯하여 많은 컴파일 언어들은 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다.→ 라이브러리를 사용하면 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어서 효율이 높아짐 02 링크1. 링크 전링크(Link)는 많은 프로그래밍 언어에서 컴파일의 마지막 단계이다.프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다. // Name..
2024.05.22
no image
Mitigation: NX & ASLR
NXNo-eXecute(NX) : 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다.gdb의 vmmap 명령어로 확인하면 NX가 적용된 바이너리에는 코드 영역 외에 실행 권한이 없는 것을 확인할 수 있다. Checksec을 이용한 NX 확인Return to shellcode에서 사용한 r2s에 NX 보호기법을 적용한다.gcc -o r2s_nx r2s.c로 컴파일한 후, checksec을 사용했다.checksec으로 확인해본 결과, NX가 활성화된 것을 알 수 있었다. #!/usr/bin/env python3# Na..
2024.05.22
no image
ssp_001
canary가 존재하며 NX enabled이기 때문에 stack에 실행권한이 없음을 알 수 있다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}void get_shell() { system("/bin/sh");}void print_box(unsigned char *box, int idx) { printf("Element of..
2024.05.15
no image
Return to Shellcode
// Name: r2s.c// Compile: gcc -o r2s r2s.c -zexecstack#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); //buf의 주소 printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); //buf와 rbp값 사이의 거리 printf("[1] Leak the canary\n"); printf("Input: ..
2024.05.14
no image
Exploit Tech: Return to Shellcode
01 분석1. 보호기법 탐지 checksec : 보호기법을 파악할 때 주로 사용하는 툴pwntools를 설치할 때 같이 설치되어 ~/.local/bin/checksec에 위치// Name: r2s.c// Compile: gcc -o r2s r2s.c -zexecstack#include #include int main() { char buf[0x50]; printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); printf("[1] Leak the canary\n"); printf("Input: "); fflu..
2024.05.14
no image
Mitigation: Stack Canary
Stack Canary스택 카나리는 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다.카나리 값의 변조가 확인되면 프로세스는 강제로 종료된다. 스택 버퍼 오버플로우로 반환 주소를 덮으려면 반드시 카나리를 먼저 덮어야 하므로 카나리 값을 모르는 공격자는 반환 주소를 덮을 때 카나리 값을 변조하게 된다. 01 카나리의 작동 원리1. 카나리 정적 분석#include int main() { char buf[8]; read(0, buf, 32); return 0;}스택 버퍼 오버플로우 취약점이 존재하는 코드를 작성한다. 카나리 비활성화gcc -o no_canary canary.c -fno-stack-protector컴파일 옵션으로..
2024.05.07
no image
basic_exploitation_001
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}void read_flag() { system("cat /flag");}int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0;}buf라는 크기가 0x80(16진..
2024.05.07
Prev 1 2 3 4 5 6 Next
반응형