返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >[极客大挑战 2019]PHP1
  • 952
分享到

[极客大挑战 2019]PHP1

php开发语言Poweredby金山文档 2023-09-02 11:09:22 952人浏览 八月长安
摘要

既然提到了备份网站估计也是存在着网站备份文件,可以先用御剑扫一下 啥都没扫出来,但是上回做文件备份的题目时收集了一些关于常用备份文件的文件名和后缀,可以直接使用burp抓包爆破,果然爆破出一个

既然提到了备份网站估计也是存在着网站备份文件,可以先用御剑扫一下

啥都没扫出来,但是上回做文件备份的题目时收集了一些关于常用备份文件的文件名和后缀,可以直接使用burp抓包爆破,果然爆破出一个www.zip文件

访问下载好文件就有三个PHP文件,下面进行代码审计

访问index.php

首先访问一哈index.php 里面主要是网页代码,不过中间插了一段

包含了class.php文件

定义了一个存放GET请求方法的变量select

将select变量的值进行反序化为 PHP 对象 @表示忽略可能出现的错误信息

   

unserialize() 函数

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

语法结构
unserialize ($str )
$str:序列化的字符串
如果传递的字符串不可解序列化,则返回 FALSE,并抛出异常

如果不可解序列化,则返回false

serialize() 函数

serialize() 函数用于序列化对象或数组,并返回一个字符串。

serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变。

语法
serialize ($value )
$value: 要序列化的对象或数组。

可以看到,当序列化以后输出的结果是一串字符。

a:表示一个数组,由array首字符表示,例如int序列化后回显就是i

4:表示数组的元素个数为4

{}:数组元素的集合(下标 +元素)

i:表示是整型,0:表示元素内容,这里是数组下标

s:表示类型为字符串,长度为6,内容为:Google

访问class.php

