ROP

가젯 찾는 법1. 가젯?1. 가젯이란?메모리에 존재하는 명령어를 얘기한다.ret 로 끝나고, 공유 libc 나 바이너리 안에 존재한다. x86 에서는 pop 을 이용해 esp 값을 조정해 호출할 인자수를 조정한다.x64 에서는 pop rdi, pop rsi 등의 레지스터를 이용해 인자를 전달한다. 2. x64 가젯x64 환경에서는 rdi, rsi, rdx, rcx, r8, r9 의 순으로 인자를 전달한다.따라서 pop rdi, pop rsi, pop rdx 같은 함수의 인자 순서에 맞는 레지스터를 찾아야 한다. 가젯을 찾는 방법을 알아보자  2. objudmp 명령어objudmp -d "파일명" | egrep "가젯" -d 는 파일을 디스어셈블 할 때 사용하는 옵션이다. objdump 로 가젯을 찾을 수..
basic_rop_x86 문제풀이1. 취약점 확인1. C언어checksec 으로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/Dreamhack/basic_rop_x86/basic_rop_x86' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: Nox86 아키텍처에 Partial RELRO, NX-bit 가 적용된 것을 알 수 있다.Partial RELRO 가 적용되어 GOT Overwrite 가 가능하다. C 코드를 확인해보자#include..
rop 문제 풀이1. 취약점 확인1. C언어checksec 명령어로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/Dreamhack/rop/rop' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)x64 아키텍처에 Partial RELRO, Nx-bit, Stack Canary 가 적용된 것을 알 수 있다.Partial RELRO 가 적용되어 GOT Overwirte 는 할 수 있다. C 코드를 확인해보자// Name: rop.c// Compile: gcc -o rop rop..
ROP (Return Oriented Programming)1. ROP 이전 글은 x86 아키텍처에서의 페이로드였다.x64 아키텍처에서의 페이로드를 알아보자 x86 은 함수의 주소 + 가젯 + 인자의 순서였다.x64 는 가젯 + 인자 + 함수의 주소 순서이다. 그리고 x86 아키텍처는 인자를 스택에 저장해서 전달하지만 x64 는 레지스터로 전달하기 때문에 가젯의 레지스터가 중요하다. 2. 익스플로잇 구성1. 코드 확인// Name : rop.c// Compile : gcc -o 64rop 64rop.c -mpreferred-stack-boundary=4 -fno-pic -no-pie -fno-stack-protector#include void tools(){ asm ( "pop %rd..
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..
GunP4ng
'ROP' 태그의 글 목록