Job SSul Series 1 : 해킹 방어 실습 - EP11 파일업로드 공격

in #kr-dev6 years ago

안녕하세요.
해킹과 방어 시리즈를 연재하고 있는 Ziqon입니다.
가을비가 내리더니 몇주만에 추워지는 군요.
가을이 와서 마음이 싱숭생숭하지만 해킹과 방어를 한번 해봅시다!
오늘의 주제는 침해사고가 났다고 하면 100의 60은 이 공격을 시발점으로 시작됩니다.
바로 파일업로드 공격이지요.
단순히 파일 업로드가 된다고 해서 공격이 가능한 것은 아닙니다.
웹쉘이라는 악성 스크립트를 업로드하고 또한 웹 등 외부 인터페이스에서 해당 웹쉘을 호출하여 시스템을 장악하는 공격입니다.
그럼 실습을 해볼까요?

[공격 시나리오]

  • 파일 업로드 실습용 servlet 소스를 import합니다.

  • Next버튼 클릭 후 라이브러리를 체크하고 [finish]버튼을 클릭합니다.

  • 이후 class를 하나 더 생성합니다.

  • 여기에 아래 코드를 입력합니다.
    blah~ blah~
  • 저장 후 서버를 구동하면 아래와 같이 어떤 파일도 업로드 가능한 사이트가 열립니다.

  • 여기에 웹쉘 파일을 아래와 같이 업로드 하면..
    (웹쉘 파일은 오픈되면 악용될 여지가 있기 때문에 오픈하지는 않겠습니다.)

  • 성공했다는 메세지가 뜹니다.

[방어 실습]

  • 동일하게 findbugs로 업로드 취약점을 스캔합니다.

  • 아래와 같이 취약점으로 검출됩니다.

  • 해당 코드에 들어가보면 업로드된 파일 이름을 추출하는 로직이 있습니다.

  • 여기에 확장자를 검사하는 로직을 추가하고 일반적으로는 whitelist방식으로 허용하는 확장자만 가능하도록 합니다.(아래는 ppt파일과 doc파일만 업로드 되도록 구현)

  • 자 이제 저장하고 다시 웹쉘을 업로드 해보겠습니다. 바로 실패하는 화면이 나옵니다.

Sort:  

Congratulations @ziqon! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

The Steem community has lost an epic member! Farewell @woflhart!
SteemitBoard - Witness Update
Do not miss the coming Rocky Mountain Steem Meetup and get a new community badge!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!