아임노드

실무 환경에서의 주요 취약점_File Inclusion 본문

[SK shieldus Rookies 23기] 공부 노트/취약점 진단 도구 및 활용법

실무 환경에서의 주요 취약점_File Inclusion

Noody 2024. 12. 12.

File Inclusion
- 파일 참조 공격
- L(Local)FI, R(Remote)FI으로 나눠짐
LFI : 경로순회, 파일 다운로드 취약점과 연관성이 있음
  ex) http://test.com/abcd/page?path=../../../../../../../etc/passwd
      ../ -> 상위 디렉토리를 의미
      최상위 경로 기준으로 passwd 파일 확인한다는 것

      http://test.com/abcd/page?down=../../../../../../../etc/passwd
      down이라는 함수에 의해 passwd 파일이 다운로드됨
  WAF 우회 하기 위해 ../ 에 대해 인코딩 기법 사용(URL,HTML)
   ex ) ..%2F = ../ 와 같음 (URL 인코딩)
  forward:/etc/passwd와 같이 forward 함수 사용
  ../../../../etc/passwd%00 파일명 끝에 널문자 삽입(%00)
  ....//....//....//....//....//....// 와 같이 2중 경로 입력
  취약한 구조 ex) http://test.com/abcd/page?id=index.html

RFI : 원격 파일 참조 공격
  ex) http://test.com/abcd/page?id=http://goolgle.com
  test.com 화면에 google.com 화면이 출력됨
  RFI 우회 기법
   htthttp://p://

 


File Inclusion

1. 경우의 수 생각하기

..%2F = ../ 와 같음 (URL 인코딩)
  forward:/etc/passwd와 같이 forward 함수 사용
  ../../../../etc/passwd%00 파일명 끝에 널문자 삽입(%00)
  ....//....//....//....//....//....// 와 같이 2중 경로 입력

 

2. 테스트

> dvwa > file Inclusion(level:low) 탭으로 이동

 

> 취약 구조 확인(URL)

page라는 파라미터에 include.php를 받아오고 있다(취약 구조이구나!)

 

> 테스트 진행

../는 다섯번 이상만 넣어주면 된다.

(password가 아닌 passwd임 체크)

 

> 결과 확인 (취약부분 확인)

 

 

3. high 레벨 테스트

high레벨로 변경한 다음 burpsuite로 테스트 진행

> burpsuite를 on으로 변경한 다음 dvwa에 [file1.php] 클릭

> Repeater로 보내기 [ctrl+R]

> Repeater에 file1.php 부분 지우기

 

> 이제 저 빈 부분을 채워서 command Injection처럼 넣어보면 되는데

일일이 치는 것보다 hackbar.jar라는 플러그인을 설치했으니 이를 이용해보도록 하자.

 

> 넣고자 하는 부분에 커서 깜박 확인 > 마우스 좌클릭 > Extensions > Hackbar > LFI > Simple Check

   추가하고자 하는 문자열 클릭 > Send

> 결과로 File not found가 나왔으므로 %252e를 좀 더 추가해보도록 한다.


* 디코딩 확인


> 디코딩 결과로 보니 . = %252e 이므로 패턴을 보고 /(슬러쉬)= %252f를 넣어주어야 한다.

패턴 분석하면 %252e%252e%252fetc%252fpasswd

%252e%252e%252f   = ../ (상위 디렉토리 이동) 이므로 아래와 같이 넣어주도록 한다.

그러나 이번에도 경로 인식 안됨(넘어가자)

 

> 이번에 이 ....//도 확인해보자.

필터링되서 안되는 것 확인

 

> 다음 것 확인

%252e가 안됬으므로 당연하게도 이것도 안됨!

 

> 다음

안됨

 

 

4. 소스코드 확인

high레벨에선 다 막혀있다.

소스코드를 보니 파일 이름을 아예 static하게 지정해놓으거라 우회 불가

(파일이 이름이 include.php가 아니면 안됨)

 

여기서 알 수 있는 완화방법으로

  • 특정 페이지만 입력되도록 지정
  • 경로순회 문자열 필터링

하는 것들이 있다.


미디움 레벨도 진행해보자. (우회가능)

bwapp도 해보자.