反序列化 php R类型,pikachu-PHP反序列化、XXE、SSFR

一、PHP反序列化

1.1概述

在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数。

序列化serialize()

序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:

class S{

public $test="pikachu";

}

$s=new S(); //创建一个对象

serialize($s); //把这个对象进行序列化

序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}

O:代表object

1:代表对象名字长度为一个字符

S:对象的名称

1:代表对象里面有一个变量

s:数据类型

4:变量名称的长度

test:变量名称

s:数据类型

7:变量值的长度

pikachu:变量值

反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

$u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");

echo $u->test; //得到的结果为pikachu

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

常见的几个魔法函数:

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

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

__toString()当一个对象被当作一个字符串使用

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

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

漏洞举例:

class S{

var $test = "pikachu";

function__destruct(){

echo $this->test;

}

}

$s = $_GET[‘test‘];

@$unser = unserialize($a);

payload:O:1:"S":1:{s:4:"test";s:29:"";}

1.2实验

查看源代码(路径如下),这里有个接口可以接受一个反序列化的对象,对传进来的参数没有进行任何过滤

20200403150245360988.png

我们可以利用相似的代码生成一个反序列化的字符串,反序列化一般通过代码审计的方式发现

class S{

var $test = "";

}

echo ‘
‘;

$a = new S();

echo serialize($a);

?>

将这段代码命名为unserialize.php,在浏览器的url中输入路径访问它

20200403150246025076.png

弹框出来,我们点击确定,点击右键,查看页面源代码

20200403150246415716.png


后面的内容复制下来,在下图中输入

O:1:"S":1:{s:4:"test";s:29:"";}

这段代码的反序列化的结果是一个 JS 的弹窗,我们提交后就能进行 XSS 攻击

20200403150246619826.png

二、XXE

2.1概述

XXE -"xml external entity injection"

既"xml外部实体注入漏洞"。

概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"

也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

具体的关于xml实体的介绍,网络上有很多,自己动手先查一下。

第一部分:XML声明部分

第二部分:文档类型定义 DTD

]>

第三部分:文档元素

Dave

Tom

其中,DTD(Document Type Definition,文档类型定义),用来为 XML 文档定义语法约束,可以是内部申明也可以使引用外部DTD现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。

① 内部申明DTD格式

元素申明]>

② 外部引用DTD格式

③ 引用公共DTD格式

识名" "公共DTD的URI">

外部实体引用 Payload

]>

&f;

现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。

以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

本章提供的案例中,为了模拟漏洞,通过手动指定LIBXML_NOENT选项开启了xml外部实体解析。

2.2实验

打开pikachu平台,我们先输入一个payload

]>

&hacker;

20200403150246837607.png

它将我们定义的实体内容打印在了前端

所以我们可以通过system关键字定义一个外部实体,可以让他支持一些协议读取外部数据,比如Linux中的etc/passwd 。

我用的是windows 所以只读取一个简单的文件了

payload:

]>

&f;

20200403150247172581.png

20200403150247290750.png

三、SSRF

3.1概述

SSRF(Server-Side Request Forgery:服务器端请求伪造)

其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制

导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据

数据流:攻击者----->服务器---->目标地址

根据后台使用的函数的不同,对应的影响和利用方法又有不一样

PHP中下面函数的使用不当会导致SSRF:

file_get_contents()

fsockopen()

curl_exec()

如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。

你可以根据"SSRF"里面的项目来搞懂问题的原因

3.2 SSRF(curl)

20200403150247841552.png

点击可以看到一首诗,在上方url中我们可以看到诗的来源

20200403150249177541.png

我们可以把 url 中的内容改成同一网络的其他服务器上地址和端口,探测内网的其他信息,比如查看文件,使用下面地址查看地址为192.168.10.123的站点里的WWW文件里的一个记事本

20200403150249325984.png

查看后端代码(路径如下)  如果没有做好过滤,就可以通过curl这个方法获取到内网的其他服务器上的信息,也可以对网络上的进行读取

20200403150249448059.png

3.3 SSRF(file_get_content)

20200403150249617988.png

20200403150249807448.png

发现和刚才一样,我们查看下后端源码(路径如下)

20200403150250278169.png

与上面实验不同的是这个使用了file_get_contents

读取PHP文件的源码:php://filter/read=convert.base64-encode/resource=ssrf.php

内网请求:http://x.x.x.x/xx.index

那么file_get_contents里面带有php:// filter 我们用这个就可以来读取php源码

