[Pwnable] ROP 가젯 찾기 어려울 때 할 수 있는 방법들...
plt 등을 알아도 인자를 넘겨주기 어려울 때 사용하면 좋을 것 같다.
objdump로 찾기
예를 들어 libc 모르는 경우,
PIE base 안다면(혹은 PIE가 적용되어있지 않다면) 코드 세그먼트 내에서 가젯 찾아보는 시도 가능
objdump 등으로 찾을 수 있다.
이를 사용한 문제는 아래!! (사실 내가 만든 문제다 ㅎㅎ 그런데 라업 보니까 이렇게 푸신 분들은 별로 없는듯...하다.. 그래도 이렇게 하면 무척 편리하게 풀수 있다!)
https://dreamhack.io/wargame/challenges/1071
return to csu 기법
사실 이거는 처음 알게된 기법인데 꽤나 유용할 것 같다
https://py0zz1.tistory.com/107
아니면 return to main?? 근데 얘는 sfp조작을 어떻게 해야하는지 모르겠다ㅜㅜ
(main 왕 처음 프롤로그 부분으로 return하면 mov rbp, rsp가 있어서 ㄱㅊ긴함. 그런데 프롤로그 이후로 return하면 rbp가 바보가돼서 안됨 ㅠㅠ 스택 릭 가능하지 않는 이상..)
아니면....... plt주소를 main내 주소로 덮기..? 몰라...
+ libc leak하는 팁
libc base 모를 때, put(어쩌고_got) 이런식으로 하면 해당 함수의 주소 알 수 있다 하지만 ROP 필요..
그리고 보통 main함수의 return address에는 __libc_start_main으로 돌아가는데 얘는 라이브러리 안의 변수이므로!! 얘를 알아내면 libc base도 leak할 수 있당
참고로 libc 굳이 릭 안해도 걍 got의 하위 몇바이트만 overwrite하는 방법도 있다
더 좋은 기법들을 배우면 추가하겠다..