Hacking/[Web]Natas

OverTheWire [Natas Level 10]

양선규 2023. 3. 15. 21:28
728x90
반응형

Natas Level 10 입니다.

 

 

Level 10

 

보안상의 이유로, 특정 문자를 필터링한다고 합니다.

Level 9에서 사용했던 ; 를 필터링 하고 있는걸까요? 코드를 봐봅시다.

 

 

PHP 코드

 

Level 9와 코드는 똑같으나, 조건문 한 개가 추가되었습니다.

 

 

추가된 조건문

 

preg_match 함수를 이용해서, 

[  ;  | & ]

위 5개 특수문자를 필터링하고 있네요. 해당 특수문자가 포함되어 있다면,

Input contains an... 어쩌구 문자열을 출력합니다.

preg_match 함수는,  '/      /'  이 안에 있는 것들을 필터링합니다.

이걸 어떻게 우회할 수 있을까? 

가장 먼저 생각난 건 URL인코딩 이었습니다.

 

 

URL 인코딩

 

; 를 URL인코딩하면 %3b 가 됩니다.

;ls;   -> %3bls%3b    이렇게 바뀌는 것입니다.

이걸 입력해 볼까요?

 

 

실패

 

실패했습니다..

아무래도, 디코딩된 값을 기준으로 필터링 하는 것 같습니다.

아, URL인코딩 값은 URL창 needle 파라미터에 직접 입력해야 합니다.

입력 폼에 바로 입력하면 URL인코딩 값으로 판단하지 않고, 한번 더 인코딩한 값이 전달되기 때문입니다.

 

여러가지 우회방법을 찾다가, 개행문자 우회를 발견했습니다. 줄 바꿈 이라고도 하는데요.

%0a 는 개행을 의미하는 값입니다.

%0a 를 앞에 붙여, 다시 명령어를 입력해봅시다.

 

 

성공!!

 

성공했습니다!

개행문자로 인해, 앞에 있던 grep 명령어 인자의 범위를 벗어난 것이겠죠?

이제 /etc/natas_webpass/natas11 파일을 확인하면 되겠군요.

 

아 그전에, 궁금한게 생겼습니다. %0a 를 입력하면 기존에 필터링하던 문자들도 우회되는 것일까?

당장 해봅니다.

 

 

안되네

 

ls;ls 명령어로 ls를 2번 실행하려 했지만

실패했습니다. 

grep 명령어를 벗어나긴 했지만, 필터링은 조건문 전체에 적용되는 것이기 때문이겠죠?

이제 password를 찾아봅시다.

 

 

password 획득

 

성공했습니다!

입력한 명령어는 %0a%20cat%20/etc/natas_webpass/natas11  입니다.

%20은 공백을 의미합니다. 저렇게 똑같이 쓰셔도 상관 없고, 그냥 공백을 입력해도 됩니다.

 

풀고 나서 다른 풀이방법도 있을까 싶어, 다른분들 풀이도 봤는데

. /etc/natas_webpass/natas11

를 입력하여 아주 쉽게 푸셨더라구요.

 

grep 명령어의 인자로 .  을 입력하면 모든 내용이 출력됩니다.

이후, /etc/natas_webpass/natas11 파일을 지목하여 해당 파일의 내용 전체를 읽어오는 원리입니다.

또한 맨 뒤에 # 을 붙이면 뒤에 따라오는 dictionary.txt가 주석처리 되어, 패스워드 파일만 읽어올 수도 있죠.

 

저만 괜히 복잡하게 푼 것 같네요. 그래도 배워가는게 있으니 만족합니다 ^^

728x90
반응형

'Hacking > [Web]Natas' 카테고리의 다른 글

OverTheWire [Natas Level 12]  (0) 2023.03.16
OverTheWire [Natas Level 11]  (2) 2023.03.16
OverTheWire [Natas Level 9]  (0) 2023.03.13
OverTheWire [Natas Level 8]  (0) 2023.03.13
OverTheWire [Natas Level 7]  (0) 2023.03.10