1. 파일업로드 기능 탐색
2. 파일 업로드 기능을 이용해서 악성파일 업로드 시도
2-1. 웹 어플리케이션에서 실행 가능한 언어로 작성된 악성 스크립트 업로드 시도
=> 이는 웹 개발 언어가 JSP언어로 개발된 환경이라면 먼저 1차원적으로 JSP로 작성된 악성 스크립트의
업로드를 시도한다. → .jsp 해당 환경에 맞춰 같은 언어로 제작된 악성 스크립트 업로드 시도
2-2. 업로드된 파일 확장ㅈ가 개발 운영 환경에서 실행 가능한 확장자이어야 실행이 가능하다.
3. 우회기법
3-1. webshell.txt.asp
→조건 문자를 만나는것에서 처음 만나는 부분으로 기준을 잡는다면해당 파일이 업로드될 가능성이 있다.
#파일 이름은 전체검사를 원칙으로 한다.
3-2. 종단 문자 우회
A. urlencode 이용 : %00 = null code
→ %00가 포함된 뒷 문자열은 웹 서버에서 파일을 저장할 때 null 인식되는 것을 악용하는 방식
허용하는 확장자를 알고 있다면 해당 방식을 사용할 때 허용하는 확장자와 원하는 확장자 사이에
%00를 이용해 업로드를 시도한다.
↑ 현재 파일업로드 기능에대해서 파일의 확장자를 필터링하고 있다.
↑ 현재 게시판은 웹 서버측에서 확장자 필터링을 하는것이 아닌, 해당 웹 페이지단에서 확장자를 필터링하고 있다.
# 확장자 필터링은 항상 웹 서버측에서 진행되어야 한다. 이는 프록시를 이용한 소스코드 조작으로 악의적인
스크립트 파일을 업로드할 수 있기 때문이다.
↑프록시도구를 이용해 해당 웹페이지의 소스코드중 필터링 코드를 수정하였다.
↑ 웹셀이 성공적으로 업로드 되었다.
%00를 이용한 파일 업로드
↑업로드 가능한 파일 확장자명을 알 수 있다.
# 이를 이용한 우회기법으로 웹셀 업로드를 시도할 수 있다.
↑%00가 포함된 물자열은 웹 서버에서 파일을 저장할 때 null로 인식한다
# 웹 서버에 저장되는 파일은 webshell(seung_hoon).asp이다.
↑웹셀이 성공적으로 업로드 되었다.
↑업로드한 웹셀을 다운로드하고, 프록시 도구를 이용해 다운로드 경로를 찾는다.
↑다운로드 경로 확인하기
↑ 파일 다운로드 URL을 통해 다운로드 경로를 확이할 수 있다.
# 이를 이용해 웹셀에 접근한다.
↑찾아낸 다운로드 경로를 이용해 업로드한 웹셀에 접근한다.
↑접근한 웹셀을 이용해 시스템 명령어를 사용한 모습