16강 / 20강

업로드 — 상품 사진 자리에 심는 뒷문

웹셸 · 그리고 여러 겹의 방어

업로드 — 상품 사진 자리에 심는 뒷문
업로드 기능은 편리하지만, 공격자가 서버에 파일을 놓는 통로이기도 합니다.

쇼핑몰에는 상품 사진 업로드가 있습니다. 편리하죠. 그런데 이 기능은 공격자가 내 서버에 파일을 놓을 수 있는 통로이기도 합니다. 공격자가 사진 대신 프로그램을 올리고, 그게 실행되면 어떻게 될까요?

그 결과물이 웹셸입니다 — 브라우저 주소창이 곧 서버의 터미널이 되는, 최악의 상황.

웹셸 — 한 줄짜리 재앙

웹셸은 놀랍도록 짧습니다. 이 한 줄이 서버에 올라가 실행되면:

<?php echo shell_exec($_GET['cmd']); ?>

공격자가 ?cmd=whoami 라고 주소창에 치면, 그 명령을 서버에서 실행하고 결과를 화면에 뿌립니다. SSH 를 아무리 잘 잠갔어도(10강), 웹 서버가 업로드된 파일을 실행해 주면 다 소용없어요.

업로드 실습실 — 검사 방식을 바꿔 가며 무엇이 웹셸이 되는지 본다
불러오는 중…

어설픈 검사는 다 뚫립니다

확장자 검사
cat.jpg.php — 점을 두 번 쓰면 뚫린다
MIME 검사
Content-Type 은 공격자가 직접 적어 보낸다
매직 넘버 + 이름 변경
파일 앞 바이트로 진짜 이미지인지 확인, 이름은 무작위로

확장자 검사는 이름만 봅니다 — 이름은 공격자가 정해요. MIME 검사가 보는 Content-Type 헤더도 공격자가 적어 보내는 값이라 못 믿습니다(13강의 원칙!). 믿을 수 있는 건 파일 내용 그 자체뿐이에요.

사진만 있어야 할 폴더에 .php 가 있으면 웹셸입니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
🤔 확인 문제
업로드 파일 검사로 가장 안전한 것은?
🤔 확인 문제
'심층 방어(defense in depth)'가 뜻하는 것은?