최대 1 분 소요


Direct Object References

서버 내부에 구현된 객체의 참조를 허용하는 것



Insecure Direct Object References

주로 파일, DB Key, URL에 노출된 세션 아이디를 통해 조작 가능

접근 제어나 검증 절차가 없으면 공격자는 허가 없이 객체 참조를 조작하여 데이터에 접근 가능



Change Secret

Object

비밀번호 힌트를 수정할 수 있는 페이지에서 취약점을 알아보자


시나리오 - 난이도 : 하

image-20211027221429986

  • 현 계정의 secret을 변경하는 폼


개발자 도구

image-20211027221722764

  • ID를 입력하는 폼이 숨어있음
  • 현 계정인 bee가 입력되어있는 상황
  • 이를 조작해 특정 User의 계정의 secret을 변경해보자


변경

image-20211027222053763

image-20211027222132696

image-20211027222235216



확인

A1. Injection - SQL Injection (Login Form/User)

변경 전

image-20211027222357552

변경 후

image-20211027222519341



대응방안

난이도 : 상

image-20211027224113873

image-20220329135847359

  • hidden 폼에 토큰 값 부여해서 수정 시 토큰 유효성 검사
  • 난이도 하와는 달리 난이도 중상에서는 다른 사용자의 정보를 수정하려면 토큰 값도 필요함을 알 수 있다.


BeeBox - 1

image-20211027224349012

  • 디렉토리 변경
  • vi 편집기로 해당 시나리오 소스코드 열기


BeeBox - 2

image-20211027224701299

  • Security Level 확인


BeeBox - 3

image-20211027224944471

  • mysql_real_escape_string : Null, \n, \r, \, ‘, “, ^Z 문자에 백슬래시를 붙여 SQL Injection 공격 방어
  • htmlspecialchars : html에 사용되는 기호를 UTF-8로 반환하여 html 코드에 사용되는 문자들을 html 엔티티 코드로 반환 / 즉, 메타문자가 html 태그로 상용되지 않도록 방지하여 그대로 출력하게 함

업데이트: