博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php序列化与反序列化
阅读量:5160 次
发布时间:2019-06-13

本文共 1282 字,大约阅读时间需要 4 分钟。

jarvisoj上的一道题

是关于php序列化以及反序列化引起的问题,我看wp和各种百度理解的

大神的wp  

题目给直接给出了源代码

 

 

ini_set('session.serialize_handler', 'php');

这句话是关键,漏洞产生在php_serializephp解析方式上。

如果我们通过php_serialize的方式构造序列化语句,然后通过php的方式解析序列化语句,就会出现问题。原因是在使用php_serialize构造过程中,可以在字符串变量中储存 | 符号,但是如果按照php的方式解析的话,会把 | 之前的语句当做数组的键,之后的语句当做值,这时我们就可以按照这个特性来构造执行对象的命令。(这里不是很明白,实验后大概就是可以利用这个来执行一些权限允许的命令,以后再碰到这样的题目就应该可以有更深的理解了)

这里没有某个值是用来接受我们传入的数据,并储存到$_SESSION中的。通过查看phpinfo页面可以看到session.upload_progress.enabled是被打开了的也就是允许上传文件。

当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session

 

 

这里就实现了上面的文字描述的内容

再写个php,弄出序列化后的内容,将mdzz赋值为想要序列化的内容

 

 

先求出print_r(scandir(dirname(__FILE__)));序列化后的内容,这个里面涉及到的函数全靠百度和官方文档...,大概意思是可以打印出web根目录下的所有文件名称

O:5:"OowoO":1:{s:4:"mdzz";s:36:"print_r(scandir(dirname(__FILE__)));";}

这是序列化后的内容。

打开那个我们做的html上传任一文件,用burp截断,修改filename,这里需要在”前加上\防止转义,并且在最前面加上|,这是session的格式。

 

 

不太会用这个,图像就是不太清晰

这时我们查看phpinfo界面,可以发现_SESSION["SCRIPT_FILENAME"]中标注了index.php所在的目录/opt/lampp/htdocs/,而我们想要的文件也在里面

接下来就是去获取那个可疑文件的内容

print_r(file_get_contents("/opt/lampp/htdocs/Here_1s_7he_fl4g_buT_You_Cannot_see.php"));将这个序列化,和前面一样上传,就可以得到该文件的内容,有关于file_get_contents()和file()的区别和作用,靠百度...我试了file()也是一样可以的。

这时flag就出来了。

转载于:https://www.cnblogs.com/GH-D/p/8243765.html

你可能感兴趣的文章
软工网络15个人作业5——软件工程总结
查看>>
c#字符串加载wpf控件模板代码 - 简书
查看>>
WPF 自定义滚动条(ScrollView、ScrollBar)样式
查看>>
C#远程时间同步助手软件设计
查看>>
照片美妆---人脸老化
查看>>
WCF中自定义消息编码器:压缩编码器的使用
查看>>
Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
查看>>
.Net 转战 Android 4.4 日常笔记目录
查看>>
IntelliJ IDEA 开发swing(二)
查看>>
十五天精通WCF——第十二天 说说wcf中的那几种序列化
查看>>
【.net深呼吸】动态类型(高级篇)
查看>>
javascript运算符整理
查看>>
消除类游戏(js版)
查看>>
【javascript基础】5、创建对象
查看>>
跟我一起学习ASP.NET 4.5 MVC4.0(六)
查看>>
IBM RSA (IBM rational software architect ) V8 学习之六 C++类模板设计
查看>>
SQL SERVER 2008 EXPRESS版本远程连接(tcp/ip)
查看>>
asp.net开源CMS推荐
查看>>
查询数据库里有多少张表、视图、存储过程
查看>>
Python和qqbot库开发简单的机器人
查看>>