파일 업로드 취약점과 대응 방법에 대해서는 <모의해킹_이론> 편에서 정리한 적이 있다.
해킹 맛보기 책에서도 새로운 우회 기법을 볼 수 있어서 정리해보았다.
① AddLanguage
아파치 설정 파일에는 AddLanguage라는 옵션이 있다.
아파치 설치 환경이나 설치 방식에 따라 설정 파일의 이름, 위치, 내용은 조금씩 다른데, 필자의 경우 우분투를 사용하고 있고, apache2.conf라는 이름으로 찾을 수 있었다.
$ find / -name apache2.conf 2>/dev/null
/etc/apache2/apache2.conf
AddLanguage는 특정 파일 확장자를 특정 언어에 매핑하는데, 다음과 같이 옵션이 주어진 경우, 확장자가 .kr인 문서를 kr로 처리되는 것이다.
AddLanguage en .en
AddLanguage en-gb .en
AddLanguage en-us .en
AddLanguage kr .kr
아파치 설정 파일에 AddLanguage라는 옵션이 있는데, 아파치의 설치 환경과 방법에 따라 설정 파일의 이름과 위치, 내용
$ find / -name apache2.conf 2>/dev/null
/etc/apache2/apache2.conf
AddLanguage 옵션이 있는 경우 webshell.php가 아닌 webshell.php.kr의 경우에도 php 파일이 실행된다. 따라서 확장자가 php인지 검사하는 필터링을 우회할 수 있게 된다.
② .htaccess
.htaccess는 아파치 설정 파일인데, 이를 업로드하게 되면 아파치 옵션을 변경시킬 수 있다. Addtype 등을 통해 txt나 jpg 등 원하는 확장자를 php 코드로 실행시킬 수 있다.
위의 AddLanguage 같은 옵션을 직접 만들어서 넣어줄 수 있는 힘을 가졌다고 볼 수 있다.
③ 환경 취약점
환경 취약점은 환경에 따라 다르기 때문에 되는 곳도 있고 안 되는 곳도 있다. (필자의 경우 아래의 두 방법 모두 제대로 공격이 실행되지는 않았다.)
폴더에 webshell.php 파일과 olaf.jpeg 파일이 있다.
파일 업로드에 JPEG만 업로드되도록 설정해놓았기 때문에, php는 아예 뜨지도 않는다.
하지만 파일의 이름을 webshell.php%00.jpeg (윈도우의 경우 webshell.php:jpeg)로 설정하면, 일부 환경에서 뒤의 부분이 삭제된 체 저장되어 .php 파일을 올릴 수 있다고 한다. (그래서 윈도우에서 파일 이름에 :를 넣지 못하도록 막는 것 같다.)
확장자가 .jpeg인 셈이라 선택 화면에서 뜨는 것은 볼 수 있었지만, 막상 업로드되었을 때 .php로 실행되지는 않았다.
④ 결론
파일을 DB로 관리하는 대응 방안 외에도, 업로드 파일에 "php_value engine off"를 넣은 .htaccess 파일을 생성해서 (PHP 엔진을 off) 파일이 업로드되어도 실행되지 않게 하고, 사용자가 .htaccess 파일을 업로드하지 못하도록 필터링하는 방식으로 대응할 수도 있다.
'해킹 서적 스터디 > 해킹 맛보기' 카테고리의 다른 글
해킹 맛보기 : 개요 (0) | 2021.11.08 |
---|
댓글