OverTheWire: Natas level9
OverTheWire 문제풀이 - Natas
* Bandit는 웹 보안 관련 문제입니다.
* 개인적인 문제풀이로 해답을 보시기 전에 직접 풀어보시기를 권해드립니다.
* 반드시 연습용으로 제공된 환경에서만 작업하시기 바랍니다. 악용으로 일어난 사태는 절대로 책임지지 않습니다.
Natas level9
Natas9에 접속하면 다음과 같은 화면이 뜬다. Find words containing 이라며 단어를 검색하라고 한다. 단어를 검색하면 Output에 출력해주는 것 같다.
임의의 문자열을 입력했더니 입력한 문자열이 포함된 단어들이 Output에 출력되는 모습을 볼 수 있다. 어떠한 취약점이 있는지 소스를 살펴볼 필요가 있다.
[소스 분석]
소스보기를 통해 해당 페이지의 index-source.html 소스를 살펴볼 수 있다. 소스는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <form> Find words containing: <input name="needle"><input type="submit" name="submit" value="Search"><br /><br /> </form> <!--중략--> <? $key = ""; if(array_key_exists("needle", $_REQUEST)) { $key = $_REQUEST["needle"]; } if($key != "") { passthru("grep -i $key dictionary.txt"); } ?> <!--중략--> | cs |
문제해결에 필요한 소스들만 뽑아왔다. input 값으로 입력받은 값을 needle 로 보내는데 needle 값이 있다면 passthru 함수로 grep 명령어를 실행하도록 되어 있다. passthru 는 php에서 외부명령어를 실행시켜주는 함수이다. grep 명령어로 dictionary.txt 라는 파일을 참조해서 문자열이 포함된 단어를 나열하고 있다. passthru 함수 덕분에 php에서 명령어를 실행할 수 있는데 이를 이용하면 우리가 원하는 명령어도 실행할 수 있다. 예를 들어, 다중명령어를 사용한다면 grep을 실행시킨 후에 다른 명령어를 추가로 실행시킬수 있지 않을까?
바로 적용해보면 된다. 다중명령어를 쓰는 방법은 여러가지가 있지만 ;(세미콜론)을 이용해서 grep 명령 뒤에 다른 명령어를 써보겠다.
> ""; pwd
""; 로 빈문자열을 넘겨주고 grep 명령어를 종료시킨뒤에 다중명령어를 이용해서 pwd 명령어를 실행시켜보았다. 결과는 위와같이 정상적으로 pwd 명령어가 실행되어 현재 디렉터리의 위치를 Output으로 출력해주는 모습을 확인할 수 있다.
이를 활용하여 natas10번의 패스워드가 있는 파일을 cat 명령어로 읽어주면 다음 레벨의 패스워드를 얻을 수 있다. 이번 문제는 passthru 함수가 가지는 취약점을 가지고 문제를 푸는 방식이었다.
next level password : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
'War Game > natas' 카테고리의 다른 글
OverTheWire: Natas level11 (0) | 2017.07.12 |
---|---|
OverTheWire: Natas level10 (0) | 2017.07.12 |
OverTheWire: Natas level8 (0) | 2017.04.26 |
OverTheWire: Natas level7 (0) | 2017.04.24 |
OverTheWire: Natas level6 (0) | 2017.04.20 |