-
<WEB Hacking> LFIWEB Hacking 2022. 1. 12. 01:47
■ LFI(Local File Inclusion)
LFI 취약점이란 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격이다.
LFI 또는 RFI(Remote File Inclusion) 취약점이 존재하는지 확인하기 위해 주로 파라미터로 ../를 입력해본다.
공격 대상 주소/test.php?parameter=../
LFI 취약점은 php 코드상에서 include() 사용 시, 입력 값에 대한 필터링이 이루어지지 않아 발생하는 취약점이다.
만약 LFI 공격이 가능하다면, 파라미터에 파일의 경로를 입력하면 파일이 실행된다.
# example <?php $file = $_GET['file']; if(isset($file)){ include("pages/$file"); } else{ include("index.php"); } ?>
# input /test.php?file=../../../../../../../../etc/passwd
■ PHP Wrappers
php://filter
가장 많이 사용되는 방법으로, base64 인코딩을 이용한 방법이다.
?parameter=php://filter/convert.base64-encode/resource={파일 경로}
이를 요청하면, Response Body 안에 base64로 인코딩된 값을 확인할 수 있다.
이 값을 base64 디코딩하면 해당 파일의 코드를 읽을 수 있다.
base64로 인코딩하지 않고 사용할 수도 있다.
?parameter=php://filter/resource={파일 경로}
Expect Wrapper
시스템 명령의 실행을 허용하지만, expect php 모듈은 기본적으로 비활성화 되어있다.
?parameter=expect://ls
Zip Wrapper
업로드된 .zip 파일을 서버 측에서 처리하여 침투 테스터가 취약한 파일 업로드 기능을 사용하여 zip 파일을 업로드하고 LFI 취약점을 통해 zip 필터를 활용할 수 있다.
1. php 리버스 셸을 생성한다.
2. zip 파일로 압축한다.
3. 압축된 셸 페이로드를 서버에 업로드한다.
4. zip wrapper를 사용하여 페이로드를 추출한다.
?parameter=zip://path/to/file.zip%23shell
위는 zip 파일을 셸로 추출한다. 만약 서버가 .php를 추가하지 않으면, shell.php로 변경한다.
※ 파일 업로드 기능이 zip 파일 업로드를 허용하지 않는 경우, 파일 업로드 기능을 우회할 수 있다.
/proc/self/environ
LFI 취약점을 통해 /proc/self/environ을 포함할 수 있다면, User-Agent 헤더를 통해 소스 코드를 주입하는 것이 가능하다. 소스 코드가 User-Agent 헤더에 삽입되면, LFI 취약점을 이용하여 /proc/self/environ을 실행하고, 환경 변수를 재로딩하여 역 셸을 실행할 수 있다.
Null Byte Technique
Null Byte Injection은 %00과 같은 URL 인코딩된 널 바이트를 추가하여 웹 응용 프로그램 내의 필터링을 우회한다.
?parameter=/etc/passwd%00 ?parameter=/etc/passwd%2500
Truncation LFI Bypass
Truncation은 블랙리스트 우회 기술이다. 취약한 파일을 포함하는 메커니즘에 긴 매개변수를 주입함으로써, 웹 응용 프로그램은 입력 매개변수를 잘라내 입력 값 필터를 우회할 수 있다.
'WEB Hacking' 카테고리의 다른 글
<WEB Hacking> ServerSide: SSRF (0) 2022.01.05 <WEB Hacking> File Vulnerability (0) 2021.12.23 <WEB Hacking> Command Injection (0) 2021.12.22 <WEB Hacking> NoSQL Injection (0) 2021.12.20 <WEB Hacking> SQL Injection (0) 2021.12.20