我们构造这样的url 192.168.10.246/pikachu-master/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

20200403150250478372.png

我们将页面上这段编码使用base64进行解码

20200403150250666856.png

得到ssrf.php里的代码  这是ssrf概述那个页面的代码。

原文:https://www.cnblogs.com/heiwa-0924/p/12622293.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【51nod - 前缀异或】 对前缀和的理解

题干&#xff1a; 前缀异或 基准时间限制&#xff1a;2 秒 空间限制&#xff1a;131072 KB 分值: 5 输入一个长度为n(1 < n < 100000)数组a[1], a[2], ..., a[n]。 输入一个询问数m(1 < m < 100000)和m组询问&#xff0c;每组询问形如(l, r) 对于每组询问(l, …

oracle中创建实体,生成实体-SqlSugar 4.x-文档园

注意&#xff1a;使用DbFirst数据库账户要有系统表的权限,否则无法读取表的结构1.将库里面所有表都生成实体类文件db.DbFirst.CreateClassFile("c:\\Demo\\1",命名空间);2.指定名表生成 &#xff0c;可以传数组db.DbFirst.Where("Student").CreateClassFil…

【HDU - 1087】Super Jumping! Jumping! Jumping! (最大上升子序列类问题,dp)

题干&#xff1a; Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now. The game can be played by two or more than two pl…

oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库

最近遭遇了 oralce 监听服务启动了 又自行关闭的 悲惨经历我把我的过程和大家分享一下&#xff01;1)排查原因程序员是懒惰的&#xff0c;我始终都希望能够成功启动监听服务&#xff0c;但是就是事与愿违有一下方式可能不能成功启动监听1.端口占用&#xff0c;oralce 要用到152…

【HDU - 2571】 命运(记忆化搜索)

题干&#xff1a; 穿过幽谷意味着离大魔王lemon已经无限接近了&#xff01; 可谁能想到&#xff0c;yifenfei在斩杀了一些虾兵蟹将后&#xff0c;却再次面临命运大迷宫的考验&#xff0c;这是魔王lemon设下的又一个机关。要知道&#xff0c;不论何人&#xff0c;若在迷宫中被…

nmon监控linux内存,使用Nmon监控Linux系统性能

Nmon (又称 Nigel’s Monitor) 是一款常用的系统性能监视工具&#xff0c;由 IBM 工程师 Nigel Griffiths 开发&#xff0c;适用于 AIX 和 Linux 操作系统。该工具可以直接在屏幕上显示当前操作系统的资源利用率&#xff0c;以帮助大家找出系统瓶颈和协助系统调优。由于其十分出…

linux mysql授权远程登录,Linux中 MySQL 授权远程连接的方法步骤

说明&#xff1a;当别的机子(IP )通过客户端的方式在没有授权的情况下是无法连接 MySQL 数据库的&#xff0c;如果需要远程连接 Linux 系统上的 MySQL 时&#xff0c;必须为其 IP 和 具体用户 进行 授权 。一般 root 用户不会提供给开发者。如&#xff1a;使用 Windows 上的 SQ…

linux 双通道 磁盘,HP MSA2012SA 双通道 磁盘阵列配置说明 for linuxoracle

HP MSA2012SA磁盘阵列配置说明说明&#xff1a;可以先安装HP服务器的操作系统&#xff0c;等安装完了以后再配置磁阵&#xff1b;1、安装好服务器的操作系统&#xff1b;该安装的包都安装上&#xff1b;2、磁盘阵列上架&#xff0c;加电&#xff0c;SAS线不用接服务器&#xff…

linux mariadb 乱码,MariaDB插入中文数据乱码解决过程

基本情况&#xff1a;MariaDB安装方式&#xff1a;yum乱码解决过程&#xff1a;1.查看当前数据库编码(登录数据库后)# show variables like character%;(上图为已经配置成功)2.如果结果不为上图则需要设置数据库配置文件•编辑 /etc/my.cnf.d/client.cnf 文件&#xff0c;添加如…

摩托罗拉为什么要限制自家linux手机,摩托罗拉为何在安卓手机大放异彩的时候,突然开始衰败了呢?...

摩托罗拉从一开始就走在了安卓的道路上&#xff0c;并且魅力四射&#xff0c;可以说一时间也是风光无比。对比诺基亚坚定的走向WP之路&#xff0c;这一点摩托罗拉没有走错。安卓当时的热门机中&#xff0c;摩托罗拉的里程碑系列可以算作是经典之作。销量也可以进入当年的前三。…

