picoCTF 2019 NewOverFlow-2 - Points: 250

2473 단어 picoCTFCTF

문제





풀어봤어



아니 이 문제도 전까지 없었지요?
오버플로 공부하고 싶기 때문에 고맙습니다만.

소스를 봅니다.





조금 길다.
main()에서 가볍게 보면 vuln()을 불러 종료.
불리지 않는 flag()가 있다.

vuln()에서 main()으로 돌아갈 때 반환 대상을 flag()로 설정하면 되나요?
win_fn2()와 win_fn() 필요?
뭔가 함정?

함정 모르겠지만, vuln()의 리턴 주소를 변경하는 작전으로 해 보겠습니다.

우선은 flag()의 주소를 조사합니다.



flag()의 선두는 0x000000000040084d라는 것을 알았습니다.
자릿수가 많기 때문에 64bit 같습니다.



역시 64bit이었습니다.

다음은 vuln()의 리턴 주소가 저장되는 위치를 확인합니다.
적당히 200자 넣어 어떻게 되는지 확인합니다.



그래서 0x4e6a6b50이 저장되었습니다.
이것을 CyberChef에서 확인하십시오.
리틀 엔디안을 조심하십시오.



PkjN입니다.



73번째 문자였습니다.
그럼 여기를 flag()의 선두 주소인 0x000000000040084d로 합니다.



역시 잘 모르겠습니다만, 64bit때는 1개 쉬지 않으면 안 되는 것 같습니다.
그리고 win_fn2()와 win_fn()은 무엇이었습니까?

pwn 꽤 서투른 의식 있었지만, 이 정도의 이지 레벨이라면 사쿠로 풀 수 있게 되어 왔다.

좋은 웹페이지 즐겨찾기