Hacking/[Web]Natas

OverTheWire [Natas Level 12]

양선규 2023. 3. 16. 20:10
728x90
반응형

Natas Level 12 입니다.

 

 

Level 12

 

Level 12 메인 페이지 입니다.

업로드할 JPEG 파일을 선택하라.. 최대크기는 1KB 로군요. 

1KB면 메모장에 글 몇줄만 써도 넘어버리는 작은 크기죠.

파일 업로드 기능을 이용해서 password를 찾아야 할 것 같네요. 소스코드부터 봐봅시다.

 

 

View sourcecode

 

해당 문제 소스코드 입니다.

대충 보니.. 파일 크기를 제한하는 조건문과 랜덤한 문자열을 생성하는 함수도 보이네요.

하지만, 여기에 password를 출력하는 코드는 없네요.

그렇다는 건, 우리가 /etc/natas_webpass/natas13 파일을 직접 조회해야 한다는 걸 의미합니다.

일단 업로드 기능부터 직접 살펴봅시다.

 

 

업로드할 파일

 

dd.txt 파일을 업로드 해보겠습니다.

해당 파일은 제가 만들었으며 메모장에 딱 한글자만 적어놓은, 1KB가 안되는 작은 파일입니다.

jpg가 아닌 txt 파일인데, 업로드가 될까요?

 

 

파일명이 변경되었다

 

업로드에 성공했습니다.

무려 업로드된 경로까지 알려주고 있습니다.

그러나, 파일명이 무작위로 변했고 확장자가 jpg로 변경되었습니다.

jpg를 제외한 확장자를 업로드하면, 강제로 jpg로 변환시키는 것 같습니다.

일단 해당 경로에 접근해보겠습니다. 

upload 디렉터리부터 가보겠습니다.

 

 

upload 디렉터리

 

upload 디렉터리는 접근이 제한되어 있습니다.

 

 

파일 접근 성공

 

그러나, 업로드한 파일엔 접근(실행)이 가능하군요.

이러면 답이 보이기 시작했습니다.

웹쉘을 업로드해서, 실행시키면 password 획득이 가능할 것 같습니다.

 

웹쉘은 쉽게 말해서 웹 상에서 쉘(터미널,cmd등)을 여는 프로그램입니다.

우리가 웹쉘을 업로드할 위치는, 웹 서버 내부 upload 디렉터리 이므로

웹쉘을 실행시키면, 웹서버 내부에서 쉘을 실행시킨 것이 되어 내부 쉘을 획득할 수 있는 것입니다.

 

따라서 웹쉘을 업로드 하기 위해 우리가 해야 할 것은 확장자 필터링 우회, 그리고 파일크기 제한 우회 입니다.

일단 웹쉘부터 만들어 봅시다.

 

 

어디선가 구한 웹쉘

 

웹쉘 코드는 구글링하면 쉽게 구할 수 있습니다.

제가 구한 PHP 웹쉘 코드 입니다.

만약 웹사이트가 PHP 언어로 이루어졌다면 PHP웹쉘, JSP라면 JSP 웹쉘 이런 식으로 구분하여 사용하여야 합니다.

natas는 View sourcecode에서 알 수 있듯이 PHP언어를 사용하기 때문에, PHP 웹쉘이 필요합니다.

해당 파일의 확장자를 php 로 설정해 두고 업로드 해봅시다.

 

아, 참고로 시스템에서 웹쉘 코드 자체를 바이러스로 인식하여 파일을 삭제해 버릴 수 있습니다.

만약 그러시다면 웹쉘을 만드신 후, 빠르게 "바이러스 및 위협 방지" 설정에서 웹쉘을 제외하시길 바랍니다.

 

 

웹쉘 선택

 

만들어둔 웹쉘을 선택한 후,

 

 

Intercept is on

 

Intercept is on 클릭한 후, natas에서 upload를 누릅니다.

 

 

아래쪽을 확인

 

자 패킷을 잡았습니다.

18행과 22행에 MAX_FILE_SIZE , filename 이 보이시나요?

저부분 값을 바꾸면 됩니다.

 

20행에 1000 이 최대 파일크기

24행 4iua8imit0.jpg 가 파일명 입니다.

 

 

패킷 조작

 

최대 파일사이즈는 아주 크게

파일명도 webshell.php 로 변경합니다.

파일명은 상관없으나, 반드시 php 확장자여야 합니다.

 

 

웹쉘 업로드 성공

 

웹쉘 업로드에 성공했습니다!

단 파일명을 webshell.php 로 설정했는데, 확장자만 php로 바뀌었군요.

뭐 상관없습니다. 해당 경로를 입력해 웹쉘을 실행해 봅시다.

 

저 링크를 바로 클릭하셔도 되고

URL 주소 뒤에 /upload/파일명 입력해서 접근하셔도 됩니다.

 

 

웹쉘 실행 성공

 

웹쉘이 성공적으로 실행되었습니다.

여기에 원하는 명령어를 입력하면 됩니다.

우리는 natas13의 password를 찾아야 하기 때문에, 

cat /etc/natas_webpass/natas13

입력하도록 하겠습니다.

 

 

password 획득

 

password를 획득했습니다.

파일 업로드 취약점 관련 문제가 처음 등장했네요. 개인적으로 Level 11에 비하면 아주 천사인 문제였습니다.

 

728x90
반응형

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

OverTheWire [Natas Level 14]  (0) 2023.03.25
OverTheWire [Natas Level 13]  (0) 2023.03.17
OverTheWire [Natas Level 11]  (2) 2023.03.16
OverTheWire [Natas Level 10]  (0) 2023.03.15
OverTheWire [Natas Level 9]  (0) 2023.03.13