pta输出三角形字符阵列c语言,C语言l|博客园作业11

这个作业属于哪个课程C语言程序设计II这个作业要求在哪里链接我在这个课程的目标是掌握C语言以及熟练运用这个作业在哪个具体方面帮助我实现目标询问同学&#xff0c;百度&#xff0c;vs2019上的报错参考文献链接1.1 题目名6-1 统计某类完全平方数本题要求实现一个函数&#xf…

*由易到难的讲解动态规划(精)

简介(入门) 什么是动态规划&#xff0c;我们要如何描述它? 动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式时间复杂度&#xff0c; 因此它比回溯法、暴力法等要快许多。 现在让我们通过一…

计划的主体部分应有哪些内容_本科论文查重查哪些部分内容?需要注意什么?...

作者&#xff1a;新风学术网关于本科毕业论文查重是查重哪些首先我们需要了解的是查重的依据&#xff0c;论文查重是建立在论文上的&#xff0c;我们先要知道一篇论文有哪些地方能用来检测&#xff0c;一篇论文它的组成是由封面、目录、前言、正文、参考文献、附录、页眉页脚等…

C语言 printf源码详解,从头一起学c语言(六)————printf函数的详解

这段时间很忙&#xff0c;更新的晚了&#xff0c;见谅。当然同样有今天我们的主角十分复杂&#xff0c;之前介绍了这个手记并非是面对新手的&#xff0c;而是我的复习手记。所以我们会讲头文件&#xff0c;或许有错误&#xff0c;如果有大手子看到&#xff0c;希望能够提出我的…

vla点转为lisp点_A股大涨53.70点,收复3400点,下周会继续大反弹吗?

在红周四的小惊喜之后&#xff0c;今天周五更是来了一个大涨的大惊喜&#xff0c;应验了杰克在8月27日复盘文章《以为A股会继续下跌&#xff0c;却上涨20.37点&#xff0c;明天会是大涨红周五吗》之中提出的观点——“今天上证指数的缩量反弹并不是说现在要止跌且启动反弹攻势了…

最有效的萨克斯弱音器_1990到2016年全球自杀数据公布,中国自杀死亡率下降最显著!...

最新一期的BMJ杂志上发表的一篇题为《Global, regional, and national burden of suicide mortality 1990 to 2016: systematic analysis for the Global Burden of Disease Study 2016》的研究&#xff0c;对1990到2016年全球自杀疾病负担进行了分析&#xff0c;让我们一起来看…

C语言编译不等于,为什么嵌入式C语言中的size不等于所有成员size之和

结构体在C语言程序开发中&#xff0c;是不可或缺的语法。不过&#xff0c;相信不少C语言初学者遇到过这样的问题&#xff1a;为什么结构体的 size 有时不等于它的所有成员的 size 之和呢&#xff1f;C语言结构体大小等于它的所有成员大小之和吗&#xff1f;举例来说&#xff0c…

ip地址合不合法怎么看_到底醇基燃料合不合法呢?

什么是醇基燃料?醇基燃料合不合法?投资醇基燃料或者自己用有没得回报呢?新能源环保燃料油配方_醇基燃料厂家加盟-四川新源素科技有限公司​www.xysu.net什么是醇基燃料醇基液体燃料主要是以甲醇、乙醇为主混配的液体燃料&#xff0c;甲醇是最简单的饱和脂肪醇&#xff0c;分…

android 通讯录 备份,安卓Android手机通讯录怎么备份 卓联系人备份 卓手机联系人导出...

一旦买新安卓手机&#xff0c;如何才能快速地将通讯录、短信、通话记录、图片以及音乐转移到新手机里?如果还用纯手动复制、输入的方式&#xff0c;就说明你out的太久了。其实&#xff0c;只需短短四步就可以方便的将联系人、照片、音乐、应用等等一键转移完成无缝换机。【步骤…

origin怎么打开txt文本_【每日一学】差示扫描量热法(DSC)测量材料的比热容(3在Origin软件中计算间接法测得比热容的方法)...

在本系列内容第1部分和第2部分中分别介绍了使用DSC法通过间接法测量材料的比热容的常用方法的基本原理和得到高质量比热数据的方法&#xff0c;在完成实验后需要在相关的分析软件中计算所研究的材料的比热容。在目前大多数商品化的DSC仪所附带的分析软件中通常可以额外配置可用…