일단 문제파일을 내려받아 아이다로 디컴파일해보았다.
s에 입력을 받을 때 버퍼 길이보다 더 큰 값을 입력해 s1에 PwnPwnPwnPwnPwnPwnPwnPwn이라는 문자열이 들어있게 하는 문제였다.
일단 C코드로 보는 건 버퍼 길이 계산할 때 부정확할 수 있으니 직접 어셈블리어를 보면서 크기를 계산해주었다.
s는 ebp로부터 0x28만큼 떨어진 곳에 위치해 있었고, s1은 0x14만큼 떨어진 곳에 위치해 있었다.
그러므로 20바이트의 더미값 + Pwn*8을 입력해주면 위의 strcmp 조건문을 통과하면서 쉘을 따낼 수 있을 것이다.
한 번 페이로드를 구성해보자.
sendlineafter의 두 번째 인자에 넣어준 값을 보면, 20바이트의 dummy + Pwn * 8을 보내주었고, 마지막에 interactive 함수로 직접 플래그를 읽을 수 있도록 해줬다.
성공적으로 공격이 먹혔고, whoami를 입력했을 때 권한이 제대로 따진 걸 볼 수 있다.
후에 플래그를 읽어주면 된다.
flag : L7{634fc1abd902de5b6e7853f2e681aea6}
'system hacking' 카테고리의 다른 글
Layer7 포너블 2차시 과제 - change_ret32 풀이 (0) | 2022.09.21 |
---|---|
Layer7 포너블 2차시 과제 - overwrite_variable64 풀이 (1) | 2022.09.20 |
Layer7 리버싱 1차시 과제 - dreamhack.io basic_exploitation_001 (0) | 2022.09.19 |
Layer7 포너블 1차시 과제 - pwnable.kr bof 문제 풀이 (0) | 2022.09.19 |
Layer7 포너블 1차시 과제 - bof_basic_64 (0) | 2022.09.14 |