Skip to main content Link Menu Expand (external link) Document Search Copy Copied

배성민 멘토님 웹 취약점(코드 관점) 멘토링

취약점 점검 개론, 취약점 점검 실습

코딩 실력, 근성, 꼼꼼함 -> 대부분 가지고 있다

  • A -> 코드 리뷰, 웹 접근성, 웹 취약점, 웹표준, 트러블 슈팅 등 경쟁력을 가져야 한다.
  • 정성적인 노력이 들어가는 부분

웹이 취약한 이유

HTTP -> 브라우저 -> EOS, IE 12지원이 끝남, 개발자 도구가 오픈 -> 개발자 도구를 통해 소스가 드러나게 된다.

OWASP Top10

Injection이 탑텐에서 빠진 적이 한 번도 없다.

SQL Injection

여기어때 개인정보 99만건 유출.. SQL인젝션 공격이 원인

아이디만 있으면 로그인이 되는 코드이다.. -> 백엔드 개발자가 실수할 것 같은 부분을 SQL Injection으로 넣는 것이다.

백엔드 개발자의 실수를 예상하며 try의 연속이다..

FE? BE?

둘 다 신경써야 하지만 백엔드에게 조금 더 책임이 있다. filter(마크업, FE) -> validation(JS, FE) -> verification(백엔드)

filter(마크업)에서 처리될 수 있는 것(안전하지 않음) ex) input, textarea 등 태그에 들어가는 속성들이 속성들이 특징 -> 필터가 돼야 한다. 백엔드로 전송되는 것

  1. maxlength -> 글자수 제한, 개발자 도구로 maxLength를 바꾸면 무수히 많은 글자를 넣을 수 있음
  2. require -> 필수 값
  3. accept -> 확장자
  4. pattern -> 정규표현식

-> 필터 단계에서도 처리하고 validation 단계에서도 처리해야 한다.

validation

JS에서 처리될 수 있는 것(안전하지 않음) ex)

  1. Ajax 구간(폼 요소 데이터 확인)
  2. JS에서만 입력 값 도메인 검증을 하지는 않는지
  3. 정규표현식
  4. 개인정보 비식별 처리 -> 이름만 있으면 개인정보가 아니다: 이름으로 개인을 식별할 수 없기 때문에 but 이름과 휴대폰 번호를 조합하면 개인정보이다. id는 개인정보이다. id는 하나이기 때문에 내가 식별이 된다. 아이디를 뒤에 *표시하는 이유 -> 개인정보가 식별되기 때문에, 이런 것을 개인정보 비식별 처리라고 한다.

Verification

불충분한 검증 조심

  • 확장자 체크시 contains 메서드를 사용하면 test.png.sh 같은 형식의 파일도 업로드 가능

다양한 취약점 점검 - URL 요청 변조: 입력 도메인 값 변조 확인

ex) https://naver.com/mypage/change.do?id=bsm9100 -> delete.do, remove.do로 한 번씩 try하면서 유추하는 것이다.

XSS

게시판 입력

  • 게시판에 글제목, 내용에 태그 넣어보기
  • img태그를 만들고 src속성에 웹쉘을 넣기
  • iframe태그를 만들고 src속성에 웹쉘을 넣기 위 예제랑 똑같음

취약점 점검 실습 - 파일 업로드 취약점, DOS, 관리자 권한 탈취 취약점

  • GET요청을 하면 안되는 페이지에서 GET요청을 한 경우
    • GET 요청 접근을 막는다.
  • 관리자 권한 탈취 취약점
  • 파일 업로드 취약점

파일 업로드 취약점, DOS, 관리자 권한 탈취 취약점

로컬스토리지에 이름, 계좌번호가 들어있다면? -> 브라우저를 꺼도 사라지지 않는다, 세션은 사라지지않는다. -> 이름, 계좌번호를 엮으면 개인식별이 되며 개인정보가 된다. -> PC방에서 다른 사람이 이전 사람의 이름, 계좌번호(개인 정보)를 탈취할 수 있다. -> 취약점 분석해서 제보 했어요 -> 다른 사람과의 차별점, 뱅킹 코드를 변경해본 경험이 있다.

취약점 점검 팁 - 개발자도구를 켜놓는 습관을 들일 것

  1. 소스 탭에서 스크립트 부분 보기
  2. 네트워크 탭에서 데이터가 어떻게 오고 가는지 분석
  3. GET 방식으로 호출되는 부분이 있는지 확인해보기
  4. 입력 도메인 값 변조 확인(FE)

계속 try해보고 취약점 찾아서 제보하기

취약점 점검 팁 - CRUD 단계를 살펴보기

  1. 대개 회원가입, 수정과 같은 페이지에서 취약점이 많이 노출
  2. 파일 등록 프로세스가 있다면 어떤식으로 파일이 등록되는지 확인
  3. 게시판 조회시 Injection에 대해 생각해보기

취약점 점검 팁 - 상황을 만들어보기

  1. 스스로 백엔드 개발자라면 어떻게 구현했을지 생각해보고 취약점을 상상해보기
  2. 스스로 공격자라면 어떤 상황을 원했을지 생각해보기

멘토님은 본래 FE셨다.

모바일에서 휘원가입할 때 SNS 인증 코드를 계속 호출하는 경우

  • SNS호출하는데 15원 정도 든다.
  • 제한하는 장치가 없으면 취약점이다.

이미지 업로드할 때 validation

  • 스크립트에서 파일 확장자를 파싱해서 파일이름.jpg를 AJAX보낼 때 체크하면 된다.