정의
서버에서 실행될 수 있는 실행 파일(ASP, PHP, JSP 등)을 업로드하고, 업로드된 파일을 웹을 통해 실행할 수 있는 경우, 내부정보 조회, 시스템 제어 등 매우 심각한 문제를 일으킬 수 있는 공격 기법
공격포인트 찾는 방법
파일 첨부란에 허용하고 있는 확장자로 업로드 후 업로드되는 위치 파악
실행 파일(ASP, JSP, PHP 등)에 대하여 업로드 시 필터링 여부를 확인 후 필터링 시 널 바이트, 세미콜론(;)을 이용한 우회 시도
- 파일 첨부란에 실행 파일 업로드 시 세미콜론을 이용하여 업로드 시도
- 실행 파일이 업로드된 것을 확인 가능
파일 업로드 우회 공격 유형
- IIS 웹 서버: 화이트리스트 방식을 사용하는 경우 발생 가능한 우회 공격: test.asp -> test.asp;.jpg
- 널 바이트를 이용한 우회 공격: test.php -> test.php%00.jpg
- Content-Type 우회 공격: Content-Type을 변조하여 우회 공격
filename = "test.html"
Content-Type: text/html --> image/jpegc // 이미지 태그로 변조 시도
대응 방안
1) 화이트 리스트 방식으로 허용된 확장자만 업로드를 허용하도록 설정한다.
2) 업로드 파일 실행을 차단하기 위해 파일의 저장 경로를 웹 루트 외부로 지정하고, 파일명과 확장자를 사용자가 유추할 수 없는 문자로 변경되도록 로직을 구현한다.
3) 업로드 파일의 실행 속성을 제거시킨다.
4) 웹 프레임워크 사용 시, 실행 파일과 다른 확장자를 사용하여 URL 패턴을 적용할 수 있다. 이 경우, 접속 차단 기능의 필터링을 추가하고, 그 필터링에 대한 URL로 실행 파일의 확장자를 매핑하는 것으로, 실행 파일의 외부 접속을 차단할 수 있다.
공부하면서 알게된 정보
1) 주요정보통신기반시설 가이드라인에서 파일 업로드 항목을 보게 되면 확장자가 HTML인 경우도 취약하다는 기준이 있는데, HTML은 실행 파일도 아닌데 왜 업로드된다고 취약한 걸까?
- 웹 프로그래밍이 PHP로 설계되어 있는 경우 확장자가 HTML 이여도 해당 소스에 php 소스를 호출할 수 있기 때문에 취약하다고 판단
- JSP, ASP의 경우는 스크립트 구문을 삽입하여 공격하는 형식이여서 취약하다고 판단
<body>
<h1>TEST</h1> //HTML 태그 동작 여부 확인
<?php echo dae('Y-m-d H:i:s', time()); ?> // php 형식의 현재 날짜 및 시간 출력하는 구문
</body>
- HTML 파일에서 PHP 코드가 동작되는 것을 확인
2) 정리
- PHP: HTML 업로드 시 PHP 코드 실행 가능
- ASP: HTML 업로드 시 IIS에서 매핑시켜야 ASP 코드 실행 가능
- JSP: HTML 업로드 시 JSP 코드 사용 불가하기 때문에, HTML 업로드 시 스크립트 구문 삽입
'Hacking > Web' 카테고리의 다른 글
피들러(Fiddler Everywhere), Burp Suite 연동 (0) | 2025.05.20 |
---|---|
[BugBountyClub] Open Redirect (0) | 2025.05.20 |
정보 노출 취약점 발견 사례 (0) | 2025.05.20 |