侵权声明
本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。
如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: [360619623@qq.com]。我们将在确认后的合理时间内采取适当措施,包括删除相关内容。
感谢您的理解与支持
系统介绍
yylAdmin是一个基于ThinkPHP8和Vue3极简后台管理系统,只有登录退出、权限管理、系统管理、接口文档与调试等基础功能;前后台基础框架;你可以在此基础上根据你的业务需求进行开发扩展。前后分离,简单轻量,免费开源,开箱即用。
系统情况
版本
2024.9.20之前
项目地址
https://gitee.com/skyselang/yylAdmin
SQL注入
漏洞描述
在该版本下的该接口/admin/file.File/list存在SQL注入漏洞,该漏洞源于应用缺少对外部输入SQL语句的验证,攻击者可利用该漏洞执行非法SQL命令获取数据库敏感数据。
受影响参数
is_disable
分析
1、首先找到调用的接口函数
可以看到在第55行通过param
获取了参数。在这之后在72行赋值给了where
数组。
2、此后跟进list
函数
可以看到在第94行处where
数组给了where()
函数后续又调用了count()
函数
3、继续跟进count()
函数
此函数继续调用了countWithGroup()
函数并且就在下面。此时可以看到where
数组在options
数组中
4、继续更进buildSql()
函数
继续跟进select()
函数
可以看到最终在这里将数据进行了拼接形成了sql语句
5、回到count()
函数,继续跟进aggregate()
函数
继续跟进
可以看到形成的sql语句在query
数组中
6、继续跟进value()
函数
最终在1255行执行了sql语句形成了sql注入漏洞
复现
我这里以超级管理员为例,其实用户只要能访问文件管理就行了
1、首先找到前端接口
2、在burp中找到该数据包,然后发送到repeater模块
3、修改is_disable
参数为1+union+select+sleep(3))+as+agc --
即可复现
文件上传
这比较简单因为只需要修改限制上传类型,就可以实现任意文件上传。
简单分析一下
可能分析的不全或有的地方是错误的
1、找到调用的接口函数,发现没有继续过滤直接进行了保存操作
2、然后跟进edit函数
3、继续跟进save函数
4、此时需要判断是否已存在数据库中,可以得知数据是已经存在只需要跟新即可于是继续跟进updateData()函数
红框处就是保存的逻辑后续就是执行sql语句进行保存就不跟进了
复现
1、找到修改允许上传类型的地方并添加php类型
2、然后找到任意可以上传文件的接口,即可删除php文件。
3、然后直接利用就可以了
修复
SQL注入
其实该系统已经进行了预编译,只是该漏洞是拼接在预编译前所以造成了漏洞,所以修复还是预编译在拼接前并进行关键字的过滤。
不过看官方的还是更好,还是以官网为主
文件上传
漏洞原因是对限制文件上传类型的设置可以添加任意后缀。所以修复就是在设置处也对其中的类型进行过滤。
不过看官方的还是更好,还是以官网为主
结语
众所周知当一个系统存在一个sql注入时很可能存在另一个或多个sql注入。不过我只发现了这一个。
免责声明
本博客所提供的技术知识和信息仅旨在教育和分享网络安全最佳实践,促进网络安全意识的提升。作者严禁将这些技术和信息用于任何非法或不道德的目的。
使用本博客内容而导致的任何违法行为或后果,作者不承担任何法律责任。所有读者在使用本博客的信息时,应自行承担风险,并确保遵守当地法律法规。
我们鼓励所有读者合法地使用所提供的信息和技术,致力于维护安全和负责任的网络环境。
感谢您的理解与支持。