일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQLi
- over the wire
- overthewire
- War Game
- php 로그인 페이지 만들기
- php
- file upload
- THM
- privilege escalation
- OS Command Injection
- Cookie
- Server Side Request Forgery
- FTZ
- 파일 업로드 취약점
- php 파일 업로드하기
- php To Do List
- Cryptography
- ssrf
- tryhackme
- BANDiT
- active reconnaissance
- active recon
- Authentication
- Reconnaissance
- access control
- sql injection
- Leviathan
- php login page
- Recon
- php file upload
- Today
- Total
R's Hacking Daily Log
File Upload - Lab (3) 본문
Lab - Web shell Upload via path traversal
파일 업로드에 대해 살펴볼 3번째 Lab은 path traversal 공격과 연관되어 있다.
사용자가 파일을 업로드하면 고정된 경로로 파일이 저장되는 데 이번 Lab에서는 고정 경로에서 php file이 실행되지 않는다.
그렇기 때문에 secondary vulnerability를 이용해 서버가 파일을 실행하도록 만드는 것이 관건인 문제!!
일단은 서버에 업로드할 파일을 만들어주자. 위와 같은 php file을 만들어 webshell.php라고 이름을 붙였다.
** web shell이란
HTTP request를 통해 원격 웹 서버에 보냄으로써 임의의 명령어를 실행시킬 수 있는 악의적인 script
wiener:peter 계정으로 로그인해서 webshell.php 파일을 업로드해 준다.
성공적으로 파일이 업로드되었다는 문구를 확인한 후 packet history를 살펴봤는 데..!
파일 실행 결과가 아닌 파일 내용이 cleartext로 적혀있는 걸 볼 수 있다.
파일을 업로드한 후 출력되는 문구를 보면 "file avatars/webshell.php"라는 부분에서
사용자의 업로드 파일이 저장되는 경로를 알 수 있다.
이 directory에서는 아마도 php file을 실행시키지 않도록 설정해 놨기 때문에 파일 실행 결과 대신에 php file의
원본 내용을 그대로 출력하는 것이다.
이런 상황에서 공격자는
1. 실행시킬 수 있는 MIME type에 php가 포함되도록
2. php file을 실행시킬 수 있는 경로에 업로드
위와 같은 생각을 할 수 있을 것이다.
Lab에서는 이미 path traversal 공격이 가능한 서버라고 알려주었기 때문에 php file을 기본 경로가 아닌 곳에 업로드하여
서버가 실행하도록 만들 계획이다.
packet 내용 중에서 content-disposition header를 보면 filename이라는 값이 들어가는 데
서버는 이 값을 기반으로 파일명과 저장할 위치를 판단한다.
현재 directory를 빠져나오기 위해 traversal sequence를 사용해 봤더니 결과가 달라지지 않는다(?!)
아마 sequence가 작동하지 못하도록 sequence를 제거하거나 decode 하는 등의 과정을 거치는 것 같다.
" / "를 url encode 한 값을 사용해 봤더니 결과가 달라졌다!!
파일이 업로드되었다고 했으니 서버에서 webshell.php file을 실행시켜 결과를 보낼 줄 것이다.
** 이때 ../ sequence가 사용되었기 때문에 현재 webshell.php file이 저장된 위치는
/files/avatars가 아닌 /file directory이다.
history에 가서 확인해 보면 /files/webshell.php 경로의 GET request가 있는 걸 볼 수 있다.
response를 확인해보면
/home/carlos/secret file의 내용을 얻을 수 있다. submit solution으로 제출하면 끝!
'Port Swigger > File Upload' 카테고리의 다른 글
File Upload - Lab (5) (0) | 2023.06.25 |
---|---|
File Upload - Lab (4) (0) | 2023.06.25 |
File Upload - Lab (2) (0) | 2023.06.21 |
File Upload (1) & Lab (1) (0) | 2023.06.20 |