IT/웹 해킹

File Upload 취약점 및 Webshell

lked 2024. 2. 20. 17:00

[이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

 

  • 목차
  1. File Upload 취약점이란
  2. File Upload 위험성
  3. File Upload 원리
  4. 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를 깔지 않는 것이다.)

파일 업로드 취약점 공격은 거의 웹 쉘 공격이라고도 부른다. 저 코드 한 줄로 서버를 뒤흔들 수 있다는 게 놀라웠다. 먼가 예전에는 서버 하나를 장악하려면 엄청나게 길고 복잡한 코드로 우회하거나 그럴 줄 알았더니 달랑 저 한줄... 가장 단순하고 쉽게 뚫리는 것이 강력한 해킹이라고 생각이 든다. 물론 저 간단한 것을 적용시키기 위해 여러 가지 취약점을 뒤져가며 적용되는 것을 찾아야 한다는 게 해커한테는 힘든 일이겠지만 말이다.