Dork's port

FTZ Level15 Write-up(FTZ Level15 풀이) 본문

Hackerschool FTZ Write-up

FTZ Level15 Write-up(FTZ Level15 풀이)

Dork94 2018. 3. 26. 02:17

안녕하세요.


벌써 15번이네요!


끝이보입니다!!!!!


시작해보죠!!


check의 주소에 있는 값과 0xdeadbeef를 비교하여 같다면 자동으로 레벨 16의 쉘을 주는 간단한 문제입니다!

메모리 구조를 봐야하기 때문에 gdb로 해당 프로그램을 실행시켜 줍니다!


이전의 프로그램들은 gdb의 권한을 막아둔 것 같던데 이번 문제부터는 아마 gdb가 가능하도록 해놓은 것 같네요!


이것때문에 삽질을 ㅠㅠ

이전 문제에서 그래 왔듯 함수의 인자값을 넘겨주는 것으로 변수의 주소를 추측해 보도록 하겠습니다.


fgets의 인자로 주는 저 주소는 buf라고 예측할 수 있습니다.


그리고 0xdeadbeef와 비교하는 저 주소의 값은 check라고 예측할 수 있겠군요!

그리고 deadbeef라는 값을 메모리 어딘가에 넣어야하는데..


처음에 생각난 것은 환경변수 였습니다.


그러나 소스코드를 보듯 0xdeadbeef라는 값이 소스코드의 영역, 즉 text영역에 있을 것으로 예상하고 gdb를 이용해 값들을 출력해 보았습니다.


그랬더니 main+32주소에 deadbeef주소가 보이는군요!

주소 계산을 다시해서 Double Word형태로 ㅈ출력해보니 예상대로 저 값이 프로그램 실행 시 메모리 어딘가에 있군요! 저 주소를 check에 덮어 씌워주기만 하면 이번 문제는 끝나겠네요!

따라서 이번 문제는 아래와 같이 명령어를 작성할 수 있습니다.


buf와 check의 주소차이 0x28(40)만큼 의미없는 값(A)를 입력한 후 0xdeadbeef가 있는 주소를 넣어주면..!


쉘이 떨어지는 군요!


id로 확인을 해보니 16레벨로 인식합니다!


그래서 my-pass로 비밀번호를 보니 아래와 같이 출력~




어느정도 진행하니 꾀가 늘어서 그런지 빨리빨리 진행이되네요!


다음문제로 귀 귀 씽!


Comments