tmxklab
RTC(Return to csu) 본문
1. RTC(Return to csu)
ROP를 해야하는데 가젯 제한으로 rdi, rsi, rdx를 구성하기 힘들 때 유용하게 사용할 수 있는 기법으로 __libc_csu_init()을 이용한다.
csu & __libc_csu_init() 참고 자료)
위 참고 자료를 보면 알 수 있듯이 __libc_csu_init()에서는 __init_array에 설정된 함수 포인터를 읽어서 호출하는 과정이 있는데 이 부분을 이용하여 rsi, rdi, rdx를 쉽게 구성할 수 있다.
2. Attack Process
ret를 조작할 수 있는 상황에서 크게 2가지 과정을 거쳐 rsi, rdi, rdx를 세팅하여 원하는 함수를 호출할 수 있다.
[ stage 1 ]
stage 1은 stage 2를 실행하기 전에 스택에 있는 값을 pop하여 알맞게 레지스터에 값을 세팅하는 작업이다.
ret를 주작하여 __libc_csu_init()의 다음 루틴으로 이동했을 때 상황이다.
위 그림을 보면 알 수 있듯이 ret를 주작하고 스택에 적절한 값을 세팅해야 한다.
여기서 rbp를 0x1로 세팅하는 이유는 RTC Chaining을 하기 위함이다.
[ stage 2 ]
stage 1에서 알맞게 값을 세팅하고 stage 2로 넘어온 상황이다.
call까지 진행되기 전까지 r13, r14, r15d에 있는 값을 rdx, rsi, edi로 복사된다.
rdx = r13(0xa), rsi = r14(0xb), edi = r15d(0xc)
그리고 마지막으로 call [r12 + rbx*0x8] 을 수행하게 되는데 rbx에는 0x0이 들어 있고
r12에는 호출하고 싶은 함수의 주소가 들어 있으므로 결과적으로
" call 호출하고 싶은 함수의 주소 "
로 수행하게 된다.
그리고 add rbx, 1 를 수행하게 되면 rbx는 1로 세팅되고 rbp에는 1로 세팅되어 있으므로 cmp rbx, rbp를 수행하게 되면 stage 1으로 이동하게 되면서 한 번더 RTC를 진행할 수 있다.
3. 참고자료
RTC 참고자료) - 정리가 잘 되어있음
RTC관련 문제)
'Security > 01 System Hacking' 카테고리의 다른 글
Linux Memory Protection (0) | 2020.09.15 |
---|---|
FSOP(File Stream Oriented Programming) (0) | 2020.09.15 |
FSOP를 위한 fclose()분석 (0) | 2020.09.15 |
stdout flag를 이용한 libc leak (6) | 2020.08.26 |
heap(5) - tcache 정리 (0) | 2020.08.24 |