PHP - Serialization

 

 

 

 

 

 

adminstrator 계정으로 로그인하면 되는 문제이다.

 

 

 

 

 

 

일반적인 로그인 창으로 자동로그인 기능이 있다.

 

 

 

 


문제해석

 

 

 

 

 

 

 

 

소스를 보면 중요한 부분은 문제 제목과 같은 unserializeserialize가 있는 부분이다.

 

 

일반적으로 로그인을 하게 되면 $data에 값이 저장되며,

autologin 쿠키값이 있을 때는 $data에 unserialize된 값이 들어가게 된다.

 

 

로그인이 성공하고 autologin이 1이 때 쿠키에 serialize된 값이 저장되며 위의 autologin 체크할 때 쓰이게 된다.

 

 

 

 

Login에 superadmin으로 로그인하면 될 것이다.

 

 

 

 


문제풀이

 

 

 

 

문제에서 주어진 guest로 autologin을 체크하고 로그인하게 되면 다음과 같이 표시되며

 

 

 

 

 

Cookie에 serialize된 autologin의 값이  url encoding된 형태로 표시되게 된다.

그리고 url decode를 해보면

 

 

autologin=

a:2:{s:5:"login";s:5:"guest";s:8:"password";s:64:"84983c60f7daadc1cb8698621f802c0d9f9a3c3c295c810748fb048115c186ec";};

serialize된 값을 볼 수 있고

login : guest

password : sha256된 값   으로 되어있는 것을 볼 수 있다.

s는 string /  5는 글자수 / ;로 value를 구분

 

 

 

 

 

 

 

 

 

이를 이용하여 우리가 원하는 superadmin으로 쿠키에 전달 할 값을 작성하려면

 

 

1. login 부분을 superadmin으로 설정

 

 

  a:2:{s:5:"login";s:10:"superadmin";                        }

 

 

 

2. password 값  설정

 

 이후 문제는 password에 전달 되는 값이다.

 

 

 

 

 

 위의 코드를 보면 우리가 입력한 password와 비교되는 저장된 값이 느슨한 비교(loose comparison)로 되어있음을 알   수 있다.

 이를 이용하면 true와 "string"을 비교했을 때 true로 인식되어 우회 할 수 있다.

 

 

 

 php serialize에서 boolean값은 b가 boolean을 나타내며 true나 false가아닌 1과 0으로 인식한다.

php 메뉴얼 : https://www.php.net/manual/en/function.serialize.php

 

 

 autologin에 전달할 값을 이어서 작성하면

 

 

 

 a:2:{s:5:"login";s:10:"superadmin"s:8:"password";b:1;} 가 된다.

 

 

 

 

 

이 값을 url decoding해서 Cookie의 autologin값에 전달하게 되면

 

 

 

CLEAR 할 수 있다.

 

 

 


 

 

구글링하면서 공부한 serialzie 취약점 문제와 이 문제는 조금차이가 있는 것 같다. 이전의 있던 type juggling를 이용하고, serialize된 글자를 해석만 하면? 풀 수 있게되는 문제같다.

 

 

생성자와 magic method를 이용한 문제들을 찾아서 풀어봐야 serialize에 대해 더 잘 이해할 수 있을 것 같다.

 

'Web hacking > Root me' 카테고리의 다른 글

[Root-me] - File upload - ZIP  (0) 2019.12.03
[Root-me] - Local File Inclusion - Wrappers  (0) 2019.11.30
[Root-me] SQL injection - Error  (0) 2019.10.07
[Root-me] SQL Injection - Routed  (0) 2019.10.01
[Root-me] SQL injection - Numeric  (0) 2019.09.27

+ Recent posts