File Upload 란?
파일 업로드 기능의 취약점을 이용하여 공격자가 악의적인 스크립트 파일을 업로드 후 웹 서버에 침투하여 서버를 장악하는 공격
일반적으로 웹 쉘을 업로드하여 시스템 명령어로 서버를 장악한다. 해당 취약점으로 접근 권한 상승, 정보 유출, 악성코드 배포등의 공격이 발생한다.
File Upload 실습
파일 업로드 기능의 취약점을 이용하여 웹 쉘을 업로드 해보자
1.파일이 어떻게 업로드 되는지 'view source'를 통해 분석

상세 분석 (라인: 설명)
1: 해당 파일이 php언어로 구성된다
3~5: post방식으로 가져온 upload의 value 값이 존재하면 “dvwa 웹페이지경로 + hackable/uploads/” url을 target 변수에 저장한다. / 업로드 경로를 저장하는 것이다.
6: php의 “.=”를 통해 url 뒷부분에 파일명을 추가한다. / basename()은 확장자를 제거하는 함수이고 $_FILES는 PHP가 제공하는 변수이며 업로드된 파일 정보를 2차원 배열형태로 정보가 저장된다. [‘uploaded’][‘name’]을 통해 이름을 출력한다.
9~11: move_*함수를 통해 임시 저장한 파일을 url 경로(target)에 저장할 수 없으면 echo문을 출력한다
13~15: 저장할 수 있으면 url 경로에 업로드 됬다고 출력한다.
정리: 소스코드 분석을 통해 별도의 필터링이 없음을 확인하여 일반 파일을 올리면 정상적으로 저장될 것이다.
2.파일업로드

파일을 업로드 할려고 하는데 업로드 권한(write)이 없다고 한다. 쓰기 권한을 부여하자

/var ~ /uploads 파일경로로 들어가서 chmod 명령어로 쓰기권한을 부여한다
준비한 웹쉘 코드를 업로드한다.

위 경로에 웹 쉘이 업로드 되었다.
웹 쉘 코드는 다음과 같다.

상세 분석 (라인: 설명)
1: 해당 파일은 php 언어로 구성되어 있다.
3~6: 데이터 전송 태그인 form 태그가 사용되며 GET 메소드 방식으로 전송된다.
8~9: GET 방식으로 가져온 cmd의 value값이 있으면 해당 value값을 시스템 명령으로 처리
3. 공격 ( 파일 삭제)
웹쉘 파일이 업로드 된 경로로 진입한다.

text부분에 시스템 명령어를 입력해보자

text에 pwd를 입력하여 현재 위치경로를 보여준다. 현재 경로를 알았으니 디렉토리에 속해 있는 디렉토리 및 파일을 찾아보자

.png파일과 .php파일이 있다. .png 파일을 삭제하자

위 명령어를 치면 아래와 같이 파일이 삭제된다.

취약점 대응 방안
1.시큐어 코딩
- 파일의.확장자(php,exe,jsp,dll 등)를 필터링하는 코드를 작성한다.
•서버로부터 파일을 보내 request요청을 하면 파일정보들이 $_FILES 변수에 저장된다 2 차원 배열로 구성되며 name, tmp_name, size, type 등으로 구성된다.
•파일을 업로드 하는 php 파일에 필터링을 추가해보자

2.시스템 분리
- 웹 서버와 업로드 되는 서버를 물리적으로 분리한다.
3.권한 설정
- 파일이 업로드 되는 경로의 실행 권한을 제거하여 , 파일이 실행하지 못하도록 한다.
•웹 쉘이 갖는 권한은 www-data이다. 따라서 업로드 경로의 소유자 부분을 다른 계정으 로 바꾸거나 소유자 권한에서 write 권한을 없앤다.
•write 권한제거



• 파일 소유권 변경

↓

↓

•파일 소유자와 그룹 권한을 root로 변경하여 기타 권한으로 접근하도록 한다.
•기타권한은 --- 이므로 upload 권한이 없다.
- Apache conf 파일의 코드를 수정하여 php 코드가 실행하지 않도록 한다.
- php conf 파일의 코드를 수정하여 php 코드가 실행하지 않도록 한다.
'웹 > 웹 해킹 문제' 카테고리의 다른 글
webhacking.kr 36번 write-up (0) | 2022.12.24 |
---|---|
Webhacking.kr 33번 write-up (0) | 2022.12.22 |
webhacking.kr 20번 write-up (0) | 2022.12.07 |
webhacking.kr 23번 write-up (0) | 2022.12.06 |
webhacking.kr 47번 write-up (0) | 2022.12.04 |