File Include, File Download 취약점

이정민·2024년 2월 14일

이번 포스팅에서는 File Include, File Download 취약점을 다루겠습니다. 해당 취약점은 php를 사용한다는 가정하에서 다루겠습니다.

File Include

Include를 다들 사용해 보셨을텐데 Include의 개념은 php에서 예를 들어 a.php라는 파일 안에

<?php
	(코드내용~~~~)
?>

이라는 내용의 코드가 있을 때, b.php 파일에서 include를 사용하면 해당 부분에 a.php 파일의 내용을 복사해 붙여넣는 것과 같은 효과를 보여줍니다. 즉 여러 페이지에 중복되서 들어갈 내용이 있다면 해당 부분을 php 파일로 만들고, 다른 페이지에는 include하는 방식으로 이용할 수 있습니다.

File Include 취약점?

File Include 취약점은 이러한 Include를 사용하는 방식 중에서도, 특정 파라미터에 따라 다른 페이지를 보여주는 페이지에서 발견될 수 있는 취약점입니다. 예를 들면 어떤 빵집 페이지가 있다고 가정해봅시다. 해당 빵집 페이지에서 사용자가 크림빵, 팥빵, 식빵이라는 파라미터를 정하면 해당 php 페이지에서 사용자가 정한 파라미터에 대한 페이지를 include해서 불러오는 페이지가 있다고 가정해봅시다.

?type=빵종류.php
<?php
	include($_GET['type']);
?>

형태는 대충 이러한 형태라고 가정해봅시다. 여기서 사용자가 type 파라미터를 입력해 식빵.php가 되면 식빵.php를 include해서 식빵.php의 내용을 불러오겠죠. 여기서 취약점이 발생할 수 있습니다. 예를 들면 서버 OS가 리눅스라 가정했을 때, 파라미터에 ../../../../../../etc/passwd를 주면 어떻게 될까요? 파일 이름 뒤에 ../라는 경로가 붙었는데 이것은 상위 경로로 이동하는 것이기 때문에 거슬러 올라가다 결국 최상위 경로로 이동할 것이고, 최상위 경로에서 etc라는 경로로 이동해 비밀번호가 적힌 passwd라는 파일을 붙여넣어서 공격자가 해당 서버에 비밀번호를 알 수 있게 되는 것입니다. 물론 서버에 있는 다른 파일의 경로와 이름만 안다면 그것도 가져올 수 있겠죠.

해당 취약점은 특징이 있는데, 지정한 파일을 실행하고 가져오게됩니다. 즉 해당 취약점으로는 php 파일을 가져와도 이미 php코드를 실행하고 가져오기 때문에 소스코드 자체를 살펴보기에는 어려움이 있습니다. 하지만 이런 경우에는 어떨까요? 만약 파일이 업로드 되는 서버에서 해당 취약점이 발견되었고, 웹쉘을 넣을 수는 있는데 php라는 확장자로는 넣을 수 없습니다. 이런 경우에 웹쉘을 jpg로 넣고, 취약점을 이용해 해당 jpg 파일을 실행하게되면 jpg파일을 include하면서 그 안에 담긴 php코드를 실행하기 때문에 웹쉘을 발동시키는 것이 가능합니다.

만약 업로드가 불가능한 사이트인 경우에도 웹쉘을 발동시키는 것이 가능합니다. 그건 웹 로그를 이용하는 것입니다. 웹 로그 파일의 경로와 이름을 알 때, 주소 창에 <?php echo system($_GET['cmd']); ?> 흔히 아는 한 줄 웹쉘 코드를 적습니다. 당연히 페이지는 400 에러가 뜨겠지만 이런 에러조차도 웹서버에 있는 웹 로그 파일에는 주소가 저장이 됩니다. 여기서 아까 취약점을 사용해서 웹 로그를 불러온다면? 파일을 실행하고 불러오기 때문에 php코드는 실행하고 웹 로그를 불러옵니다. 즉 그 과정에서 웹쉘이 발동되는 것이죠.
즉 File Include 취약점은 다방면으로 활용될 수 있는 매우 중요한 취약점입니다.

File Download 취약점

File Download 취약점은 단순히 파일을 다운로드 하는 경우에 생길 수 있는 취약점입니다. 파일을 다운로드할 때, download.php 등 다운로드만을 위한 php 파일에 대한 요청이 있는 경우가 있습니다. 이 요청을 잘 살펴봤을 때, 예를들면

<?php
	fileName=$_GET['fileName'];
    download('/파일경로/' . $fileName);
    //임의로 download라고 했지만 파일을 다운로드시키는 함수가 있었을 때
?>

이런식의 코드가 있는 경우에, 요청을 intercept해서 경로와 파일을 바꿔버리면 원하는 다른 파일을 다운받을 수 있게 되는 취약점입니다. 이 취약점은 위에 적혀있듯 비밀번호같은 중요한 정보는 물론이고, 무엇보다 소스코드를 그대로 다운받아 살펴볼 수 있습니다. 공격자로 하여금 구성된 페이지를 살펴보고 다른 취약점이 있는지 분석할 수도 있기 때문에 해당 취약점 또한 매우 중요한 취약점입니다.

profile
공부중

0개의 댓글