일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php 로그인 페이지 만들기
- over the wire
- Reconnaissance
- Authentication
- privilege escalation
- Cookie
- FTZ
- overthewire
- THM
- Recon
- War Game
- OS Command Injection
- sql injection
- file upload
- active reconnaissance
- php file upload
- php
- active recon
- access control
- php login page
- php To Do List
- SQLi
- Leviathan
- Cryptography
- Server Side Request Forgery
- BANDiT
- tryhackme
- ssrf
- 파일 업로드 취약점
- php 파일 업로드하기
- Today
- Total
R's Hacking Daily Log
Directory Traversal 본문
Directory Traversal이란?
file path traversal이라고도 불리는,
공격자가 application에서 돌아가는 서버의 임의 파일을 읽을 수 있도록 하는 웹 보안 취약점이다.
application의 code와 data, back-end system에 대한 자격, 중요한 운영 시스템 파일들이 대상이 될 수 있으며,
경우에 따라 공격자가 다음의 것을 할 수 있게 된다.
- 서버의 임의 파일을 작성
- 어플리케이션의 데이터나 동작을 수정
- 서버의 전체 통제권을 Get!
Reading arbitrary files via directory traversal
세일을 하는 상품의 이미지들을 띄우는 쇼핑 어플리케이션이 있다고 가정해보자!
여기서 상품의 이미지는 아래와 같이 HTML의 image tag를 사용하여 업로드될 수 있다.
<img src="/loadImage?filename=79.png">
//loadImage가 뭐야?
//filename이 79.png인 파일이야
loadImage URL은 filename이라는 매개변수를 가지며, 지정된 파일의 내용을 반환하고
image file은 알아서 disk 속 /var/www/images/ 경로에 저장된다.
image를 반환할 때는 어플리케이션이 filesystem API로 해당 파일의 내용을 읽기 위해
filename의 값을 기본 경로 뒤에 이어 붙여 사용한다. 이때 파일의 path는 아래와 같다.
/var/www/images/79.png
여기서의 어플리케이션은 directory traversal 공격에 대한 방어를 실행하지 않기 때문에,
공격자는 서버의 파일 시스템으로부터 임의의 파일을 검색하기 위한 URL을 요청할 수 있다.
https://insecure-website.com/loadImage?filename=../../../etc/passwd
이 URL은 어플리케이션이
/var/www/images/../../../etc/passwd
위와 같은 경로의 파일을 읽도록 만든다.
따라서 매개변수 값에 공격자가 원하는 파일의 경로를 입력하여 의도와 다른 정보를 얻을 수 있게 되는 것이다.
위의 path에서 사용된 [ ../ ] 는 file path에서 유효한 sequence로, 폴더 구조에서 한 단계 더 들어간다는 의미이다.
3번 연속적인 ../ sequence는 /var/www/images/ 에서 filesystem root로 이동하는 것을 의미하여 사실상 읽어진 파일은
/etc/passwd
/etc/passwd 파일은 Unix 기반 운영 시스템에서는 서버에 등록된 사용자의 세부 사항을 포함하는 표준 파일이다.
Window 기반에서는 [ ../ 과 ..\ ] 모두 directory traversal의 유효한 sequence로 표준 운영 시스템 파일을 검색하기 위한 공격으로서
동일한 기능을 한다.
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
Commom obstackles to exploiting file path traversal vulnerabilities
file path에 사용자의 input이 들어가는 어플리케이션은 path traversal 공격에 대한 몇 가지 방어를 실행한다.
!) 이제부터 어플리케이션이 사용자가 input으로 제공한 filename으로부터 directory traversal sequence를
제거하거나 차단하는 경우를 살펴보자
1) Absolute path
filename=/etc/passwd
와 같은 절대 경로를 사용할 수 있다면, 어떤 sequence를 사용하지 않고 file을 곧바로 참조
2) Nested Traversal Sequence
....// or ....\/
내부 sequence를 제거할 때, 단순한 traversal sequence로 되돌아가는 중첩된 traversal sequence 사용
3) Sequence Encoding
웹 서버는 어플리케이션에 사용자의 입력값을 보내기 전에, 어떤 directory traversal sequence든 제거할 것이다.
이런 경우에는, URL은 encoding or double encoding 함으로써 우회할 수 있을지도 모른다.
../ : %2e%2e%2f or %252e%252e%252f
non-standard encoding : ..%c0%af or ..%ef%bc%8f
4) suitable traversal sequences
어플리케이션이 filename의 값이 반드시 base folder로 시작하도록 요구한다면,
요구된 base folder를 포함하며 적절하게 sequence를 사용할 수 있다. (ex. base folder = /var/www/images/)
filename=/var/www/images/../../../etc/passwd
5) Null byte
어플리케이션이 filename의 값을 반드시 예상되는 파일 확장자가 되도록 요구한다면,
요구된 파일 확장자 전, 파일 경로를 끝낼 때 Null byte를 사용할 수 있다. (ex. expected file extension = png)
filename=../../../etc/passwd%00.png
'Port Swigger > Directory Traversal' 카테고리의 다른 글
Directory Traversal - Lab(2) (0) | 2023.05.19 |
---|---|
Directory Traversal - Lab(1) (0) | 2023.05.19 |
Directory Traversal (2) (0) | 2023.05.18 |
Directory Traversal (Path Traversal) (1) (0) | 2023.05.17 |
Directory Traversal Lab (0) | 2022.11.06 |