Dork's port

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

Hackerschool FTZ Write-up

FTZ Level3 Write-up(FTZ Level3 풀이)

Dork94 2018. 3. 22. 04:00

이번에는 Level 3으로 가보도록 하겠습니다.



먼저 힌트를 보도록 하겠습니다.



$ cat hint



소스코드를 보면 autodig의 소스코드를 내포하고 있는데 인자값을 받아 2개인지 체크인 후 아니라면 strcpy 및 strcat을 이용해 "dig @" + "인자 값" +" version.bind chaos txt"로 만들어 명령어를 실행시키는(systme(cmd);) 구조의 소스코드 이군요!


가령 autodig test라고 입력하였을 경우 명령창에서 아래와 같이 입력한 것과 같은 효과를 지닐 것 입니다.


$ dig @ test version.bind chaos txt



그럼 해당 파일을 찾아 보도록 하죠.


$ find / -name "autodig" -user level4 -perm -4000


그러면 아래와 같이 autodig의 위치가 보이는군요!


우선 아무 인자도 주지않고 실행해 봅시다! 


그러면 사용법을 알려주는 군요!



그러면 해당 소스코드의 취약점을 이용해서 비밀번호를 알아 보도록 하겠습니다.


먼저 argv로 인자를 입력 받는 경우 기본적으로는 스페이스(' ') 가 각 인자를 구분 짓는 문자가 됩니다.


스페이스바를 포함한 문자열을 인자로 넘기고 싶은 경우 Double quotation을 이용해 감싸주면 스페이스바를 포함한 문자열을 하나의 인자로 입력이 가능합니다


또한, 명령어를 한줄에 동시 실행 시키기 위해선 2가지 방법이 있습니다.


';'과 "&&" 가 있는데요. 두가지 차이점은 ';'은 앞의 명령어를 실행시키고 뒷 명령어를 실행 시키는 반면 "&&"는 앞의 명령어가 정상적으로 실행 된 경우에 뒤의 명령어가 실행 된다는 차이점이 있습니다.


그러면 취합하여 비밀번호를 알아오는 코드를 다음과 같이 작성 할 수 있겠죠?


$ /bin/autodig ";my-pass;"


dig @을 먼저 실행 시킨 후 my-pass 명령어를 실행 시키고 version.bind  chaos txt를 실행 시키는 것과 같은 효과를 줄 수 있습니다.


조금더 풀어서 이야기하면 위의 코드는 아래의 명령어를 각각 실행시킨 것과 같습니다.



$ dig @

$ my-pass

$. version.bind chaos txt



그러면 아래와 같이 패스워드가 출력 되네요! 그럼 다음 문제로 ㄱㄱ!



Comments