Web Shell 업로드 우회 실습

2022. 9. 13. 09:14·보안 이론/웹 보안
반응형

웹 쉘이 서버에 업로드되면 서버 파일 수정, 삭제, 파일 업로드, 다운로드 등 다양한 조작을 할 수 있어 아주 위험하다.

우리는 웹 쉘이 어떤 식으로 업로드 되어 악성행위를 하는 지 실습을 통해 알아보려고 한다.


 파일 업로드 취약점 공격

웹 서버의 첨부파일에 대한 필터링이 미흡함을 이용해 악의적인 파일을 서버에 침투시키는 공격이다.

웹쉘의 경우 서버 사이드 스크립트를 이용하기 때문에 PHP, JSP, ASP 와 관련된 파일은 업로드하지 못하게 하거나 업로드 되더라도 실행되지 못하도록 설정해야한다.

 

DVWA를 이용해 웹쉘을 업로드하는 실습을 진행한다.

DVWA - File Upload [Low]

해당 페이지는 다음과 같이 파일을 선택하고 업로드할 수 있도록 구성되어있다.

일단 안전한 이미지 파일 하나를 올려본다. 

"cat.jpg"파일을 업로드하니 다음과 같이 출력이 된다.  출력된 주소로 접속하면 고양이 사진 파일이 잘 업로드되어 있다. 

 

본격적으로 웹 쉘을 업로드해 볼 것이다. 확장자가 php인 웹 쉘을 업로드해 보았다.

그러자 업로드되지 않았다는 경고문이 나오게 된다.

이를 보고 필터링이 설정되어 있다고 생각할 수 있지만 사실은 업로드 크기제한이 걸려있는 것이었다.

개발자도구를 이용하여 value를 더 크게 설정한 뒤 다시 한번 업로드를 하게 되면 잘 업로드됨을 확인할 수 있다.

업로드 확인 주소로 접속해보면 실행 또한 잘 동작함을 알 수 있다.

 

DVWA - File Upload [medium]

역시 무작정 php 웹쉘 파일을 올려보는 것으로 시작한다.

이번에는 JPEG와 PNG 파일만을 올릴 수 있다고 문구가 출력된다.

확장자를 JPEG로 바꿔서 업로드해봐도 똑같은 결과가 나온다.

여기서부터는 프록시를 이용하여 진행할 것이며 BurpSuite를 이용한다.

 

먼저 정상 이미지를 전송한 패킷을 확인해본다.

많은 부분을 내용이 있으나 Content-Type에서 image/jpeg 즉 이미지임을 확인한다고 짐작할 수 있다.

 

웹 쉘을 업로드할 때 패킷을 살펴보자

웹 쉘은 application/octet-strem으로 전송됨을 알 수 있다. 이 부분을 image/jpeg로 수정해서 보내면 어떨까?

파일 자체가 아닌 http 헤더를 통해 필터링을 수행하기 때문에 전송해본 결과 업로드에 성공했음을 알 수 있다.

 

DVWA - File Upload [high]

HIGH 난이도는 다른 게시글에서 다루었다.

2022.09.19 - [보안 이론/웹 보안] - 파일 업로드 우회 - File Signature

 

파일 업로드 우회 - File Signature

파일 업로드 시 파일의 시그니처를 확인하는 필터링을 우회하여 업로드시키는 방법을 실습한다. File Signature (= File Magic Number) 파일 시그니쳐란 파일의 내용을 해석하기 위해 포함하고 있는 고유

taesam.tistory.com

 

HTTP PUT Method 취약점

HTTP에는 다양한 메소드가 존재하지만 그 중에서 PUT 메소드는 파일을 서버에 업로드하는 메소드이다.

통신을 통해 서버에 알 수 없는 파일이 업로드되는 것은 매우 위험하기에 대부분의 서버는 PUT 메소드를 금지하고 있으나

일부 취약한 웹 서버나 WebDav가 남아있으면 이를 악용할 수 있기 때문에 조치할 필요가 있다.

