Skip to main content

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. 가젯1로 r12=arg1, r13=arg2, r14=arg3, r15=함수포인터 테이블
  2. rbx=0, rbp=1로 맞춘 뒤 가젯2 실행
  3. 원하는 함수 1회 호출 완료

  • PLT 엔트리를 r15에 두면 호출이 쉬움
  • rbx 증가 루프를 피하려면 rbp=1 유지
  • 가젯2 뒤 스택 정리용 리턴 주소 미리 배치