• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php序列化与反序列化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

jarvisoj上的一道题

http://web.jarvisoj.com:32784/

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

大神的wp  https://chybeta.github.io/2017/07/05/jarvisoj-web-writeup/#PHPINFO

题目给直接给出了源代码

 

 

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就出来了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
mac编译安装php-swoole扩展发布时间:2022-07-10
下一篇:
PHP中var_export、print_r、var_dump调试中的区别发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap