웹 쉘이 서버에 업로드되면 서버 파일 수정, 삭제, 파일 업로드, 다운로드 등 다양한 조작을 할 수 있어 아주 위험하다.
우리는 웹 쉘이 어떤 식으로 업로드 되어 악성행위를 하는 지 실습을 통해 알아보려고 한다.
파일 업로드 취약점 공격
웹 서버의 첨부파일에 대한 필터링이 미흡함을 이용해 악의적인 파일을 서버에 침투시키는 공격이다.
웹쉘의 경우 서버 사이드 스크립트를 이용하기 때문에 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
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 |