PHP代码审计-反序列化

免 责 声 明

本文旨在介绍PHP代码审计和反序列化漏洞的相关概念、攻击技术和防御措施,并提供有关如何评估和加固PHP应用程序安全性的指导。文章中的信息和建议仅供参考和教育目的,并不构成任何法律意见或保证。

在进行PHP代码审计和应用程序安全评估时,请确保获得授权,并遵守相关法律和道德准则。审计过程中应尊重应用程序的所有权,并确保未经授权的访问或修改。

尽管本文中提供的信息经过精心研究和审查,但由于互联网安全领域的不断变化和演进,不能保证其中的信息完全准确和最新。读者在采取任何行动之前,应自行评估并承担风险。

一、拿到内网站点

通过浏览器访问站点显示时一个登入框

二、信息收集

查看页面源代码,可以看到除了一个post请求信息外并没有我们要获取的东西。

  1. 服务器站点信息收集

抓包查看发现请求采用了rulencode技术,都不是问题。

下面我们收集服务器站点数据,看看有没有可利用的,下面是我写的一个脚本,速度特别快,1s就能爬出我们需要的信息。

下面这个是输出的结果(这里为了不占用太多的资源,只展示小部分):

从结果上看,我们获取到了网站的数据库管理后台,网站源代码,php版本以及nginx版本等等。在这里我们就有4种发方法可以尝试,这里为了不耽误大家的时间,我就写一种,剩下的大家可以看回放。

把源码文件下载下来,可以看到网站架构情况如下:

有一个php连接数据库的配置文件,在里面可以看到连接数据库的用户名和密码,但不能远程连接数据库。换一个思路审计代码,发现有疑似这些漏洞。

查看代码验证结果,在profile.php中存在unserialize反序列化和file_get_contents读文件

通过这个反序列化逃逸可以来控制phpto达到成我们读文件

登入和注册我们就不看了,在update.php中

这些都是上传的一些限制,这里用了一堆正则表达式来过滤我们提交的数据,而且第三个正则表达式和前面两个不一样,这里判断了nickname是否为字符还有长度是否超过10。用文章开头的知识点二,如果我们传入的nickname是一个数组,绕过长度的限制,则可以绕过这正则表达式,是我们不会die出。

在代码的后面调用update_profile处我们想到这个可能是将数据保存到数据库,而且还用了php序列化serialize(),我们可以大胆的尝试

class.php中看到了定义的update_profile()方法。最后看下class.php中的数据库查询有一个过滤规则,刚好拿来上面的反序列化利用

这里访问register.php去注册一个账号然后登入

既然从nickname逃逸出,"};将前面的nickname数组闭合之后,剩下的s:5:"photo";s:10:"config.php";}就会被当作photo的部分了,至于后面的upload,由于被后面";}结束反序列化,也就被丢弃,这样就实现了config.php的读取

提示需要点击Your Profile,因为这里没有做过滤可以上传文件我上传了一个php的文件,所以这里的头像就没有显示出来。

查看源代码,发现有一个编码的图片地址

解码后得到我们需要的东西

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值