[极客大挑战 2019]PHP

[极客大挑战 2019]PHP

  1. 打开后,按照提示找备份文件

  1. 用御剑没扫到东西,换个工具dirsearch

  2. 找到备份文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YW4yAfha-1612329916642)(media/c16fc05109fc238b59d536af8915dfdb.png)]

  1. 在url栏构造下载
    http://f0ff483f-62c5-4bf6-9e34-5e02147967e0.node3.buuoj.cn/www.zip

  2. 解压文件,查看flag,假的。。
    在这里插入图片描述

在这里插入图片描述

  1. 审计一下这几个的代码吧

在这里插入图片描述

  1. flag.php里的$flag 给了个值Syc{dog_dog_dog_dog},好像没啥用。在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JirQepnC-1612329916646)(media/48179c6eecd1ccf0d54bc3fc01c37add.png)]

  1. index.php里的一块代码在这里插入图片描述

  2. unserialize() 函数用于将通过
    函数序列化后的对象或数组进行反序列化,并返回原始的对象结构。

    1. unserialize的漏洞在magic
      function上,如果一个类定义了__wakup()和__destruct(),则该类的实例被反序列化时,会自动调用__wakeup(),
      生命周期结束时,则调用__desturct()。这里就利用这个漏洞
  3. 看一下class.php在这里插入图片描述

  4. 根据代码的意思,我们可以发现如果username=admin
    password=100然后我们再执行__destruct()时可以获得flag

  5. 构造序列化

在这里插入图片描述

  1. 然后运行得到json

  2. O:4:“Name”:2:{s:14:“Nameusername”;s:5:“admin”;s:14:" Namepassword";i:100;}

  3. 但是反序列化会先执行__wakeup()魔术方法,username会重新赋值。。所以应该想办法跳过__wakeup(),执行__destruct

  4. 在反序列化时,当前属性个数大于实际属性个数时,就会跳过__wakeup(),去执行__destruct

  5. 于是我们这样构造payload:

  6. ?select=O:4:“Name”:2{s:14:“Nameusername”;s:5:“admin”;s:14:“Namepassword”;i:100;}

  7. 而这个变量是private的,只能在声明的类中访问,因此私有字段的字段名在序列化时,类名和字段名前面都会加上\0的前缀。字符串长度也包括所加前缀的长度

  8. ?select=O:4:“Name”:3:{s:14:"%00Name%00username";s:5:“admin”;s:14:"%00Name%00password";i:100;}

[外链图片转存中...(img-M8P2mojk-1612329916654)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值