------------------------------------------------------------------------------------------------------------------
fi (file inclusion)
> 사용자 입력을 받아서 include
include($_GET['url']);
**RFI(Remote File Inclusion)
: 외부 서버 코드를 불러와서 인클루드.
[정의]
원래 개별파일로 페이지를 제작하면 공통적으로 들어가는 양식때 한 항목 부분을 수정하면 나머지 항목들도 수정해야하는 번거로움이 있었다. 그렇지만 include를 사용함으로써 이런 번거로움을 줄일 수 있었는데, Top.php, middle.php, bottom.php로 부분을 나누어 따로 개발하는 등의 일을 수행할 수있게 되었다. 이후 공통부분은 모두 include문이 대체하게 된다.
이 RFI는 include문이 한개 이상일때 사용할 수 있는 공격이다
사용자로부터 입력을 받아서 include시킬 때, 이에 대한 예시로는 lang=en or ko. "php" 로 언어를 바꾸는 부분이 있다, include ($_GET['URL'];) 이와 같이 URL을 통째로 가져와 include시키는 것을 외부 서버 코드를 불러온다라고 말한다.
[공격패턴]
이 RFI는 주로 두가지의 행동을 수행한다. DVWA 실습
(1) ?page=include().php에 ../../../etc.pass에 접근하는 등의 특정 파일을 가져와서 보여주는 것.
*include는 접근할 수있는 모든 파일을 가져올 수있다.
(2) 서버 측 파일을 실행
*inclde문은 단순히 복붙이 아닌 서버측 코드만을 실행한다.
<?php
요 안에 있는 것들만 실행해서 가져다준다.
?>
(3) normaltic.com/webshell.txt 하고 로드하는 경우도 있음.
** LFI(Local File Inclusion)
: 서버에서 코드 업로드 인클루드 (업로드되어있는 파일을 이용해서 공격)
[실행 TIP]
*LFI Shell
*서버엔 엑세스 로그 파일이라는 것이 존재한다.
파일 업로드 기능이 없어도,
웹 서버에 PHP 코드를 시도해 로그에 흔적을 남기고 include 로그를 하면 이 PHP문이 실행됨.
*가장 흔한 로그의 위치는
apach는 php.info에 나와있다.
예시 opt/lampp/logs/access_log
file upload 방식과 혼합해서 .php 파일이 안올려지면 jpg로 올린후
File include로 실행시킬 수 있음.
--------------------------------------------------------------------------------------------------------
파일 업로드 대응방안
**대응방안
- 파일명 난수화
- include X
- 사용자 파라미터 검증
- 확장자를 강제로 고정
파일 include 취약점이 있을 시 불가.
그렇지 않을 시 좋은 예방 방안.
*우회
- .htaccess
- LFI, RFI
*근본 대응방안
(1) DB 내 File ID
-> 파일 업로드 경로를 숨겨서 막아보자.
file ID path realName
1 /upload/ test.jpg
=> SQL Injection으로 경로 노출 시 위험.
(2) DB 내의 File ID 관리 & 실제 저장되는 곳을 웹 경로에서 분리
[보통]
웹 루트 경로: /var/www/html
파일 업로드 경로: /var/www/html/upload/
[분리]
파일 업로드 경로: /upload/(최상위 경로)
=> 하지만 다른 경로에 저장 시 예방 불가함.
../../../../../var/www/html/upload/webshell.php
(3) **파일을 웹서버에 저장하지 말자!
1) DB
2) NAS(개인 파일 서버)
-------------------------------------------------------------------------------------------------
*File Download PHP
1. 사용자로부터 특정 파일 정보를 입력받는다.
2. fileOpen('/upload/' + $_GET['FileName'])
3. 서버의 응답으로 출력
파일 다운로드 취약점을 찾으면 POC로
리눅스: /etc/passwd
윈도우: C:\windows\System32\drivers\wtc\hosts
소스 코드: java class 파일 디컴파인
* 대응 방안
(1)파일 관리! DB로 파일 관리!
file ID path realName
1 /upload/ test.jpg
2 /upload/ ../../../../../../etc/passwd
->그러나
FileName: ../../../../../../etc/passwd
File ID = 2
불러온 파일 : /etc/passwd
-->path("var/www/html/../../test.html")
var/teat.html 로 축약해주는 함수를 사용해서 막을 수 있음.
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
SQL injection 실습(보고서 작성) (0) | 2022.01.13 |
---|---|
[11주차] 인증/인가 취약점 수업 필기 (0) | 2021.12.23 |
[복습]파일 업로드 취약점 실습(2) (0) | 2021.12.16 |
[10주차] File Inclusion(LFI, RFI) (0) | 2021.12.16 |
[복습] 파일 업로드 취약점 실습(1) (0) | 2021.12.14 |