본문 바로가기
HACKING_GAME/WEB

root-me#1 Local File Inclusion - Double encoding

by asdf12345 2020. 7. 13.

0. 개념

LFI(=Local File Inclusion) ?

조작된 user input을 전송하여 서버 응답 값 내 서버 파일 내용을 포함시키는 취약점입니다.

 

Double encoding란? 

글자 그대로 두번 URL encoding된 문자열, Double encoding을 이용하여 공격 구문 필터링 우회 가능합니다~!

예시 ) 서버 다운로드 취약점 필터링으로 상위 폴더 접근 구문인 "../" 적용시의 USER INPUT 에 결과는 아래와 같습니다.

 

1) URL.decoding(%2e%2e%2f) -> "../"

2) URL.decoding(%252e%252e%252f) -> "%2e%2e%2f"

 

여기서 2)를 통해 "../" 구문 필터링은 우회 가능합니다.

 

Webserver안에 여러 인코딩 문자열 수용 코드가 존재하므로 필터링 우회 후,

입력한 "%2e%2e%2f"을 "../"로 인식하는 경우가 발생할 수 있습니다. 

 

1. 문제

웹사이트 소스코드 파일들 내 유효한 비밀번호를 찾아라.

 

 

2. 풀이

 

 

CV link 클릭 시, parameter을 통해 "cv" 값 전송하는 것을 알 수 있습니다.

-> Userinput point 확인

 

파일 다운로드 공격을 위해 상위 폴더 접근 문자열 "../" 입력 시도 시, Attack detected 문자열 발생합니다.

문제 이름 그대로 Double decoding 문자열 "../" 값 삽입 시, 에러 노출 확인되네요.

-> 에러 확인을 위한 userinput 삽입 방식 확인

-> include() 함수 이용 확인 

에러 내 include() 인자 값으로 입력 문자열("../") 외 ".inc.php" 삽입되는 것을 알 수 있습니다.

공격자가 의도한 Userinput 삽입을 위해 null byte 이용 가능합니다. 야호

include() 인자값 내 php 지원 프로토콜을 이용하여 LFI 가능합니다.

관련 문제 : https://www.root-me.org/en/Challenges/Web-Server/PHP-filters

 

추출한 소스코드들 분석을 통해 password 획득 성공했습니다

 

'HACKING_GAME > WEB' 카테고리의 다른 글

root-Me#7 Node.js Eval  (0) 2021.04.08
root-Me#6 Graphql  (0) 2021.01.04
root-Me#5 SQL Injection - Routed  (0) 2020.12.20
root-Me#4 Revoked Token - JWT  (0) 2020.12.14
root-ME#2 Java Server-side Template Injection  (0) 2020.07.24