渗透测试实战 | 代码审计攻破目标站点

admin 2024年8月27日20:01:56评论15 views字数 982阅读3分16秒阅读模式

一、事件起因

在一个风和日丽的夜晚,我收到一位朋友的请求,希望我协助检查一个特定的站点。为了表达谢意,他还特意为我准备了第二天晚上的早饭。抱着对美食的期待,我开始着手调查这个站点的问题。

二、渗透过程

最初,我尝试对目标站点进行黑盒测试。然而,目录扫描会导致IP被封禁,后台账号密码和前台注册邀请码的爆破尝试也都以失败告终。前端的JavaScript代码复杂且难以解读,导致无法取得实质性的进展。面对这些困难,我决定改变思路,通过特征搜索找到了该站点的源码。

渗透测试实战 | 代码审计攻破目标站点

前台登录页面和后台登录页面都具有典型的设计风格,初步判断是基于ThinkAdmin进行的二次开发。由于代码量不大,我选择手工审计代码而非借助工具。

渗透测试实战 | 代码审计攻破目标站点

1. 任意文件读取漏洞

在代码审计过程中,我发现了一个可疑的参数encode。通过传入特定的加密参数,可以实现对任意文件的读取,例如配置文件

config/database.php

这类漏洞与之前ThinkAdmin曝出的任意文件读取漏洞相似,尽管代码有所修改,但核心问题依然存在。

渗透测试实战 | 代码审计攻破目标站点

2. 文件上传漏洞

进一步审查代码,我发现了Base.php中的upload_base64()函数。该函数接受两个参数:$type$img,其中$img为经过Base64编码的图片数据。代码通过正则表达式解析文件内容和后缀,检查并创建相应的文件夹,最后保存文件。

渗透测试实战 | 代码审计攻破目标站点

值得注意的是,该函数缺乏对上传文件的有效验证和过滤,导致存在文件上传漏洞。前端多处调用了upload_base64()函数,只需通过POST请求传递特定参数即可上传任意文件,从而可能执行恶意代码。

渗透测试实战 | 代码审计攻破目标站点

 

渗透测试实战 | 代码审计攻破目标站点

渗透测试实战 | 代码审计攻破目标站点

3. 获取Shell权限

综合利用上述漏洞,可以实施一系列攻击步骤。如果目标站点的数据库端口(如3306)暴露在公网,通过任意文件读取漏洞获取数据库的账号和密码,然后获取有效的邀请码完成注册登录,最后利用文件上传漏洞获取Shell权限,全面控制目标站点。

渗透测试实战 | 代码审计攻破目标站点

渗透测试实战 | 代码审计攻破目标站点

三、总结

此次渗透测试案例中,主要漏洞源于对已有框架的二次开发过程中未能充分考虑安全性,导致经典漏洞重新出现。尽管攻击手段并不复杂,但也凸显了代码审计在安全测试中的重要性。通过这次实践,我进一步深化了对代码安全审计的认识,也提醒开发者在二次开发过程中应严格遵循安全编码规范,及时修补已知漏洞,确保系统的安全性。

渗透测试实战 | 代码审计攻破目标站点

 

原文始发于微信公众号(暗影网安实验室):渗透测试实战 | 代码审计攻破目标站点

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月27日20:01:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试实战 | 代码审计攻破目标站点https://cn-sec.com/archives/3102680.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息