System Hacking 10

basic_rop_x86(Bypass NX & ASLR)

basic_rop_x86(Bypass NX & ASLR) 문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_rop_x86)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 문제 파일 libc.so.6 basic_rop_x86.c basic_rop_..

basic_rop_x64(Bypass NX & ASLR)

문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_rop_x64)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) 문제 파일 basic_rop_x64.c basic_rop_x64 libc.so.6 풀이 checksec으로 어떤 보호 기법이 적용되어..

rop(Bypass NX & ASLR)

rop(Bypass NX & ASLR) 문제 정보 Exploit Tech: Return Oriented Programming에서 실습하는 문제입니다. 풀이 문제 파일은 다음과 같다. rop.c rop libc-2.27.so Dockerfile checksec으로 rop 바이너리 파일을 확인해 본 결과 CANARY, NX, ASLR의 보호기법이 적용되있는 것을 알 수 있다. rop.c의 코드는 다음과 같다. // Name: rop.c // Compile: gcc -o rop rop.c -fno-PIE -no-pie #include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); ..

Return to Library(Bypass NX & ASLR)

문제 정보 Exploit Tech: Return to Library에서 실습하는 문제입니다. 풀이 문제 파일인 rtl, rtl.c을 실습 환경에 다운로드 받은 후 rtl.c 코드를 확인해보았다. 소스 코드를 분석한 결과 buf의 크기가 0x30인 반면, 첫 번째 입력과 두 번째 입력에서 모두 버퍼 오버플로우가 존재한다. 또한 /bin/sh와 system@plt가 보이며 이는 컴파일 시 -no-pie로 컴파일 하였기 때문에 주소가 고정되어 있다. 따라서 system(”/bin/sh”)와 같은 쉘을 실행할 수 있다고 알 수 있다. checksec툴을 이용해 PIE가 진짜 비활성화 되어 있는지 확인했다. 익스플로잇을 설계해보면 먼저 카나리를 우회하고 리턴 가젯을 이용해 rdi의 값을 /bin/sh의 주소로 설..

ssp_001(Stack Canary)

ssp_001(Stack Canary) 문제 정보 이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) 풀이 먼저 Environment에서 환경 정보를 확인해보면 i386인 32비트 리틀 엔디언 방식을 사용했고 어떤 보호 기법..

Return to Shellcode(Stack Canary)

문제 정보 Exploit Tech: Return to Shellcode에서 실습하는 문제입니다. 풀이 문제 파일인 r2s 와 r2s.c 파일을 다운받아서 r2s.c 소스 코드를 먼저 살펴본 결과 buf의 크기는 0x50의 크기인데 첫 번째 입력에 read 함수에 0x100만큼의 입력을 받고 두 번째 입력에 개행문자가 나오기 전에 입력을 받는 gets 함수를 사용하고 있기 때문에 스택 버퍼오버플로우 취약점을 확인할 수 있었다. 다음으로 소스 코드에서init() 함수로 setvbuf로 입력과 출력이 즉시 처리되도록 처리하였는데 인터넷으로 찾아본 결과 이를 통해 CTF나 exploit 개발 시에 버퍼링이 원인이 되는 예상치 못한 상황을 최소화하기 위해 넣은 것이라고 한다. 다음으로는 컴파일 시 -zexecst..

basic_exploitation_001(Stack Buffer Overflow)

문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 풀이 먼저 Environment 부분을 확인해보면 리눅스 32비트 아키텍처에 리틀 엔디언 방식인 것을 확인할 수 있고 따로 보호기법도 적용되지 않은 것을 알 수 있다. 문제 ..

basic_exploitation_000(Stack Buffer Overflow)

문제 정보 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{…} 입니다. Environment Ubuntu 16.04 Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments 풀이 먼저 Environment 부분에서 Arch 부분을 확인했을 때 i386-32-little 라고 되어 있고 이..

Return Address Overwrite(Stack Buffer Overflow)

문제 정보 Exploit Tech: Return Address Overwrite에서 실습하는 문제입니다. 풀이 먼저 문제 파일을 VMWare의 Ubuntu 18.04에 다운받아 확인해 본 결과 소스 코드 안에 쉘을 실행하는 코드가 있다. 해당 rao.c 파일에서 취약점을 분석해본 결과 scanf 함수에서 입력 문자의 길이를 지정하고 있지 않기 때문에 버퍼오버플로우 취약점이 있다고 유추할 수 있다. 스택 버퍼 오버플로우 문제이기 때문에 main 함수의 반환 주소를 get_shell() 함수의 반환 주소로 오버플로우를 통해서 변경한 후 드림핵에서 제공한 접속 정보로 익스플로잇을 해볼 것이다. rao 파일과 rao.c 파일을 받았고 rao파일은 실행하면 Input 화면이 나오고 return 0이 되어서 종료가..

shell_basic(Shellcode)

문제 정보 입력한 셸코드를 실행하는 프로그램입니다.main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 위치와 이름 은 /home/shell_basic/flag_name_is_loooooong입니다.감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요! 플래그의 형식은 DH{…} 입니다. 참고 $ cat write.asm section .text global _start _start: ;/* write(fd=1, buf='hello', n=48) */ ;/* push 'hello\\x00' */ mov rax, 0x0a6f6c6c6568 push rax mov rsi, rsp push 1 pop rdi p..