728x90
SMALL
x64 바이너리 문제 풀이입니다

문제에서 print_file의 plt가 있다고 한다
하지만 바이너리 내부에는 flag.txt 관련 문자열이 없으므로 직접 쓰기 가능한 영역에 넣어서 함수의 인자로 넘겨서 실행시켜야한다
strings로 본 결과 해당 함수는 존재하였다
방지기법은 Partial RELRO와 NX만 켜져있다
readelf을 본 결과

data 영역에 쓰기권한이 존재하는것을 볼 수 있다
get_section_by_name('.data').header.sh_addr를 이용하여 pwntools에서 주소를 가져올 수 있다
문자열을 삽입하기 위해 r14 r15 레지스터가 필요함으로 ROPgadget으로 pop r14 r15, mov r14 r15 가젯의 주소를 확보했다
인자를 전달하기 위한 rdi 가젯도 확보한다

페이로드는 다음과 같이 작성하였다
pop [r14], r15로 스택에서 값을 가져오고
data영역에다가 flag.txt 문자를 넣어서
mov [r14], r15로 작성한다
그리고 data영역을 print_file의 인자로 넘겨주며 코드를 실행하게 된다

728x90
LIST
'[ROP emporium]' 카테고리의 다른 글
| [ROP emporium] callme (0) | 2026.06.03 |
|---|---|
| [ROP emporium] split (0) | 2026.06.02 |
| [ROP emporium] ret2win (0) | 2026.06.01 |