ret2csu 미니 치트시트
PIE/NX 환경에서 ROP 가젯이 부족할 때 __libc_csu_init의 두 가젯을 써서 함수 호출을 만들 수 있습니다. 핵심은 rdi/rsi/rdx 세팅과 함수 포인터 호출을 한 번에 끝내는 것.
가젯 구성
- 가젯1:
pop rbx; pop rbp; pop r12; pop r13; pop r14; pop r15; ret - 가젯2:
mov rdx, r14; mov rsi, r13; mov edi, r12d; call [r15+rbx*8]
사용 흐름
- 가젯1로 r12=arg1, r13=arg2, r14=arg3, r15=함수포인터 테이블
- rbx=0, rbp=1로 맞춘 뒤 가젯2 실행
- 원하는 함수 1회 호출 완료
팁
- PLT 엔트리를 r15에 두면 호출이 쉬움
rbx증가 루프를 피하려면rbp=1유지- 가젯2 뒤 스택 정리용 리턴 주소 미리 배치