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

BUUCTF——[0CTF 2016]piapiapia(PHP序列化长度导致字符逃逸)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
在写这个WP的时候,我只是明白了这道题的原理,试试我并没有做出来,
所以我决定,一边记录,一边做题。
这道题的基本思想并不难,只是不容易想到解题方法。
打开网站:

 

 

随便登录一下,也没有什么反应,正常这种情况下会用一些扫描器,对网站进行扫描,在我的WP中不止一次提到这个问题,BUUCTF平台是不许扫描的,这也让我很烦,几乎所有的源码泄露,敏感文件泄露都是我手动测试的。
不管了,www.zip可以得到网站的源码。

 

 

有这么些个文件,都尝试访问一下,profile.php会提示需要我们登录
另外还有一个register.php注册页面
随便注册一个:

 

 

会有一个这样的页面

 

 我们屡一下这个源码:

 

 

我们继续跟进这个页面:

 

 

然后,一开始我们登陆进去的时候,数据库里面肯定是没有我们的传入文件信息的,因此要经过update.php,我们继续跟进update.php
 

 

 

看到别人的WP说第三个判断可以控制nickname为数组绕过
这样的话两个条件是flase或null,故不会die出

 

 

 接着往下,看看又进行了哪些操作

 

 

好了,现在如果我们想读取文件,
就要通过update.php中的这个函数获得photo参数

 

 

 在profile.php的这个函数中读取文件

 

 

 
所以update.php的文件上传就是$photo变量唯一的来源,无法实际利用,到这里就是这道题的核心考点:PHP序列化长度导致字符逃逸
 
在大佬们的WP中了解到,PHP反序列化中读取字符的多少,是由表示长度的数字控制的,而且如果整个字符串的前一部分成功反序列化,字符串后面剩下的那些就会被丢弃。
 
我们来好好学习一下这个知识点:
 

 

 我们想把第二个变成第一个就需要把红色框选的部分,需要PHP序列化逃逸

 

 

 

 

因此如何去增加他的长度,在读取字符串之后,她会有一个非法字符替换的过程,就是将单引号替换成no,这样一个字符就变成了两个字符,每替换一个长度就增加1。为了给我们需要插入的字符空出地方,就需要给它足够长度,把他自己读取出来,增加的长度是46-13=33,因此在username的地方加入33个单引号,造成字符串逃逸
这就成功改变了sign的值
 
这里有一个疑问就是,单引号变成no,长度确实是改变了,但是单引号按道理也都变成了no呀,这是如何给我们要填进去的字符腾地方的呢,就不太明白。
根据题目猜测:
替换之后:那个长度扩大了,但是字符没变还是单引号,所以才有机会把我们的字符插入进去???
有师傅明白还请告知,这篇文章我会继续修改。

 

 

我们回来看这道题
也是一样的道理
构造payload:
 
adminwherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}

  

 

 

然后放数据包
查看源码;
base64解密就得到了flag
 

 

 

 

 

 

 
 
 
 

鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
PHP中的并行处理(简)发布时间:2022-07-10
下一篇:
关于php优化你必须知道的一些事情发布时间: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