작은 메모장

19. 파일 업로드 취약점 본문

실더스 루키즈 교육

19. 파일 업로드 취약점

으앙내눈 2023. 12. 21. 14:31

파일 업로드 취약점

게시물, 이미지 첨부 기능에서 확장자 검증을 하지 않고, 서버 스크립트 실행권한을 제한하지 않아서, 웹 쉘이 업로드 되는 것을 허용하게 되는 취약점.

 

기초적으로 웹쉘이 실행되는 조건은 아래와 같다.

1. 악성스크립트 (php)의 업로드가 허용이 되어야 한다.

2. 업로드 한 악성스크립트의 절대 경로를 알아야 한다.

3. 악성스크립트가 정상적으로 실행이 되어야 한다.

이 3가지 조건 중 하나라도 만족이 되지 않는다면 웹 쉘은 동작하지 않으며, 개발자들도 바보가 아닌 이상 이 3가지를 열어놓고 있지 않는다.

그렇기에 공격하는 입장에서는 어떻게든 비집고 들어가야하는 상황.

 

파일 업로드 취약점 공격의 목적은 크게 4가지로 볼 수 있다.

1. 웹 서버를 침투하기 위함

2. 데이터베이스의 정보를 획득하기 위함

3. 근접 네트워크에 접근하기 위함

4. 웹 페이지를 변경하여 악성코드를 배포하기 위함 -> 대표적으로 index.html 페이지를 변경하여 스크립트를 주입

1,2,3은 부수적인 효과라고 보면 되고, 대부분 4번이 가장 큰 목적이다. Index 페이지를 변경하기만 한다면 방문자마자 스크립트가 감염되는 효과를 얻기 때문에 악성 공격자들이 가장 노리는 목표이기도 하다.

 

 

이걸 파헤쳐 볼 것이다.

사용할 백도어 파일은 저번에 사용한 것을 다시 사용할 것이다.

파일 업로드 버튼을 눌러서 업로드를 시도해보자.

아까 찾은 경로에 있던 파일을 업로드 해보자.

파일이 정상적으로 올라간 모습

올라간 웹쉘도 정상적으로 실행된다.

 

 

조금 더 성능이 뛰어난 웹 쉘을 사용해보자

B374 Webshell을 사용할 것이다.

링크는 다음과 같다. (https://github.com/tennc/webshell/blob/master/php/b374k/b374k-2.8.php)

똑같이 업로드 해준다.

초기 암호는 b374k

그럼 이렇게 깔끔한 인터페이스의 화면을 볼 수 있다.

admin > setting.php를 진입하면 DB 연결 정보가 있다.

이걸 가지고 MySQL 연결 시도를 하면,

이렇게 DB에 접근이 가능한 것을 확인할 수 있다.


난이도를 올려서 medium으로 시도해보자.

웹 쉘을 올리려고 하면, 특정 확장자의 입력은 받지 않는다고 거부한다.

파일 확장자가 문제였으니, 파일 확장자를 업로드하는 중간에 수정하면 된다.

Burp Suite를 켜고 업로드 하는 도중에 프록시로 가로채면, 중간에 filename 이름이 보인다.

이 뒤에 . 하나를 찍어서 알아보지 못하게 만들자.

정상적으로 업로드가 된 모습.

실행도 잘 되는 모습을 볼 수 있다.

 

추가적인 설명을 하자면, php 확장자는 단순히 php만이 동작하는 것이 아니다.

어디까지나 "스크립트 언어"이기 때문에 호환되는 버전끼리는 확장자가 달라져도 명령어 자체는 같으므로 동작할 수 있다.

때문에 어지간하면 확장자가 달라져도 동작하는 데에는 크게 문제점이 없다.

호환되는 환경은 아래와 같은데,

php 환경은 php, php3, php5, phtml

asp 환경은 asp, aspx, asa, cer 등

jsp 환경은 jsp, js%70

로 생각하면 된다.


 

가상으로 만든 이 사이트에서 실습을 해보자

php 파일을 올리려고 하면 alert가 뜨면서 업로드 할 수 없다고 한다.

즉, JavaScript가 뒤에서 돌아가고 있다는 것.

Burp Suite를 켜고 새로고침하여 얻는 값을 살펴보자

관련된 스크립트 내용을 찾았다. 이걸 전부 지운 후 진행하면 문제없이 동작할 것이다.

정상적으로 등록된 모습을 확인할 수 있다.

누르면 실행도 잘 되는 모습을 확인할 수 있다.


같은 원리로 이 사이트에서도 진행해보았다.

확장자 제한이 JS로 막혀있는 모습

확장자를 검사하는 코드를 지우고 다시 실행해본다.

성공적으로 등록이 된 모습

문제는 실행이 아닌 다운로드가 된다.

즉, 업로드가 되었지만, 어떤 특정 경로에서 파일을 가져오는 식으로 코드가 짜여 있는 것.

업로드 경로를 추적해보면, down이라는 함수에서 filepath라는 변수에 경로가 하드코딩 되어있는 모습을 확인할 수 있다.

이 경로를 바탕으로 메인 경로에 알아낸 경로를 붙여 경로를 유추해보자.

asp 파일이 아니라서 실행이 되지 않지만, 그래도 파일이 실행되어 내부가 보이는 모습을 볼 수 있다.

 

 

'실더스 루키즈 교육' 카테고리의 다른 글

21. Amazon VPC  (0) 2023.12.28
20. AWS 클라우드 개요  (0) 2023.12.26
18. SQL Injection  (0) 2023.12.20
17. XSS 취약점  (0) 2023.12.19
16. BeeBox와 인증처리미흡 취약점  (0) 2023.12.18