ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • File Upload 취약점 및 Webshell
    IT/웹 해킹 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를 깔지 않는 것이다.)

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

Designed by Tistory.