Hacking/[Web]Natas

OverTheWire [Natas Level 25]

양선규 2023. 5. 22. 15:33
728x90
반응형

Natas Level 25 입니다.

 

 

문제 페이지

 

어떤 발표문, 선언문? 같은 내용이 있고, 언어를 선택하여 볼 수 있습니다.

 

 

독일어

 

독일어, 영어가 가능하네요.

여기서 URL창을 보면 파라미터명이 "lang" 이라는 걸 알 수 있습니다.

 

 

소스코드

 

소스코드 입니다.

가장 위 setLanguage 함수에서, lang 파라미터를 통해 언어를 선택받고 있습니다.

language 디렉터리 밑에서, lang파라미터를 통해 전달받은 파일을 출력하는 것 같은데요.

여기서 safeinclude 함수를 통해 구체적인 필터링을 실시하고 있습니다.

 

 

필터링과 파일 선택 과정

 

strstr 함수를 통해서,

"../" 문자열이 있다면 str_replace 함수를 통해 지워버립니다.

"natas_webpass" 문자열이 있다면 아예 파일을 불러오지 않습니다.

 

이렇게 두가지 필터링을 거친 후 파일을 불러오게 되는데, 필터링에 걸렸을 경우..

-> logRequest 함수를 통해 로그를 남기게 됩니다.

 

 

logRequest 함수

 

여기가 중요합니다. 필터링에 걸렸을 때 오류 메시지와 함께 로그를 남기는데요.

로그파일 내용은, [날짜와 시간 + HTTP Request의 USER_AGENT 헤더 + 오류 메시지] 입니다.

그리고 "/var/www/natas/natas25/logs/natas25_세션값.log"  라는 이름으로 저장되죠.

 

여기서 우리는, Burp Suite를 통해 USER_AGENT 헤더를 조작할 수 있습니다. 

이 헤더에 공격용 php코드를 넣게 된다면? 로그파일에 php코드가 저장됩니다.

그리고 lang 파라미터를 통해서 이 파일을 불러오게 된다면? 코드가 실행되고 패스워드를 획득할 수 있을겁니다.

 

하지만 lang 파라미터 경로조작에 필요한 ../ 문자열이 필터링 되고 있으니, 이것부터 우회해 보도록 합시다. Burp Suite를 켭니다.

 

 

경로조작

 

자, Burp Suite로 언어 변경 패킷을 잡았습니다.

맨 위 lang 파라미터에,

"..././logs/natas25_세션값.log" 를 입력했습니다.

"../" 는 필터링 되고 있으니, ..././ 에서 ../가 빠지면 결과적으로 ../가 남게 됩니다.

 

기본적으로 언어선택은 /var/www/natas/natas25/language/ 위치입니다.

우리는 /var/www/natas/natas25/logs/로그파일 위치로 가야 하니, 한 번만 상위 디렉터리로 이동하고 경로를 작성합니다.

 

세션값은 맨 아래, PHPSESSID 부분에서 복사하시면 됩니다. 이렇게 경로조작은 끝났습니다. 이제 User-Agent 부분에 php코드를 입력하도록 합시다.

 

 

User-Agent 조작

 

"<? readfile('/etc/natas_webpass/natas26'); ?>"  입력하였습니다.

 

readfile 함수로 natas26의 password를 출력하도록 하였습니다. 

natas_webpass 문자열에 대한 필터링은, lang 파라미터에만 적용되므로 이 부분에서 걸리지 않습니다.

 

 

password 획득

 

이렇게 Response 패킷에서 password를 획득할 수 있었습니다.

로그 파일명은 세션값이 바뀌지 않는 한 동일하기 때문에, 여러 번 공격을 시도하면 파일에 쌓인 로그들이 모두 출력됩니다.

 

정리하자면 해당 문제에서는 "../" , "natas_webpass" 문자열 필터링에 걸렸을 경우 User-Agent 내용과 함께 로그 파일을 남기는 특성을 이용해서, User-Agent 값을 조작해 원하는 php코드를 서버에 심을 수 있었고

이후 언어를 선택하는 lang 파라미터를 악용하여 ..././ 경로조작을 통해, 심어둔 php코드를 불러와 password를 획득하였습니다.

728x90
반응형

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

OverTheWire [Natas Level 24]  (3) 2023.04.11
OverTheWire [Natas Level 23]  (0) 2023.04.11
OverTheWire [Natas Level 22]  (0) 2023.04.05
OverTheWire [Natas Level 21]  (0) 2023.04.04
OverTheWire [Natas Level 20]  (0) 2023.04.04