x86

ropasaurusrex 문제 풀이1. 취약점 확인먼저 checksec 으로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/Wargame/ropasaurusrex/ropasaurusrex' Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)x86 아키텍처에 NX-bit 를 제외하곤 아무 보호기법도 걸려있지 않은 것을 알 수 있다. C 코드는 주어지지 않고 바이너리 파일만 주어졌다.gdb 로 어셈블리를 확인해보자main 함수가 없는 것을 알 수 있다.read, write 함수는 있다..
ROP (Return Oriented Programming)1. ROP ?Return Orented Programming 으로 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 공격 기법이다.공격자는 보호기법에 맞춰 return to library, return to dl-resolve, GOT overwrite 등의 페이로드를 구성할 수 있다.  2. 익스플로잇 구성1. 코드 확인// Name : rop.c// Compile : gcc -o rop rop.c -m32 -mpreferred-stack-boundary=2 -fno-pic -no-pie#include void tools(){ asm ( "pop %edi;" "pop %esi;" "pop %ed..
보호되어 있는 글입니다.
RTL Chaning (x86)1. RTL Chaning 이란?RTL 공격에서 RET 주소를 변조하여 하나의 라이브러리 함수를 호출했다.RTL Chaning 은 RTL 공격 기법을 응용하여 여러개의 라이브러리 함수를 호출하는 공격 기법이다.  2. 함수 호출 방법1. 코드 확인// Name : rtl_chaning.c// Compile : gcc -m32 -mpreferred-stack-boundary=2 -fno-stack-protector -fno-pic -no-pie -o rtl_chaning rtl_chaning.c#include void func1(int a) { printf("func1 val1: %d\n", a);}void func2(int b) { printf("fucn2 val..
RTL 1. RTL (Return to Library)1. RTL 이란?Nx-bit 보호 기법이 적용되면 code 영역을 제외한 영역에 실행 권한이 부여되지 않는다.즉, 스택에 실행 권한이 부여되지 않는다.그렇기 때문에 스택에 shellcode 를 넣고 RET 에 덮어씌워도 실행 권한이 없어 shellcode 가 실행되지 않는다.이를 우회하기 위한 기법이 Return to Library 이다. 프로세스에 실행 권한이 있는 메모리 영역은 바이너리의 코드 영역과 라이브러리의 코드 영역이다.우리가 사용하는 함수들은 (ex. printf) 모두 라이브러리에 들어있다.RTL 은 RET 에 라이브러리 함수를 덮어씌워 실행되도록 하는 공격 기법이다. 2. 함수 호출 과정 (x86)1. callme 호출 전// Nam..
셸코드 (Shellcode)1. 셸코드1. Shell ?셸(Shell)이란 운영체제에 명령을 내리기 위해 사용되는 사용자의 인터페이스이다.운영체제의 핵심 기능을 하는 프로그램인 커널(Kernel)과 대비된다. 셸을 획득하면 시스템을 제어할 수 있게 되므로 통상적으로 셸 획득을 시스템 해킹의 성공으로 여긴다. 이러한 셸을 얻을 수 있는 코드를 셸코드라고 한다. 2. Shellcode 란?해킹 분야에서 상대 시스템을 공격하는 것을 익스플로잇(Exploit)이라 한다. Shellcode 는 익스플로잇을 위해 제작된 어셈블리 코드 조각이다.일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용해서 "셸"이 접두사로 붙었다. execve 셸코드는 임의의 프로그램을 실행하는 셸코드이다.이를 이용하면 서버의 셸을 획득..
x86 메모리 구조 (8086 Memory Architecture) 1. 메모리 구조 1. 8086 시스템 메모리 구조 인텔 32비트 시스템, 8086 시스템의 메모리 구조는 위와 같다 커널 (Kernal) 영역 : OS의 시스템 코드가 로드 되는 부분이다. 건드릴 수 없는 영역이다 Off-Limit 영역 : 사용자가 커널 영역에 접근하지 못하도록 할당해둔 공간이다 유저 영역 : 유저가 실제 사용하는 영역이다. 코드, 스택, 힙 등이 포함된다 Null Pointer 할당 영역 : 모두 0이고 변경 불가능하다. 시스템 보호 차원에서 만들어둔 영역이다. 위의 메모리 구조는 윈도우 기준으로, 리눅스는 커널 (Kernal) 영역이 1GB 이다. 운영체제는 하나의 프로세스를 실행시키면 이 프로세스를 세그먼트 (s..
GunP4ng
'x86' 태그의 글 목록