ile Inclusion 취약점으로 RFI(Remote File Inclusion)과 LFI(Local File Inclusion)에 대해 알아보자.

일단, RFI나 LFI 취약점이 존재하는지 확인하려면 다음과 같이 파라미터 입력 부분에 ../를 넣어 확인한다.
취약점이 존재하는 경우, 다음과 같은 include 오류가 뜬다.

  

그럼 이제, LFI와 RFI에 대해 자세히 알아보자.

LFI(Local File Inclusion) 취약점

  1. LFI(Local File Inclusion) 취약점이란?
공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격  
  • php 코드상에서 include() 사용 시 input에 대한 적절한 필터링이 이루어지지 않아 발생하는 취약점
  • 일반적으로 포함시키는 파일명
    • /etc/httpd/logs/access.log
    • /etc/httpd/logs/access_log
    • /etc/httpd/logs/error.log
    • /etc/httpd/logs/error_log
    • /opt/lampp/logs/access_log
    • /opt/lampp/logs/error_log
    • /usr/local/apache/log
    • /usr/local/apache/logs
    • /usr/local/apache/logs/access.log
    • /usr/local/apache/logs/access_log
    • /usr/local/apache/logs/error.log
    • /usr/local/apache/logs/error_log
    • /usr/local/etc/httpd/logs/access_log
    • /usr/local/etc/httpd/logs/error_log
    • /usr/local/www/logs/thttpd_log
    • /var/apache/logs/access_log
    • /var/apache/logs/error_log
    • /var/log/apache/access.log
    • /var/log/apache/error.log
    • /var/log/apache-ssl/access.log
    • /var/log/apache-ssl/error.log
    • /var/log/httpd/access_log
    • /var/log/httpd/error_log
    • /var/log/httpsd/ssl.access_log
    • /var/log/httpsd/ssl_log
    • /var/log/httpd_log
    • /var/www/log/access_log
    • /var/www/log/error_log
    • /var/www/logs/access.log
    • /var/www/logs/access_log
    • /var/www/logs/error.log
    • /var/www/logs/error_log
    • C:\apache\logs\access.log
    • C:\apache\logs\error.log
    • C:\Program Files\Apache Group\Apache\logs\access.log
    • C:\Program Files\Apache Group\Apache\logs\error.log
    • C:\program files\wamp\apache2\logs
    • C:\wamp\apache2\logs
    • C:\wamp\logs
    • C:\xampp\apache\logs\access.log
    • C:\xampp\apache\logs\error.log
    • C:\APM_Setup\Server\Apache\logs\error.log
    • C:\APM_Setup\Server\Apache\logs\access.log

2. 공격 방법
        1) 공격이 가능한지 확인한다. (파라미터에 ../등을 삽입하여 에러메시지 확인)
          2) 파라미터에 원하는 파일의 경로 삽입
                ex) c:\apm_setup\Server\apache\logs\access.log


하지만..!
LFI 취약점을 이용해서 php.ini 파일을 include 시키려고 하면...?
다음과 같이 parse 에러가 난다.

왜???

php.ini 파일의 77번째 라인을 찾아가면 다음과 같은 설명글이 있다...


정확히 왜 때문에 발생하는 parse 에러인지 이해는 가지 않지만 받아올 수 있는 방법은 있다!
아마.. include하는데 <?가 중복 포함되서 제대로 include가 안되는 거 같당...(정확히 모르겠음)

  1. PHP Wrappers 사용한 LFI
           여러 종류의 PHP Wrapper 사용이 가능하지만 가장 많이 시도되는 것이 base64 인코딩을 이용한 방법이다. 
            (다른 종류의 PHP Wrapper가 궁금하다면 https://hakin9.org/web-application-penetration-testing-local-file-inclusion-lfi-testing/ 참조)
           이 때, 응답값 내 base64로 인코딩된 파일 컨텐츠를 반환한다!
         
               php://filter/convert.base64-encode/resource=[파일경로]

            1) php://filter/convert.base64-encode/resource=c:\apm_setup\php.ini 요청


            2) 응답값 내 base64로 인코딩된 값 확인



            3) base64 디코딩



+ Recent posts