개념과 정의
동적 웹페이지를 제작하는 경우 반복되는 코드의 사용이 생깁니다. 이런 부분들을 재작성하지 않고 인클루드를 통해서 단 몇 줄만 작성하면 여려 줄의 반복되는 코드를 굳이 재작성하지 않아도 됩니다. 그러나, 사용자의 파라미터 등의 입력을 통해 받고 보이도록 구현한 경우, 서버 내의 파일이 보이는 취약점이 발생할 수 있습니다. 이런 취약점을 파일 인클루드 취약점이라고 합니다. 아래에서 예를 들어서 설명하겠습니다.
취약점 발생 예시
언어에 따라서 다른 페이지가 보여지도록 구현하는 예시에서 url에 '?lang=ko.php'와 같은 방식으로 되어있다면 공격자는 이 url에서 파라미터를 받고 서버의 특정 위치에서 인클루드 하는 식으로 구현하였다고 추측할 수 있습니다. php 코드 내부는 아래와 같이 작성되어 있다고 예상할 수 있습니다.
<?php
include($_GET['lang']);
?>
저기에 lang 파라미터를 입력하여서 include 기능에 접근이 가능하다면 서버 내외에 있는 파일에 접근하고 본 페이지에 포함시킬 수 있습니다.
예를 들어 공격자가 '../../login.php'와 같이 입력한다면 login.php의 파일을 접근할 수 있게 됩니다. 저 login.php가 정상적인 방법으로 접근할 수 없는 파일이라면 그것으로도 문제가 될 수 있겠지만, 더 큰 문제는 따로 있습니다. 바로, 파일 인클루션을 통해서 웹셸은 실행시킬 수 있다는 것입니다. 해당 공격 시나리오는 아래에서 더 자세하게 알아보도록 하겠습니다.
종류
파일 인클루션에는 크게 두가지가 있습니다. 서버 내에 있는 파일을 인클루드 하는 LFI가 있고, 서버 외의 파일을 인클루드 하는 RFI가 있습니다.
- LFI - Local File Inclusion
- RFI - Remote File Inclusion
공격 시나리오
1. 웹셸 인클루드 공격
파일 인클루션 취약점이 있는 것을 공격자가 알아내게 된다면 웹셸은 jpg나 다른 어떤 확장자로든 업로드를 하고 파일 인클루션을 통해서 포함해서 실행시키면 웹셸이나 다른 어떤 php 파일도 실행시킬 수 있습니다.
2. 로그 인클루드 공격
파일 업로드를 할 수 있는 공간이 없다면, 공격자에게는 그래도 방법이 있습니다. 바로 로그를 통해서 실행시키는 방법입니다. 서버에 요청을 전달하면 해당 내용이 서버에 로그로 남게 됩니다. 해당 로그를 php로 인클루드 하여 실행시키면 php로 작성된 부분이 웹서버에서 실행되게 됩니다. 따라서 업로드 취약점이 따로 있지 않더라도 인클루드 취약점이 있다면 충분히 공격이 가능합니다. 물론, 로그에 접근하기 어렵게 한다면 그것도 충분히 가능하겠지만 파일 인클루션 취약점이 없도록 하는 것이 더 근본적인 해결 방법입니다.
'💻Information Security' 카테고리의 다른 글
인증인가 취약점에 대해 (0) | 2024.02.26 |
---|---|
파일 다운로드 취약점과 대응 (0) | 2024.02.16 |
전자서명의 필요와 이해 (0) | 2024.02.13 |
웹 셸 업로드 공격 및 리버스셸/바인드 실습 (1) | 2024.02.12 |
aka.ms/alca 해킹 공격 시나리오 (1) | 2024.02.11 |