profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 5. 23. 20:31

문제

NX 만이 걸려있다.

 

unexploitable#1 처럼 입력을 받고 끝낸다.

다만 이번에는 함수이름 문자열 .dynstr 을 이용해서 sh 을 구하진 못할 것으로 보인다.

 

main 함수이다.

fgets 입력 시 bof 가 발생한다.

 

system() 함수의 plt는 존재한다.

이번엔 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
복사했습니다!