ls명령어로 디렉토리에서 hint파일을 찾고 cat명령어로 hint파일의 내용을 봅시다.
버퍼오버플로우 문제입니다.
여기서 취약점이 발생하는 함수는 바로 fgets입니다. buf배열의 크기는 10바이트이지만 fgets함수에서는 40바이트를 받을 수 있습니다. 이는 buf에 10바이트 이상의 값을 집어넣어 buf2의 위치에도 값이 들어가게끔 할 수 있다는 것을 뜻합니다.
그냥 실행시켜보았습니다.
스크린샷은 못 찍었지만 a 10개를 입력한 후 go를 입력해보았습니다.
그래도 아무것도 나타나지 않아 buf와 buf2사이의 더미 값을 구하기 위해 buf실행 파일의 코드를 gdb로 컴파일 시켜보았습니다. 그러자 퍼미션이 거부당했다 떳습니다.
그러므로 힌트파일의 내용을 /tmp디렉토리에 임의의 c파일로 복사해줍시다.
vi에디터로 임의의 c파일을 열어줍니다.
코드 외의 불필요한 것들은 지워준 후 :wq 명령을 통해 저장한 후 나가줍니다.
gcc로 실행파일을 만들어줍시다.
gdb디버거로 만들어준 실행파일을 실행시킨 후 set dis intel, disas main 명령어를 입력해줍니다.
입력해준 후 어셈블리어를 해석해봅시다.
-------
buf배열의 시작주소는 ebp-40, buf2배열의 시작주소는 ebp-24로 둘은 16이 차이납니다.
그러나 할당된 buf배열의 메모리의 크기는 10바이트 이므로 6바이트가 더미 값이라는 결론이 나옵니다.
따라서 총 16바이트의 의미 없는 문자 뒤에 "go"만 붙으면 level10의 패스워드를 알아낼 수 있습니다.
quit명령어로 나가준 후 숫자 16개+go를 입력하면 level10으로 권한이 상승된 것을 확인하실 수 있습니다.
my-pass명령어로 패스워드를 알아냅시다.
'Security > 해커스쿨_FTZ' 카테고리의 다른 글
[해커스쿨_FTZ] level11 (0) | 2018.10.05 |
---|---|
[해커스쿨_FTZ] level10 (0) | 2018.10.04 |
[해커스쿨_FTZ] level8 (0) | 2018.10.03 |
[해커스쿨_FTZ] level7 (0) | 2018.10.03 |
[해커스쿨_FTZ] level6 (0) | 2018.10.03 |