IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 功防世界web题解:unserialize3PHP2 -> 正文阅读

[PHP知识库]功防世界web题解:unserialize3PHP2

PHP2

首先用dirsearch扫描,发现index.phps页面,phps表示用户可以看到的php源码

image-20210713171628727

php是一钟弱类型语言===表示强等于。就是说必须要类型一致才等于,而 == 强制类型转换之后相等也可

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较 == 在进行比较的时候,会先将字符串类型转化成相同,再比较 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

接着要对admin进行两次的url编码,因为浏览器会进行一次url解码,而url编码就是把字母转换为十六进制再加上%号

x= input(":")
url=[]
for i in x:
    url.append(hex(ord(i)).replace('0x','%'))
for i in range(len(url)):
    print(f"{url[i]}",end="")

上个脚本,把id传进去完事。

总结:

image-20210714141001979

unserialize3

image-20210712192142949

这道题想考察php的反序列话漏洞:

贴一下什么是序列化和反序列化

序列化

定义:利用serialize()函数将一个对象转换为字符串形式
我们先看一下直接输出对象是什么效果,代码如下

<?php
    class test{
        public $name="ghtwf01";
        public $age="18";
    }
    $a=new test();
    print_r($a);
?>

效果如下
img
这个时候我们利用serialize()函数将这个对象进行序列化成字符串然后输出,代码如下

<?php
    class test{
        public $name="ghtwf01";
        public $age="18";
    }
    $a=new test();
    $a=serialize($a);
    print_r($a);
?>

效果如下

img

如果不是public方法那么后面的读取方法就有点不一样,例如代码如下

<?php
    class test{
        public $name="ghtwf01";
        private $age="18";
        protected $sex="man";
    }
    $a=new test();
    $a=serialize($a);
    print_r($a);
?>

效果如下

img

private分析:
这样就发现本来是age结果上面出现的是testage,而且testage长度为7,但是上面显示的是9
查找资料后发现private属性序列化的时候格式是%00类名%00成员名%00占一个字节长度,所以age加了类名后变成了testage长度为9

protect分析:
本来是sex结果上面出现的是*sex,而且*sex的长度是4,但是上面显示的是6,同样查找资料后发现protect属性序列化的时候格式是%00*%00成员名

这里介绍一下public、private、protected的区别

public(公共的):在本类内部、外部类、子类都可以访问

protect(受保护的):只有本类或子类或父类中可以访问

private(私人的):只有本类内部可以使用

反序列化

定义:反序列化就是利用unserailize()函数将一个经过序列化的字符串还原成php代码形式,代码如下

<?php
    $b='序列化字符串';
    $b=unserialize($b);
?>

反序列化漏洞原理

到这儿也许大家会想着序列化过去再反序列化回来,不就是形式之间的转换吗,和漏洞有什么关系
这里先掌握php常见的魔术方法,先列出几个最常见的魔术方法,当遇到这些的时候就需要注意了
附上讲解魔术方法的链接:https://segmentfault.com/a/1190000007250604

__construct()当一个对象创建时被调用

__destruct()当一个对象销毁时被调用

__toString()当反序列化后的对象被输出的时候(转化为字符串的时候)被调用

__sleep() 在对象在被序列化之前运行

__wakeup将在序列化之后立即被调用

这里主要考察wakeup_函数的绕过:

<?php
    class xctf{
        public $flag = '111';
    }
    echo serialize(new xctf());

然后将输出的结果修改对象个数即可绕过。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 15:56:45  更:2021-07-15 15:57:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 18:11:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码