본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 8.취약한 직접 객체 참조 [Change Secret]

by Robert8478 2023. 12. 13.

직접 객체 참조(DOR, Direct Object References) 란? - 서버 내부에 구현된 객체의 참조를 허용하는 것을 말한다.
이를 통해 발생하는 취약점이 취약한 직접 객체 참조 (Insecure DOR) 이다. 주로 파일, 데이터베이스 키, URL에 노출된 세션 아이디를 통해 조작이 가능하며, 접근 제어나 검증 절차가 없으면 공격자는 허가 없이 객체 참조를 조작해서 데이터에 접근 가능하다.

이번 페이지는 사용자의 비밀번호 힌트를 수정할 수 있는 페이지이다.

[난이도 하]

페이지에서 개발자도구(f12)를 보면 웹페이지에서는 안보였지만 코드에서는 hidden 속성으로 숨겨둔 input 폼을 볼 수 있다. 즉, 보이지 않게 한 bee 계정에 대한 비밀번호 힌트값을 변경하도록 한 것이다. 이런식으로 한다면 개발자 도구를 이용하면 바로 노출이 된다.

이제 value 에 있던 bee의 값을 다른 사용자의 아이디로 변경하고 그 사용자의 비밀번호 힌트를 변경하기 위한 값을 넣어보자. 여기서는 robert 계정을 넣어주고 비밀번호 힌트값을 변경하려고 한다. 변경 후 힌트값이 출력되는 sqli_16.php 페이지로 이동하자.

로그인 했더니 robert 계정의 힌트값이 변경된 것을 확인할 수 있었다.

[난이도 중,상]

난이도 중,상에서 개발자도구를 확인해보면 value 값에 토큰값이 붙어 있는걸 확인할 수 있다. 한번 value 값을 robert 계정명으로 변경해보자.

변경해서 힌트값을 변경하면 저렇게 Invalid token 이라는 메시지가 출력된다. 사용자를 검증하기 때문에 여기서 다른 사용자의 정보를 수정하려면 그에 해당하는 토큰 값도 필요하게 된 것이다. php 코드를 한번 살펴보자.

코드를 보면 token 값으로 검증을 하며 거기에 mysqli_real_escape_string 함수와 htmlspecialchars 함수로 SQL 인젝션 공격과 XSS 공격 또한 방어하고 있다. 보안 코딩을 할 시에 이러한 방법으로 보안 코딩을 해야 Insecure DOR를 막을 수 있을것이다.