티스토리 뷰

web wargame/root-me.org

[root-me] PHP-serialization

삼전동해커 2020. 9. 18. 15:13

serialization 문제를 풀어보자.






guest/guest로 로그인이 가능하다고 한다.

autologin 기능도 있다.




guest는 접근이 안된다고 한다.




위에서 부터 소스를 보면

$_SESSION['login']이 설정되어 있지 않으면 값을  빈칸으로 준다.


그리고 조건문이 post방식으로 login과 password를 주면 $data변수의 login에 들어가고

password는 sha256 hash값이 들어간다.


아니면 else if문으로 $_COOKIE['autologin'] 값이 있으면

$_COOKIE['autologin']값을 unserialize해 $data에 저장한다.


=>그 전에 autologin을 한적이 있으면 id와 password가 serialize된 값으로 저장되어 있으니 그걸 변조하면 되겠다.

라고 생각했다.


계속 보면 

다시 조건문으로 unserialize된 password 값이 $auth[$data['login']]과 같으면 

$_SESSION['login'] = $data['login']

이라고 한다.


그럼 지금 cookie값에 설정되어 있는 값은 guest/guest가 serialize 된 값과 

세션값으로 $data['login']이 되어 있다는 것이다.


세션값이 superadmin이면 되니까 $data['password']==$auth[$data['login']]만 만족하면 

되겠다.라고 생각했다.



정리해 보면 세션값을 superlogin으로 설정하기 위해 쿠키의 autologin값을 변조해 $data['password']==$auth[$data['login']]을 만족시키면 된다.


guest/guest로 로그인했을 때 쿠키값은 url encoding되어 있으니 풀어서 보면

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


이렇게 되어 있다. login : guest password : hash('sha256',guest)


1.login : superadmin

2.password : hash('sha256',$data['login']=superadmin)


2번을 왜 저렇게 하냐면 guest/guest로 로그인할 때 쿠키값인

 hash('sha256',guest)와 $auth[$data['login']]이 같아서 로그인에 성공했기 때문에

superadmin도 하면 된다고 생각했다.


해보자.



이 값을 url 인코딩 해 쿠키값에 넣어보자.


안된다..


$auth가 내가 생각한 방법이 아닌 것 같다.


다른 방법은 



== type juggling을 이용하는 방법이다.


==는 string 타입과 Boolean True를 비교하면 True를 리턴하는 취약점이다.


그럼


이걸 url encoding해 넣어주면 되겠다.








내가  하고싶었던 serialization 문제와는 좀 달라서 기운 빠졌다.


'web wargame > root-me.org' 카테고리의 다른 글

root-me CRLF  (0) 2021.01.07
XSS - stored1  (0) 2021.01.05
[root-me] path traversal  (0) 2020.09.22
http improper redirect  (0) 2020.09.21
http verb tampering  (0) 2020.09.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함