-
File Upload [14주차]모의해킹스터디5기(feat.Normaltic) 2024. 2. 12. 16:28
이제 슬슬 끝나가는 분위기다. 마지막 한 달은 모의해킹 프로젝트로 진행된다고 하셨고, 앞으로 배울 공격 기법도 얼마 남지 않은 것 같다. 이번 시간에는 파일 업로드에 대해 배웠다. 지금까지 컴퓨터를 다루면서 해킹 당하기에 가장 위험한 행동이 파일을 다운로드 받는 것이라고 들어왔는데 정작 정확한 원리에 대해서는 모르고 있었다. 그게 왜 위험한 행동인지 한 번 알아보겠다.
File Upload 공격
정의
공격자가 원하는 임의의 파일을 업로드
발생 원인
파일을 업로드할 때 검사를 안 한다
발생 위치
파일을 업로드할 수 있는 곳
- 이 부분은 Burp Suite으로 쉽게 확인 가능하다.
File Upload 공격 시나리오
- 만약 서버가 제한 없이 모든 파일을 받는다는 가정하에 -
- 서버 측 실행 파일 넣기
- 서버에 웹쉘과 같은 실행 파일을 넣는다면 그 서버에 원하는 명령을 내릴 수 있게 되고, 서버를 장악할 수 있다.
- Phising 유도
- HTML 파일을 넣어 Phising 사이트로 더 쉽게 속일 수 있다. 상대 서버에 파일을 넣는 것이기 때문에 Phising 주소의 도메인은 진짜이기 때문. Phising이라는 의심을 쉽게 풀게 된다.
- naver에 login.php 파일을 업로드 --> ex) naver.com/login.php
- Deface 공격
- deface 공격은 "외관을 훼손한다" 는 뜻으로 홈페이지 화면을 바꾸는 공격이다. deface 공격으로 인해 심각한 피해가 일어나는 것은 아니고 주로 정치적이나 실력 과시를 위해 행해진다.
- index 파일을 넣어 덮어쓰는 방식이다.
- XSS
- 서버 안에 파일을 넣을 수 있다는 것은 그 속에 스크립트도 넣을 수 있다는 말이다. 일반적인 페이지로 속여 그 속에 악성 스크립트를 넣어 공격이 가능하다. 이 경우는 Stored XSS에 속한다.
- DoS
- DoS 공격 중에서 서버 리소스를 소모하는 경우를 말한다. 대용량 파일을 넣어 서버의 업로드 공간을 다 채우면 다른 사용자들이 업로드를 못하게 하는 서비스 거부 공격이다.
서버 측 실행 파일 : Web Shell
앞서 말한 공격 시나리오 중 "서버 측에 실행 파일을 넣는다" 의 실행 파일은 여러가지가 될 수 있겠지만, 해킹이 목적이라면 웹쉘(Web Shell)이 될 것이다.
웹쉘이란 웹사이트를 통해 쉘을 열어 공격자가 원하는 명령어를 입력하는 공격이다.
웹쉘은 서버에서 사용하는 파일에 따라 코드는 다르지만 원리는 같다. php 파일에서의 웹쉘을 보자.
<?php echo system($_GET['cmd']); ?>
위의 코드는 "cmd" 라는 이름으로 들어온 GET method 파라미터 값을 서버의 shell에 입력한 후, 그 결과를 화면에 나타내는 코드다. 이 코드는 php 파일을 다루는 서버에서만 가능하다. 지금은 간단하게 결과를 화면에 띄우도록 했지만 shell의 결과를 어떻게 보여줄지 말지, 혹은 또 다르게 처리할지는 코드를 어떻게 작성하느냐에 따라 무궁무진하다.
웹쉘 공격의 핵심은 두 가지가 있다.
1. 웹 서버 측에 실행 코드를 업로드하는 것
당연히 웹쉘 파일을 업로드하는 것이 최우선이다. 그래야 공격이 가능하니까. 그리고 다음으로 중요한 것은
2. 업로드된 파일의 경로를 알아내는 것
웹쉘 파일은 업로드한다고 실행되는 것이 아니다. 서버에서 그 파일을 실행하게끔 만들어야 한다. 그 방법이 파일의 경로를 파악해 HTTP 요청으로 불러오는 것이다. 서버가 요청을 받게 되면 그 파일을 실행한 후 그 결과를 사용자에게 보여주는 것을 이용한 공격이다. 경로 확인은 파일을 다운로드 했을 때 Burp Suite로 확인해도 되고, 주소창을 확인해도 된다.
대응 방법
1. 업로드되는 파일의 형식을 제한
HTTP 요청 헤더 중에 content-type 이라는 값이 있다. 파일의 형식을 나타내는 값인데, 이걸 활용해서 서버는 파일의 형식이 text/php인 파일, 즉 서버에서 실행할 수 있는 파일의 형식을 제외하고 업로드를 승인하면 된다.
우회 방법 : Burp Suite 으로 업로드 요청 메시지에서 type을 변환하면 php코드도 전송이 가능하다.
ex) text/php -> image/jpeg2. 해당 경로의 파일들은 실행하지 않도록 설정
파일이 업로드되더라도 결국 파일이 실행되지만 않으면 공격은 성공할 수 없다. 그래서 파일이 업로드되는 경로 안에 파일들은 실행되지 않도록 설정하면 공격을 막을 수 있다.
우회 방법 : 업로드할 파일 이름을 설정하여 저장 경로를 변경할 수 있다. 지정된 실행 불가 경로를 우회하여 공격 가능.
ex) file.php -> ../file.php3. 특정 확장자를 사용할 수 없도록 설정
웹쉘에 주로 쓰이는 서버 측 스크립트 코드들(php, jsp, ...)의 확장자 파일은 업로드 못하도록 설정할 수도 있다.
우회 방법 : 대소문자 구분 (PhP, pHp, PHp, ...)
다른 이름의 확장자 사용 (php -> phtml, php3, php5, ... )
참조
What is a Web Shell Attack? ⚔️ How to detect and prevent it?
Want to learn more on what a Web Shell Attack is or How to find a Webshell File? 📒 In this article we will tell you its meaning, examples.
www.wallarm.com
'모의해킹스터디5기(feat.Normaltic)' 카테고리의 다른 글
인증 / 인가 [16주차] (0) 2024.03.01 File Include / File Download [15주차] (0) 2024.02.21 CSRF 마무리 / DDoS [13주차] (0) 2024.02.06 CSRF(Cross Site Request Forgery) [12주차] (0) 2024.01.29 XSS 정리 / Client Script 활용 방법[11주차] (0) 2024.01.16 - 서버 측 실행 파일 넣기