username = $username;        $this->password = $password;    }    function __wakeup(){        $this->username = 'guest';    }    function __destruct(){        if ($this->passWord != 100) {            echo "
NO!!!hacker!!!
"; echo "You name is: "; echo $this->username;echo "
"; echo "You password is: "; echo $this->password;echo "
"; die(); } if ($this->username === 'admin') { global $flag; echo $flag; }else{ echo "
hello my friend~~
sorry i can't give you the flag!"; die(); } }}?>

首先导入flag.php文件,定义了一个叫Name的类,声明了两个私有变量(顾名思义:变量属性或方法只能在Name类中使用)

__construct

构造函数(也称为构造器)是类中的一种特殊函数,当使用 new 关键字实例化一个对象时,构造函数将会自动调用。代码中用到了 $this,它表示当前调用的对象,而且 $this 只能在类的方法中使用

以下代码大致的意思就是:

定义了一个名为WEB的类,该类有三个属性:name、url和title,以及一个构造函数__construct()。构造函数在创建Website对象时自动调用,它接受三个参数并将它们分别赋值给类的属性。

构造函数还调用了类的另一个方法ec(),该方法会输出对象的属性值。

最后,创建了一个Web对象$object,并传入了三个参数。在构造函数中,$object的属性被赋值并输出。因为类无法直接访问,需要得到类的具体对象才能访问,可以通过实例化new来实现对象的创建

__wakeup()

__wakeup():当类外部使用`unserialize()` 时,会检查是否存在一个 `__wakeup()` 方法。如果存在,则会先调用 `__wakeup` 方法,预先准备对象需要的资源。

作用:
__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
这里的作用就是先将username赋值,使我们传入的username永远为guest

__destruct():

析构函数/方法,析构函数的作用和构造函数正好相反,析构函数只有在对象被垃圾收集器收集前(即对象从内存中删除之前)才会被自动调用。析构函数允许我们在销毁一个对象之前执行一些特定的操作,例如关闭文件、释放结果集等。

作用:
这里的作用是,在wakeup函数调用完后,进行判断,如果password不为100为真:抛出错误回显,并利用die()函数退出当前脚本
如果为假,也就是password=100,接着强类型比较username是否=== admin 如果为真就打印flag

所以到现在为止,唯一的问题就是当我们给username赋值后,因为脚本引用了unserialize() 函数,所以,wakeup方法将会再给username赋值为guest,我们得想方法绕过

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

但是好像是因为我PHP版本有点高所以不受影响,不能展示了,直接构造吧

解题步骤

首先我们需要获取传入参数的序列化字符串

然后赋值字符串,构造payload,但是并没有成功

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

查看wp后得到有关私有变量的解释

public 、public、protected

类中的 公有、私有、受保护成员

  • public 表示全局,类内部外部子类都可以访问;

  • private表示私有的,只有本类内部可以使用;

  • protected表示受保护的,只有本类或子类或父类中可以访问;

不同的访问修饰符对应的序列化也有不同。

各访问修饰符序列化后的区别:

  • public:属性被序列化的时候属性名还是原来的属性名,没有任何改变

  • protected:属性被序列化的时候属性名会变成\0*\0字段名

  • private:属性被序列化的时候属性名会变成\0类名\0字段名

所以我们重新构造payload,这里利用%00表示\0

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

获得flag

来源地址:https://blog.csdn.net/qq_49893996/article/details/130670569

--结束END--

本文标题: [极客大挑战 2019]PHP1

本文链接: https://lsjlt.com/news/390692.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [极客大挑战 2019]PHP1
    既然提到了备份网站估计也是存在着网站备份文件,可以先用御剑扫一下 啥都没扫出来,但是上回做文件备份的题目时收集了一些关于常用备份文件的文件名和后缀,可以直接使用burp抓包爆破,果然爆破出一个...
    99+
    2023-09-02
    php 开发语言 Powered by 金山文档
  • [极客大挑战 2019]PHP1-原创超详细
    [极客大挑战 2019]PHP1 提示:有一个良好的备份网站的习惯 寻找一个备份文件字典,我在github上找的: scopion/dic: 渗透字典,框架信息泄露,备份文件泄露,配置文件泄...
    99+
    2023-09-06
    php 开发语言 html5 网络安全
  • [极客大挑战 2019]RCE ME
    linux php -r,Linux中php命令起什么作用呢?_冬瓜Don的博客-CSDN博客 -r:运行PHP代码,而无需使用脚本标记“..>” 浅谈PHP代码执行中出现过滤限制的绕过执行方法_末初mochu7的博客-CSDN博客_php...
    99+
    2023-09-15
    php 开发语言 github
  • [极客大挑战 2019]EasySQL 1
    [极客大挑战 2019]EasySQL 1 解题POC一、解题思路之暴力破解1. 弱口令2. 暴力破解 二、解题思路之万能密码1. 什么是万能密码2. 测试过程 解题POC ...
    99+
    2023-09-09
    数据库 sql php
  • [极客大挑战 2019]PHP 1
    一、打开是个猫猫,说有个备份网站,用dirsearch扫。 二、发现有个www.zip,备份网站一般也是,下载下来,index.php有点东西,页面会传入一个select的参数,然后把它反序列化,让我...
    99+
    2023-09-09
    php 开发语言 安全
  • web:[极客大挑战 2019]PHP
    题目 点进页面显示如下 根据页面提示,这个网站有备份文件,备份文件一般是bak文件格式,用dirsearch扫描 访问之后下载了一个文件 里面都是一些代码 在index.php中发现了一个类的文件,一个get传参,然后将传进的值进...
    99+
    2023-10-10
    php 开发语言 网络安全
  • BUUCTF [极客大挑战 2019]BuyFlag1
    进入靶场,发现有另一个buyflag页面 告诉我们如果要买flag,必须是cuit的学生,必须有正确的密码,查看源码,发现密码已经告诉我们  这里涉及post传递两个参数money和password,is_numeric的绕过 和pas...
    99+
    2023-09-01
    网络安全 php
  • [极客大挑战 2019]Havefun1、EasySQL(BUUCTF)
    前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 今天是2022年的最后一天, 这一年我居然写了72篇文章 获得5枚勋章  还多了14个粉丝 好了不说了,上水题的题解 EasySQL题目描述 解题工具: 不需什么工具,...
    99+
    2023-08-31
    php
  • BUUCTF[极客大挑战 2019]Secret File1
     打开题目连接如上图,没有输入点或上传点,所以我们查看页面源代码。 访问当前目录下的Archive_room.php文件  点击完发现啥也没看清  这时可以尝试用老朋友burp抓个包康康,将抓到的包放到Repeater里Go一下,发...
    99+
    2023-09-18
    web安全 php
  • BUUCTF-Web-[极客大挑战 2019]Upload
    打开后可以看到是一个可以进行文件上传的页面,如下图所示 查看页面源代码,如下图所示,可以看到有js代码,说明存在前端验证的可能性 上传一个php文件,此处上传shell.php后页面如下图所示,显示不是图片 用burpsuite进行抓...
    99+
    2023-10-07
    php 开发语言
  • Buuctf [极客大挑战 2019]BuyFlag1 WP解析
    题目来源:极客大挑战 2019 题目名称:BuyFlag 1 打开网页  探索网站直到发现了pay   ctrl+u查看源代码 Buy You Flag来源地址:https://blog.csdn.net/qq_60115503/artic...
    99+
    2023-09-06
    php 前端 css spring 网络安全
  • [极客大挑战 2019]PHP(反序列化)
    介绍说明,有备份的习惯,找常见的备份文件后缀名 使用dirsearch进行扫描 dirsearch -u http://f64378a5-a3e0-4dbb-83a3-990bb9e19901.nod...
    99+
    2023-09-04
    php android 开发语言
  • BUUCTF 之 [极客大挑战 2019] Havefun(GET 传参)
    BUUCTF 之 [极客大挑战 2019] Havefun(GET 传参) 相关题解 相关 项目内容难度简单类型WEB靶场BUUCTF坐标Havefun 题解 启动靶机后,映入眼帘的是一...
    99+
    2023-09-11
    php 开发语言
  • [极客大挑战 2019]Secret File 1解题思路
    1.开启靶机 开启靶机后进入网址,没有什么好的信息 2.按F12查看源代码 发现了一个网址./Archive_room.php按CTRL键点击即可进入,可以看到 ...
    99+
    2023-09-06
    php 服务器 开发语言 Powered by 金山文档
  • BUUCTF:[极客大挑战 2019]RCE ME ——两种方法
    BUUCTF:[极客大挑战 2019]RCE ME 打开环境是 代码审计题 代码审计很简单 我们上传的payload中不能含有大小写字母和数字 我们可以使用 异或绕过 和url编码取反绕过绕过 ...
    99+
    2023-10-06
    php web安全 安全
  • [极客大挑战 2019]Secret File 1(php伪协议)
    纯小白的web之旅/(ㄒoㄒ)/~~ 第一篇题解,有些地方可能还不清楚,或者存在错误,大佬们如果看到可以指点一下(●'◡'●) 点开靶机 是这个界面,第一步看一下源代码,  可以看到一个提示  Archive_room.php 点进去就跳...
    99+
    2023-09-08
    php 开发语言 web
  • [极客大挑战 2020]Greatphp (php 内置类)
    发现第一个if是md5和sha1函数的漏洞,用一个数组就可以绕过去,但是命令里面eval()syc这个参数又得被执行,所以不能是数组。 这时候只能想到php中的内置类,也就是原生类。 Error:用于PHP7、8,开启报错。 Exceot...
    99+
    2023-09-13
    php 开发语言 web安全
  • CTFshow-RCE极限大挑战
    前言 ctfshow出的这五道rce感觉挺好玩的,但自己没做出几道来,所以来详细的复现一下,这几道题基本都是利用的自增,但长度逐渐缩短,雀氏极限。 RCE1 源码 分析 可以看到我们最后执行的是eval,而过滤的只有( 和. ,而php ...
    99+
    2023-09-16
    php 开发语言
  • CTFSHOW_RCE极限挑战
    不可见字符替代参数来减少字符数量gettext()扩展的使用,来得到字符串php代码执行特性自增 RCE挑战1 闭合 ...
    99+
    2023-10-24
    php 开发语言
  • ctfshow--RCE极限挑战
    本周ctfshow的挑战注重点为RCE,主要利用是:自增绕过RCE RCE挑战1 属于简单类型 源码 error_reporting(0);highlight_file(__FILE__);$c...
    99+
    2023-09-09
    php 网络安全 CTF 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作