28. [14주차]-1 파일 업로드 공격
* 과제
1. 복습
2. 웹 쉘 문제 풀기
1. 복습
파일 업로드 공격은 공격자가 원하는 파일을 업로드하는 공격이다.
파일을 업로드 하는 부분에서 취약점이 발생하며, 업로드되는 파일에 대해 검증 작업을 하지 않아서 문제가 생긴다.
웹 쉘 공격의 순서는 다음과 같다
1. 웹 서버 측 실행 코드 파일을 업로드
- php, jsp, asp 등 이 있다.
2. 업로드된 파일의 경로를 알아낸다.
- 업로드한 파일이 출력되는 곳을 확인한다.
- 이미지 주소를 복사해서 하는 식으로 확인
3. 업로드된 파일 경로를 통해 요청을 한다.(=실행을 한다.)
파일 업로드에 대해 대응방법이 있다.
1. MIME 타입 확인
요청의 Content-Type을 확인하는 것이다.
하지만, 쉽게 변조가 가능하다.
2. 실행 권한 제거
파일이 업로드되는 디렉터리는 실행권한을 제거하는 것이다.
하지만, "../file" 이런식으로 경로를 추가해서 다른 디렉터리에 파일을 업로드할 수 있다.
3. 확장자 제한
확장자에 대해 블랙리스트 기반의 필터링을 수행한다.
하지만, php의 경우 php3, php5, phtml 등 다른 확장자를 사용할 수 있고 이는 다른 파일들도 마찬가지이다.
따라서 이 모든 경우를 알아야 하기 때문에 관리하기 어렵다.
화이트리스트 기반의 필터링도 있다.
서버에서 원하는 확장자인지 확인하고 허용하는 방식인데 이것도 뭔가 우회 방식이 있을 것 같다.
2. 웹 쉘 문제 풀기
2.1 Web Shell 1
들어가면 기존에 많이 보던 페이지가 나온다.
바로 회원가입하고 로그인을 해준다.
게시판에서 글쓰기를 한다.
파일 업로드 시 abc.php라는 웹 쉘 파일을 넣는데 여기서 처음에 사용자 지정 파일로 이미지만 받을 수 있게 되어있어서 모든 파일로 변경해야 했다.
<?php
echo system($_GET['cmd']);
?>
매우 간단한 코드이다.
파일이 성공적으로 올라갔고 링크를 복사해서 파일의 경로를 확인한다.
해당 URL을 알게 되었으니, cmd 인자를 통해 flag.txt 파일의 위치를 파악한다.
flat.txt 파일을 cat으로 확인해서 플래그를 얻을 수 있었다.
2.2 Web Shell 2
1번 문제와 똑같이 회원가입을 하고 로그인을 수행한다.
그 후 게시판에서 글을 작성한다.
php 파일을 바로 넣으면 위처럼 업로드할 수 없다고 한다.
버프스위트를 통해 응답을 확인해보니, 이미지 확장자만 허용을 하고 있었다.
그래서 먼저 png파일을 업로드하고 그 과정을 버프스위트로 보면서 중간에 요청을 변조해보기로 했다.
여기서 원래는 abc.png로 해서는 잘 되서 abc.php로 해보니 응답과 같은 결과가 나왔다.
여기서 파일이 업로드가 안된 줄 알았다.
그래서 확장자 필터링을 우회하려고 위처럼 한번 해보고 게시글에서 파일 링크를 확인해서 되는지 해보려고 했다.
먼저 공격은 되지 않았고 혹시나 해서 뒤쪽 경로를 지워보기로 했다.
그런데 웹 쉘이 올라가있는걸 확인했다.
아마 업로드 될 수 없는 파일이 탐지되었다는 메시지가 있었지만 실제로 파일이 올라갔었나 보다.
1번처럼 flag.txt파일을 찾았고 플래그를 얻을 수 있었다.
'보안공부 > 웹 모의해킹 공부' 카테고리의 다른 글
30. [16주차]-1 인가 취약점 (0) | 2024.08.03 |
---|---|
29. [15주차]-1 파일 인클루드 취약점 (0) | 2024.07.27 |
27. [13주차]-1 CSRF 이해-2 (0) | 2024.07.16 |
26. [12주차]-1 CSRF 이해 (0) | 2024.07.06 |
25. [11주차]-1 XSS 문제풀이-2 (0) | 2024.06.29 |