validator-revenge (해결) 본문
https://dreamhack.io/wargame/challenges/101/
며칠째 삽질 중이다.
처음 조건문들을 모두 통과하고
ROP를 이용하여 풀려했으나
relro가 걸려있어 got overwrite는 불가능했다.
출력 함수도 없다.
stdout을 변조해서 leak 하려 했으나
인자를 주는 게 너무 어려웠다.
사람들은 stack pivoting을 이용해서 해결했다고 하나
어떻게 rsi에 stdout주소를 넣는지 이해가 안 갔다.
많은 시도 끝에 rsi에 stdout의 주소를 넣고 read로 변조를 하였다.
fbad1800으로 바꾸고 널값을 25개 넣어서 변조시켰다.
그리고 stdout을 사용하는 fflush를 호출해보았지만...
SIGSEGV가 일어난다. 아직도 이유를 찾지 못하겠다.
레지스터 값이 꼬여서 그런 것 같은데 아직 해결을 못했다.
stdout값도 너무 더러운 과정으로 바꿔서
스택이 많이 꼬인 것 같다.
상의할 사람도 없어서 참 답답하다.
-----------------------------------------------------------------------
드디어 해결했다.
0x601018에 pop_rsi를 넣는 방법을 너무 늦게 깨달았다.
생각을 더 넓게 봐야겠다.
풀이를 보니 푸는 방법이 다양했다.
SROP를 활용한 1/16 브루트 포싱이나,
1/4096 브루트 포싱 등
오랜 시간 삽질을 했지만
많은 꿀팁을 공부할 수 있었다.
'Notepad' 카테고리의 다른 글
fork 디버깅, PIE 디버깅 (0) | 2022.03.06 |
---|---|
LoadLibrary (0) | 2022.02.16 |
tiny backdoor (삽질) (0) | 2022.01.29 |
cyberpeace 3.0 ITCTF - crySYS (0) | 2022.01.11 |
iofile_vtable_check (해결) (0) | 2021.11.23 |
Comments