문제
NX 만이 걸려있다.
unexploitable#1 처럼 입력을 받고 끝낸다.
다만 이번에는 함수이름 문자열 .dynstr 을 이용해서 sh 을 구하진 못할 것으로 보인다.
fgets 입력 시 bof 가 발생한다.
이번엔 fflush 문자열이 존재하지 않기에
fgets를 통해 binsh을 bss영역에 넣거나 fwrite를 통해 주소를 leak 시키려고 했다.
그런데 마땅한 가젯을 쓸 수 없었다.
이때, system 함수를 통해 got 주소를 leak 할 수 있었다.
system 함수 인자로 명령어가 아닌 것을 줬을 때 에러 메시지가 출력된다.
이를 이용해 system 함수 인자로 특정 libc 함수 주소를 주면, 에러 메시지가 출력되며 그 내용을 출력해줄 것이다.
이것을 leak 해서 libcBase를 구한 뒤 "/bin/sh" 실제 주소를 구하면 된다.
문제 해결 과정
가젯 구하기)
+ leak 한 주소를 통해 라이브러리 버전을 확인해서 binsh 오프셋을 구해놓는다.
첫번째 페이로드
dummy + pr + system@got + system@plt + main
system_got를 leak 한 후 binsh 실제 주소를 구한다.
두번째 페이로드
dummy + pr + binsh + system@plt
main으로 돌아온 후 system(binsh)을 실행한다.
익스플로잇
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] RTC (0) | 2021.06.01 |
---|---|
[HackCTF] World Best Encryption Tool (0) | 2021.05.29 |
[HackCTF] Unexploitable #1 (0) | 2021.05.23 |
[HackCTF] UAF (0) | 2021.05.08 |
[HackCTF] Beginner_Heap (0) | 2021.05.08 |