ImFe's study

FTZ level9 풀이 본문

FTZ

FTZ level9 풀이

ImFe 2020. 2. 12. 00:07

ID:level9 / PASSWORD:apple로 로그인

로그인 후 ls명령어를 사용하면 hint파일이 존재하는것을 알 수 있습니다. 이를 열면 위와같은 코드가 보이는데요.

 

일단 코드를 보면 buf2buf에 각각 10byte씩 할당되어있는 것을 볼 수 있습니다.

그리고 printf문에 It can be overflow라고 버퍼 오버플로우 공격이 가능함이 암시되어있네요.

그리고 fgets를 통해 buf40만큼을 입력받습니다. 여기서 버퍼 오버플로우 취약점이 발생하겠네요.

buf2가 먼저 선언되고 그다음 buf가 선언되었으므로 입력값이 buf를 넘기면 buf2까지 도달할 거 같습니다.

이런 방식으로 buf2의 값을 go로 바꿔주면 level10으로 올라갈 수 있는 쉘을 실행해주는거 같습니다.

 

vi에디터를 사용하여 편집

권한이 없어서 tmp에서 작업하는게 좋겠네요.

vi편집기로 코드를 넣어준후 ESC를 누른 뒤 :을 누르면 마지막 행으로 가는데 여기서 wq!(저장 후 종료)를 입력하고 Enter를 입력해줍니다.

이번 FTZ level을 해결하기 위해 필요한 명령어들

위 사진의 세번째 명령어를 통해 vi편집기로 작성한 파일을 C파일로 변환해줍시다.

 

 

 

이후 파일이 있는곳으로 이동 후 gdb -q (파일명) 명령어를 입력하여 분석해봅시다.

set di …까지만 치고 tab을 누르면 자동으로 완성이됩니다.

set disassembly-flavor intel을 입력한 후

disas main도 입력해 줍시다.

 

엔터를 누르면 다음페이지로 넘어가는걸 1시간 30분만에 알았네요

main+3: 40바이트 만큼 메모리를 할당합니다.
main+9:eax를 초기화합니다.

main+25:40(=0x28의 10진수)만큼 push

main+27:ebp-40의 주소를 eax에 복사

main+31:fgets 호출

main+42:ebp-24의 주소(=buf2)를 eax에 복사

main+45:eax push

main+46:ebp-40의 주소(=buf)를 eax에 복사

main+42와 main+46을 비교해보면 buf와 buf2사이에는 16바이트만큼 거리가 있네요.

영어,숫자는 1바이트이니까 16글자를 넣어주고 go를 입력하면 쉘이 실행되겠네요.

my-pass를 이용하면 level10의 비밀번호를 알 수 있다.



'FTZ' 카테고리의 다른 글

레지스터(register)란?  (0) 2020.04.07
어셈블리어 기초- 진법 체계  (0) 2020.03.25
FTZ training 6~10 정리  (0) 2020.01.02
FTZ training 1~5 정리  (0) 2020.01.02
FTZ training 로컬 환경 구축  (0) 2019.12.22
Comments