본문 바로가기
overthewire.org

[OverTheWire.org_natas] level 8 - level 9 (natas10 password)

by MININI 2022. 1. 27.

이런 화면....

find words containing이라니까 뭐 포함된 단어 찾아주는 건가보다..

 

일단 view sourcecode

코드의 일부분

그럼 이런 코드가 보인다.

 

간단히 해석해 보면,

(우리가 입력하는 값이 needle이라는 이름을 갖음)

첫번째 if문은 입력값이 들어왔다면, $key에 그 값을 넣어준다는 소리고

두번째 if문은 $에 값이 넣어졌다면, dictionary.txt에서 $key의 문자열을 검색한다.

 

grep [OPTION...] PATTERN [FILE...] :  파일로부터 문자열 검색 (-i : 대/소문자 무시)
passthru : php에서 외부 명령어를 실행시킬 때 사용하고 그 결과를 직접 출력.
(실행 결과가 바이너리 파일일 경우, 즉시 브라우저에서 실행시킬 경우에 사용)

여기서는 passthru의 취약점을 이용해서 문제를 풀 수 있다. (command injection)

예를 들어보면, 

우리가 "";pwd 를 입력하면,

passthru 함수에서 "";로 grep 명령어를 종료 시킨뒤, pwd를 실행하여 현재 위치를 나타내주게 된다.

그렇다면 natas10의 비밀번호가 있는 파일만 찾으면 끝나겠군.

저저번 문제에서 natas8의 비밀번호가 /etc/natas_webpass/natas8에 있다는 것을 알게 되었으므로

natas10은 /etc/natas_webpass/natas10에 있을 것이라는 것을 알 수 있다.

 

그러면 입력값으로 "";cat /etc/natas_webpass/natas10 을 넣어주면 

전체 명령어는 grep -i "";cat /etc/natas_webpass/natas10 dictionary.txt 가 된다.

끝..

댓글