반응형

현재 웹 서비스에는 이미지나 문서 등의 파일 업로드 기능이 있다.

구글 드라이브와 같이 파일을 업로드 다운로드하며 공유할 수 있도록 하는 서비스를 개발할 때,

사용자가 업로드한 파일을 데이터베이스에 저장하는 것보다는 서버의 디렉토리상에 저장하는 것이 쉽고 편하다.

하지만 임의 파일이 다운로드 되는 취약점이나, 악성 웹셸 파일을 업로드하여 서버 내부의 데이터를 탈취하는 등의 공격을 받을 수 있다.

파일 업로드와 관련해서 발생하는 취약점은 파일 업로드 취약점(File Upload Vulnerability)라고 하며,

파일 다운로드와 관련해서 발생하는 취약점은 파일 다운로드 취약점(File Download Vulnerability)라고 한다.

 

 

1. File Upload Vulnerability

사용자의 파일을 서버에 업로드하는 과정에서 발생하는 취약점으로, 업로드될 파일의 이름을 임의로 정하여 서버 임의 경로에 원하는 파일(Path Traversal)을 업로드하거나 악성 확장자를 갖는 파일을 업로드할 수 있을 때 발생하며 원하는 시스템 커맨드를 실행하는 원격 코드 실행 취약점을 유발할 수 있다.

image-storage 문제를 풀어보며 기법을 사용해보자.

 

문제의 목적은 /flag.txt를 읽는 것이다.

접속하게되면 파일 업로드 기능이 있다는 것을 볼 수 있고 임의의 파일을 올려본다.

선택한 이미지가 올라간 모습을 확인할 수 있고 클릭해서 보게되면 uploads/분석.png 의 경로로 저장되어 있다.간단하게 웹셸부터 올려보자.

https://github.com/WhiteWinterWolf/wwwolf-php-webshell

오픈소스로 제작된 하나의 웹셸을 다운받고 파일 업로드를 하게되면,

셸파일을 통해 서버안에 있는 데이터들을 볼 수 있다.

최상위 디렉토리에 있는 flag.txt를 읽어주면 끝. 

 

 

 

 

2. File Download Vulnerability

웹 서버에 존재하는 파일을 다운로드 하는 과정에서 발생하는 취약점으로, 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드 할 수 있으며, 설정 파일, 패스워드 파일, 데이터 베이스 백업 본 등을 다운로드 하여 민감한 정보를 탈취할 수 있고 2차 공격을 수행할 수 있다.

file-download-1 문제를 풀어보며 기법을 사용해보자.

문제의 목적은 ./flag.py를 읽는 것이다.

 

접속 정보를 받아 접속해보면,

메모를 업로드하는 페이지가 있는데 예제를 입력해서 업로드 해보자.

 

/read?name={제목} 의 url로 업로드한 메모에 접근할 수 있게 된다.

 

 

문제의 목적인 flag.py가 정확히 어느 디렉토리에 있는지 모르기 때문에 소스코드를 보면, uploads라는 폴더 아래에 저장되게 되는데

, /read?name={제목} = upload/{제목} 이라는 것을 알 수 있다.

 

uploads 디렉토리에 flag.py가 있는지 확인해본다.

없다고 나오니 그 상위 디렉터리가 뭔지는 모르지만 uploads 디렉터리와 같은 경로에 flag.py가 있는지 확인해본다.

 

상대경로를 이용해 파라미터를 넘겨주면

flag.py의 값을 찾았다.

반응형

'Web hacking > 이론' 카테고리의 다른 글

SSRF (web-ssrf)  (0) 2022.10.21
Command Injection  (0) 2022.08.24
Blind NoSQL Injection (Mongo)  (0) 2022.08.23
비관계형 데이터베이스 Mongo DB, Redis, Couch DB  (0) 2022.08.17
SQL injection, Blind SQL injection  (0) 2022.08.17