[PortSwigger Web Security Academy]Lab: Modifying serialized objects write up

zzsla·2023년 10월 16일
0
post-custom-banner

문제정보

This lab uses a serialization-based session mechanism and is vulnerable to privilege escalation as a result. To solve the lab, edit the serialized object in the session cookie to exploit this vulnerability and gain administrative privileges. Then, delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

문제

lab에 들어가면 가상 shop 사이트가 나온다.

분석

wiener:peter
목표
session 쿠키에서 serialize된 값을 변경하여 관리 권한을 얻는다.
그리고 carlos를 삭제한다.

일단 burpsuite를 켠 상태에서 주어진 id:password로 로그인을 한다. 그리고 나서 history를 확인하면 cookie 값이 들어온 것을 확인할 수 있다.

해당 쿠키 session 값은 serialize로 된 값이 아니다. 이런 쿠키값은 기본적으로 base64일 가능성이 있다. 쿠키값을 선택하면 해당값이 decode된 상태로 나오는 것을 확인할 수 있다.

값은 O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}로 되어 있는데 해석을 하면 4글자인 User 클래스에 2가지 종류에 값이 있고(String, boolean), string 형태의 8글자인 username에 string형태인 6글자인 wiener가 들어가 있고, string 형태인 admin에 boolean형태의 값인 0이 들어가 있다.

admin값이 0인 것으로 봤을 때 이 부분을 1로 변경을 해서 cookie값에 넣으면 관리권한을 획득할 수 있을 것이다.(권한상승)

값을 1로 변경 후 burpsuite decoder에서 값을 base64로 encode한다.

이 값을 개발자도구를 이용해서 cookie값을 변경한다.

이제 관리자창을 찾아야 하는데 기본적으로 admin, administrator 등을 넣어서 찾아볼 수 있다. 또는 kali 리눅스를 사용하는 경우, /usr/share/wordlists/dirb/common.txt를 참고해도 좋다. 자동화툴(burpsuite repeater, gobuster 등)을 사용해서 찾아볼 수도 있다.(하지만 서버에 부화를 가져올 수 있기 때문에 함부로 사용하지 않는 것이 좋다.)

/admin을 했을 때 관리자창이 나온다.

그리고 carlos를 삭제하면 문제가 풀린다.

취약점

이 취약점은 insecure deserialization이다.
간단하게 직렬화(serialize)는 객체를 데이터스트림으로 만드는 것을 부르고, 역직렬화는 그것을 다시 원래대로 돌리는 것을 말한다.
직렬화(serialize)와 역직렬화(unserialize, deserialize)가 필요한 이유는 값 직렬화하여 메모리에 저장하거나 네트워크 통신에 사용하기 위해서이다. 하지만 serizlize된 값을 변조할 수 있고, deserialize 전에 무결성을 확인하지 않으면 바로 이런 문제가 생길 수 있다.
해결 방안으로는 deserialize를 하기 전에 무결성을 체크를 하는 것이 해결방안이 될 거 같다.

profile
[README]newbi security hacker :p
post-custom-banner

0개의 댓글