안녕하세요.
해킹과 방어 시리즈를 연재하고 있는 Ziqon입니다.
가을비가 내리더니 몇주만에 추워지는 군요.
가을이 와서 마음이 싱숭생숭하지만 해킹과 방어를 한번 해봅시다!
오늘의 주제는 침해사고가 났다고 하면 100의 60은 이 공격을 시발점으로 시작됩니다.
바로 파일업로드 공격이지요.
단순히 파일 업로드가 된다고 해서 공격이 가능한 것은 아닙니다.
웹쉘이라는 악성 스크립트를 업로드하고 또한 웹 등 외부 인터페이스에서 해당 웹쉘을 호출하여 시스템을 장악하는 공격입니다.
그럼 실습을 해볼까요?
[공격 시나리오]
파일 업로드 실습용 servlet 소스를 import합니다.
Next버튼 클릭 후 라이브러리를 체크하고 [finish]버튼을 클릭합니다.
이후 class를 하나 더 생성합니다.
- 여기에 아래 코드를 입력합니다.
blah~ blah~
저장 후 서버를 구동하면 아래와 같이 어떤 파일도 업로드 가능한 사이트가 열립니다.
여기에 웹쉘 파일을 아래와 같이 업로드 하면..
(웹쉘 파일은 오픈되면 악용될 여지가 있기 때문에 오픈하지는 않겠습니다.)
성공했다는 메세지가 뜹니다.
[방어 실습]
동일하게 findbugs로 업로드 취약점을 스캔합니다.
아래와 같이 취약점으로 검출됩니다.
해당 코드에 들어가보면 업로드된 파일 이름을 추출하는 로직이 있습니다.
여기에 확장자를 검사하는 로직을 추가하고 일반적으로는 whitelist방식으로 허용하는 확장자만 가능하도록 합니다.(아래는 ppt파일과 doc파일만 업로드 되도록 구현)
자 이제 저장하고 다시 웹쉘을 업로드 해보겠습니다. 바로 실패하는 화면이 나옵니다.
Congratulations @ziqon! You received a personal award!
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:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit