fine-1 / php-SER-libs

php反序列化靶场,集合了常见的php反序列化漏洞——由这周末在做梦制作
126 stars 20 forks source link

Leve8 的疑问 #1

Closed mcc0624 closed 2 years ago

mcc0624 commented 2 years ago

作者你好: Leve 8这道题目的源代码不知道是不是我理解有错,用您给出来的解法依然无法复现,并且我的理解,这道题是不是应该还有个序列化的过程,如果我的理解有错,还希望作者您能给我指出来,十分感谢!

fine-1 commented 2 years ago

题目的payload并无问题,1.png和2.png是使用payload的前后对比。 就我对您问题理解后的回复: 首先,unserialize对filter($param)进行反序列化。 其次,$param应当传入构造好的序列化字符串。 最后,filter()是过滤函数,起到过滤的作用。只不过再次题中可以被“绕过”。 即,GET方式传入恶意pop链导致正常的反序列化过程出现异常。

------------------ 原始邮件 ------------------ 发件人: "fine-1/php-SER-libs" @.>; 发送时间: 2022年5月27日(星期五) 凌晨1:43 @.>; @.***>; 主题: [fine-1/php-SER-libs] Leve8 的疑问 (Issue #1)

作者你好: Leve 8这道题目的源代码不知道是不是我理解有错,用您给出来的解法依然无法复现,并且我的理解,这道题是不是应该还有个序列化的过程,如果我的理解有错,还希望作者您能给我指出来,十分感谢!

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

mcc0624 commented 2 years ago

作者你好: 首先十分感谢您白忙之中耐心的回复我,确实可能是我理解有不完整! 我不理解的有一点: 1、根据我对题目的理解,我可以直接提交如下代码,只要确保$pass=escaping既可以满足if判断语句,且filter不会对我所提交的内容进行过滤,因为POC内并没有出现flag或php。我们为什么要进行逃逸后再让她pass=escaping? O:4:"test":2:{s:4:"user";s:1:"1";s:4:"pass";s:8:"escaping";}

fine-1 commented 2 years ago

非常感谢您提出的非预期,这是我在出题的时候未想到的。我仅仅测试了逃逸的方式,如果您认为过滤是无效的,其实您可以尝试更改pass来解决这个非预期。

------------------ 原始邮件 ------------------ 发件人: "fine-1/php-SER-libs" @.>; 发送时间: 2022年5月27日(星期五) 中午11:50 @.>; @.**@.>; 主题: Re: [fine-1/php-SER-libs] Leve8 的疑问 (Issue #1)

作者你好: 首先十分感谢您白忙之中耐心的回复我,确实可能是我理解有不完整! 我不理解的有一点: 1、根据我对题目的理解,我可以直接提交如下代码,只要确保$pass=escaping既可以满足if判断语句,且filter不会对我所提交的内容进行过滤,因为POC内并没有出现flag或php。我们为什么要进行逃逸后再让她pass=escaping? O:4:"test":2:{s:4:"user";s:1:"1";s:4:"pass";s:8:"escaping";}

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

mcc0624 commented 2 years ago

``<?php highlight_file(FILE); function filter($name){ $safe=array("flag","php"); $name=str_replace($safe,"hack",$name); return $name; } class test{ var $user; var $pass='daydream'; function __construct($user){ $this->user=$user; } } $param=$_GET['param']; $param=serialize(new test($param)); $profile=unserialize(filter($param));

if ($profile->pass=='escaping'){ echo file_get_contents("flag.php"); } ?>

我目前将代码改成如上所示,还要麻烦您再看下是否有问题,非预期可以解决,并且利用下面的POC可以将数据逃逸出来。 phpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphp";s:4:"pass";s:8:"escaping";}

fine-1 commented 2 years ago

似乎是可行的,666。

------------------ 原始邮件 ------------------ 发件人: "fine-1/php-SER-libs" @.>; 发送时间: 2022年5月27日(星期五) 下午2:44 @.>; @.**@.>; 主题: Re: [fine-1/php-SER-libs] Leve8 的疑问 (Issue #1)

``<?php highlight_file(FILE); function filter($name){ $safe=array("flag","php"); $name=str_replace($safe,"hack",$name); return $name; } class test{ var $user; var $pass='daydream'; function __construct($user){ $this->user=$user; } } $param=$_GET['param']; $param=serialize(new test($param)); $profile=unserialize(filter($param));

if ($profile->pass=='escaping'){ echo file_get_contents("flag.php"); } ?>

我目前将代码改成如上所示,还要麻烦您再看下是否有问题,非预期可以解决,并且利用下面的POC可以将数据逃逸出来。 phpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphp";s:4:"pass";s:8:"escaping";}

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

mcc0624 commented 2 years ago

再次感谢你对问题的回复!