받은 바이너리부터 IDA로 열어봤다.
바이너리 자체는 되게 간단하다.
x86_32 syscall table 확인해보면 stdout에 출력하고, stdin을 read 해주는 간단한 바이너리라는 것을 알 수 있다.
바이너리 mitigation은 안 보인다.
NX 안걸려있어서 execute 권한이 스택에 있다.
여기서 bof가 터진다.
처음에는 bof로 ret를 덮고, eip는 32비트니까 대충 NOP Sled 태워서 익스하려고 했다.
근데 0x3c라서 안 되겠다 싶었다.
IDA를 다시 보니까 처음에 esp를 push 하는 게 보인다.
그래서 esp leak 하고 익스해야겠다고 생각했다.
ubuntu20.04 로컬 환경에서 leak을 진행했다.
push 이렇게 되니까, 0x18 만큼 덮으면 esp 전까지 덮인다.
0x0804808은 mov ecx, esp 부분이다.
이걸로 ret 덮으면, esp 부터 쭉 출력하니까, esp를 leak 할 수 있다.
0xffa88980이 esp다.
이렇게 해주면 뽑을 수 있다.
잘 나온다.
이제 leak 했으니 0x14로 dummy 채우고, leak 한 esp + 0x14로 ret 덮고, shellcode 넣어주면 된다.
최종적으로 작성한 코드다.
잘 동작한다.
remote로 바꿔서 해보면
이렇게 된다.
leak 하는 부분을 조금 바꿔줬다.
'WARGAME > pwnable.tw' 카테고리의 다른 글
pwnable.tw calc write-up (0) | 2022.08.23 |
---|---|
pwnable.tw orw write-up (0) | 2022.08.20 |