web shell은
웹 페이지를 통해 shell 명령어(시스템 명령어)를 실행할 수 있는 웹페이지의 일종이라 함.
말 그대로 웹이라는 인터페이스로 다루는 shell
web shell 파일 작성
form으로 shell 명령어 입력받도록 하고
애플리케이션 언어에서 제공하는 쉘 스크립트 실행 API 이용하는 식으로 코딩하면 됨
// Run script
Process process = Runtime.getRuntime().exec("/tmp/myscript.sh");
web shell 파일 업로드
업로드한 파일 경로로 접근하고 web shell을 통해 쉘 명령어 실행하여 정보 획득
cat /etc/passwd
파일의 확장자와 내용 검사
확장자만 검사하는 경우, 파일의 확장자만 속여서 업로드할 수도 있으니
믿을 수 없는 사용자가 존재할 수 있으면 내용도 검사해야 한다고 함..
파일을 사용자가 접근 불가능한 경로에 저장
파일 업로드를 위한 별도의 서버를 구축하여 웹 애플리케이션 서버와 분리하는 것도 좋다고 함
AWS S3 쓰는 이유 중에 하나겠다
파일이 업로드되는 디렉토리의 실행 권한 제거
업로드된 파일의 이름을 랜덤하게 재성성하여 저장
공격자가 자신의 파일 경로를 못찾게됨
파일 인클루전? 취약점이 존재하면 우회할 수 있다고 함... 잘 모름