php源码什么意思(PHP代码审计-反序列化)

wufei123 发布于 2024-08-18 阅读(12)

免责声明本文旨在介绍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的文件,所以这里的头像就没有显示出来。

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

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。