Natas Level 10 입니다.
보안상의 이유로, 특정 문자를 필터링한다고 합니다.
Level 9에서 사용했던 ; 를 필터링 하고 있는걸까요? 코드를 봐봅시다.
Level 9와 코드는 똑같으나, 조건문 한 개가 추가되었습니다.
preg_match 함수를 이용해서,
[ ; | & ]
위 5개 특수문자를 필터링하고 있네요. 해당 특수문자가 포함되어 있다면,
Input contains an... 어쩌구 문자열을 출력합니다.
preg_match 함수는, '/ /' 이 안에 있는 것들을 필터링합니다.
이걸 어떻게 우회할 수 있을까?
가장 먼저 생각난 건 URL인코딩 이었습니다.
; 를 URL인코딩하면 %3b 가 됩니다.
;ls; -> %3bls%3b 이렇게 바뀌는 것입니다.
이걸 입력해 볼까요?
실패했습니다..
아무래도, 디코딩된 값을 기준으로 필터링 하는 것 같습니다.
아, URL인코딩 값은 URL창 needle 파라미터에 직접 입력해야 합니다.
입력 폼에 바로 입력하면 URL인코딩 값으로 판단하지 않고, 한번 더 인코딩한 값이 전달되기 때문입니다.
여러가지 우회방법을 찾다가, 개행문자 우회를 발견했습니다. 줄 바꿈 이라고도 하는데요.
%0a 는 개행을 의미하는 값입니다.
%0a 를 앞에 붙여, 다시 명령어를 입력해봅시다.
성공했습니다!
개행문자로 인해, 앞에 있던 grep 명령어 인자의 범위를 벗어난 것이겠죠?
이제 /etc/natas_webpass/natas11 파일을 확인하면 되겠군요.
아 그전에, 궁금한게 생겼습니다. %0a 를 입력하면 기존에 필터링하던 문자들도 우회되는 것일까?
당장 해봅니다.
ls;ls 명령어로 ls를 2번 실행하려 했지만
실패했습니다.
grep 명령어를 벗어나긴 했지만, 필터링은 조건문 전체에 적용되는 것이기 때문이겠죠?
이제 password를 찾아봅시다.
성공했습니다!
입력한 명령어는 %0a%20cat%20/etc/natas_webpass/natas11 입니다.
%20은 공백을 의미합니다. 저렇게 똑같이 쓰셔도 상관 없고, 그냥 공백을 입력해도 됩니다.
풀고 나서 다른 풀이방법도 있을까 싶어, 다른분들 풀이도 봤는데
. /etc/natas_webpass/natas11
를 입력하여 아주 쉽게 푸셨더라구요.
grep 명령어의 인자로 . 을 입력하면 모든 내용이 출력됩니다.
이후, /etc/natas_webpass/natas11 파일을 지목하여 해당 파일의 내용 전체를 읽어오는 원리입니다.
또한 맨 뒤에 # 을 붙이면 뒤에 따라오는 dictionary.txt가 주석처리 되어, 패스워드 파일만 읽어올 수도 있죠.
저만 괜히 복잡하게 푼 것 같네요. 그래도 배워가는게 있으니 만족합니다 ^^
'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 |