-
File Upload 취약점 및 WebshellIT/웹 해킹 2024. 2. 20. 17:00
[이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]
- 목차
- File Upload 취약점이란
- File Upload 위험성
- File Upload 원리
- File Upload 방어
1. File Upload 취약점이란
게시판이나 프로필 사진 등 파일을 업로드할 수 있는 곳에서 그림이나 사진 말고 서버에서 실행할 수 있는 파일을 올려 서버에서 악성코드 파일을 실행하게끔 만드는 공격 (자바스크립트 같은 웹 브라우저 실행은 Client Side Script 공격) 또는 파일용량 제한이 없어 대용량 파일을 서버에 저장하여 Disk의 가용성을 침해하는 공격이 있다.(DoS 공격)
2. File Upload 위험성
서버에 웹 쉘이 올라가게 되면 악성 사용자는 그것을 이용해 서버를 장악하여 아예 서버의 주인이 될 수 있는 상황이 될 수 있고, DoS 공격의 경우에 서비스를 이용하지 못하게 하여 사용자들의 서비스 이용을 침해할 수 있다. 이로 인해 중요 기관일 경우 피해가 막심할 것으로 생각된다.
3. File Upload 원리
예를 들어 php를 이용하는 서버가 있다. 이때 파일 업로드에 jpg 같은 이미지 파일이 아니라 파일 확장자 php를 가진 파일을 올렸을 때 서버는 이 파일을 가지고 있고 내가 그 파일에 접근을 하면 서버는 php코드를 보여주는 게 아니라 실행하여 내가 원하는대로 하게 만드는 것이다. 이때 웹 쉘을 올려 내가 서버의 주인이 될 수 도 있는 것이다.
* One Line WebShell
1) 이 코드를 webshell.php로 저장하여 게시판과 같은 파일 업로드 할 수 있는 곳에 올린다.
2) 게시물에 보면 파일을 다운로드할 수 있는 아이콘이나 버튼이 있을 것이다. 그것을 오른쪽 클릭하여 경로를 확인한다.
3) URL에 경로를 붙여 넣기하고 +? cmd=pwd를 덧 붙여 정보 요청을 한다(get 방식)
4) 그럼 리눅스의 명령어 pwd인 현재 파일 경로가 웹 화면에 출력될 것이다.
4) File Upload 방어
- 파일이 안 올라가게끔 확장자를 필터링 해주는 방안이 있다. 하지만 이것은 ex) php -> PhP 이런 식으로 우회가 가능할 수도 있다. (화이트 필터링 방식 사용 권함)
- 파일 실행 권한을 주지 않는 것이다. 그렇지만 해당 폴더가 아닌 다른 폴더에 권한이 있으면 저장 경로를 바꾸는 디렉토리 트레버져를 하여 다른 디렉토리에서 실행하는 변수가 있다.
- 파일 저장 경로를 알 수 없게 노출하지 않게 한다. (또는 파일이름을 난독화 한다 but SQL인젝션으로 공격 당했을 때 대처는 불가)
- DB서버에 저장하기 DB서버에 저장하면 파일이 실행되지 않기 때문이다. (BLOB, CLOB)
- NAS 서버를 이용하여 파일저장 서버를 만들어 php코드가 실행되지 않게 한다. (웹 서버에서는 php를 깔지 않는 것이다.)
파일 업로드 취약점 공격은 거의 웹 쉘 공격이라고도 부른다. 저 코드 한 줄로 서버를 뒤흔들 수 있다는 게 놀라웠다. 먼가 예전에는 서버 하나를 장악하려면 엄청나게 길고 복잡한 코드로 우회하거나 그럴 줄 알았더니 달랑 저 한줄... 가장 단순하고 쉽게 뚫리는 것이 강력한 해킹이라고 생각이 든다. 물론 저 간단한 것을 적용시키기 위해 여러 가지 취약점을 뒤져가며 적용되는 것을 찾아야 한다는 게 해커한테는 힘든 일이겠지만 말이다.
'IT > 웹 해킹' 카테고리의 다른 글
File Upload 취약점 실습2 (LFI=Local File Include) (0) 2024.02.21 File Upload 취약점 실습 (0) 2024.02.21 CSRF 실습2 (CSRF 토큰 인증 우회) (2) 2024.01.24 CSRF 실습 (세션 인증 방식 우회) (0) 2024.01.23 CSRF(Cross Site Request Forgery) (0) 2024.01.18