WebDAV : 웹 개발 시에 여러 개발자들이 서버에 저장된 문서나 파일을 손쉽게 읽고 쓸 수 있는 기능을 제공하여 협업의 도움을 주는 공간이다. 대다수의 권한이 풀려있기 때문에 외부에 공개시 큰 취약점으로 작용할 수 있다.

 

BWAPP - Insecure webdav Configureation 실습

해당 문제에서는 서버가 안전하지않은 webdav 설정을 가지고 있다고 한다. 

URL에 /webdav 를 입력하여 접속해보자

다음과 같은 페이지가 나오고 파일을 열고 닫을 수 있다.

하지만 문제에서 나왔듯이 취약한 webdav이기 때문에 더 다양한 기능이 숨어있음을 짐작할 수 있다.

 

우리는 해당 페이지를 이용하여 웹쉘을 업로드할 것이다.

 

프록시 이용해서 업로드

우선 해당 페이지를 Brup Suite를 이용하여 패킷을 잡아낼 것이다.

해당 페이지의 GET 요청 패킷을 잡아냈다. 

우리는 이 패킷을 PUT 패킷으로 변조하여 전송할 것이다.

메소드을 PUT으로 바꾸고 경로에 파일명을 설정해 준 뒤 바디부분에 프로그램의 내용 전체를 복사해서 입력 후 전송한다.

전송이 완료되면 다음과 같은 페이지가 보이고 새로고침하면 원하는 파일이 업로드된 것을 확인할 수 있다.

 

 

칼리 리눅스 Cadaver를 통한 업로드

우리는 칼리 리눅스의 cadaver라는 툴을 이용해서도 위와 같이 업로드 할 수 있다.

 

공식 문서에서 알 수 있는 이 툴은 "cadaver는 파일 업로드, 다운로드, 화면 표시, 내부 편집, 네임스페이스 작업(이동/복사), 컬렉션 생성 및 삭제, 속성 조작 및 리소스 잠금을 지원합니다."  라는 설명과 같이 WebDAV 관련 문제를 해결하기에 아주 용이하다.

 

현재 bee-box의 webDAV에 올라가있는 파일 목록이다. 이곳에 다른 웹쉘을 하나 더 업로드할 것이다. 

 

다음과 같이 cadaver 명령어를 통해 주소를 연결하고 PUT 메소드로 파일을 전송한다.

여기서는 r57shell.php 파일을 전송해 볼 것이다.

 

입력 후 webDAV에 접근하면 이와같이 손쉽게 파일이 업로드되어 실행까지 가능한 것을 확인할 수 있다.

 

이런 일이 가능한 이유는 webDAV 디렉토리에서는 다양한 메소드가 허용되어있기 때문이다. 고로 개발이 완료되었다면 반드시 일반 사용자의 접근을 차단하여야 한다.

반응형

'보안 이론 > 웹 보안' 카테고리의 다른 글

HTTP 헤더와 오류코드  (0) 2022.09.14
(2021) OWASP TOP 10에 대해서  (0) 2022.09.13
Malzilla를 이용한 난독화 실습  (2) 2022.09.07
Netcat을 이용한 백도어와 Reverse Shell 실습  (0) 2022.09.06
간이 서버 이용 Web Shell 실습  (0) 2022.09.06
'보안 이론/웹 보안' 카테고리의 다른 글
  • HTTP 헤더와 오류코드
  • (2021) OWASP TOP 10에 대해서
  • Malzilla를 이용한 난독화 실습
  • Netcat을 이용한 백도어와 Reverse Shell 실습
tae3
tae3
  • tae3
    tae3log
    tae3
  • 링크

    • LinkedIn
  • 전체
    오늘
    어제
    • 전체보기 (50)
      • 보안 이론 (37)
        • 웹 보안 (13)
        • 네트워크 보안 (6)
        • 시스템 보안 (3)
        • 클라우드 보안 (15)
        • 차량 보안 (0)
      • CTF (12)
      • 리눅스 (1)
  • 태그

    /dpkg/lock
    AES
    ALB
    amazon linux
    argus
    Auto scaling
    Automotive Security
    awk
    AWS
    bWAPP
  • hELLO· Designed By정상우.v4.10.4
tae3
Web Shell 업로드 우회 실습
상단으로

티스토리툴바