hvv面试常见框架漏洞问题合集
1.thinkphp
特征判断
- 直接在url后加/?s=1
- whatweb进行探测,方式:whatweb URL
漏洞
5.0 RCE
原理
thinkphp底层没有对控制器名进行很好的合法性校验,导致在未开启强制路由的情况下,没有对""进行过滤,用户可以调用任意类的任意方法,最终导致远程代码执行漏洞的产生
think PHP 5 SQL注入漏洞和敏感信息泄露漏洞
传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。
2.shiro 框架
shiro550
原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的Cookie,在服务端对rememberMe的Cookie值先base64解码然后AES解密再反序列化(AES是硬编码的),就导致了反序列化RCE漏洞。
特征
在返回包的Set-Cookie中存在rememberMe=deleteMe 字段
shiro721
原理
Apache Shiro RememberMe Cookie默认通过AES-128-CBC模式加密,这种加密方式容易受到Padding Oracle Attack(Oracle填充攻击),利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击
复现
先使用合法账号进行登录勾选remember Me然后使用bp抓包,
然后获取到cookie,将remember me字段复制下利用工具生成恶意的rememberme
550和721区别
550不需要登录,721需要登录获取正确的cookie,550是因为aes密钥是硬编码,所以直接可以构造payload,而721是利用Oracle填充攻击,将正确的cookie作为攻击前缀从而生成攻击payload
利用漏洞时550只需要一个url就可以利用工具实现检测和攻击,721需输入url,提供一个有效的rememberMe Cookie
3.log4j框架
Log4j是一个Java日志框架,用于生成日志信息,可以帮助开发者进行调试和问题排查。它可以生成不同级别的日志信息,并可以将日志信息输出到不同的目标,如控制台、文件或数据库等
特征:
${jndi :ldap(rmi)://url}
原理
Log4j2解析用户输入的消息时,未能对消息内容进行正确的过滤和检测,导致了恶意代码的注入。攻击者可以通过在用户输入中注入恶意对象和类名,触发Log4j2在反序列化时实例化并执行恶意代码,从而导致远程代码执行漏洞
利用
- 攻击者构造一个恶意日志消息,其中包含一个恶意Java对象,其类名是恶意代码的类名。
- 攻击者向目标系统的Log42日志记录器发送恶意消息。
- Log42会在处理消息时,通过使用默认的反序列化器将消息数据反序列化成Java对象。
- 攻击者在恶意消息中,构造了一个使用了恶意代码类的对象。
- 在实例化对象时,恶意代码的类会被加载,并执行其中恶意代码,导致远程代码执行漏洞。
- 攻击者在目标系统上获得远程控制权限。
防护
- 添加jvm启动参数-D log4j2. formatmsgnolookups=true
- 在应用 classpath下添加log4j2 component properties配置文件,文件内容为1中的指令
- 部署使用第三方防火墙产品迸行安全防护。
4.fastjson框架
Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用 Java 做 Web 开发时,不可避免的会遇到 Json 的使用。
介绍:Fastjson是一个Java语言编写的高性能JSON处理框架,由阿里巴巴集团开发和维护。它提供了一种快速、灵活和方便的方式来处理JSON数据
框架特征
- 任意抓包,提交方式改为post,花括号不闭合,返回包回出现fastjson字样
- 没回显就构造payload放dnslog盲打(dnslog.cn)
反序列化漏洞(1.2.24)
原理:
利用fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。
5.struts2框架
框架特征:
- URL 中添加不存在路径:在 URL 的反斜杠部分添加网站不存在的路径,最好是随机字符串组成的较长路径,如果返回同样的页面,则大概率是 Struts2 框架
例如:URL/S2_016_war/barspace/aaaaaaaaaa1/bbbbbbbb2/ccccccccc3/ddddddddddddd4/login.action
因为按照 Struts2 框架规则,首先会在当前路径下找 action 名 login,如果没有找到去上一层找,还没有找到会去上上层找,一直找到应用程序的根路径为止。层层向上查找,直接找到应用程序为止。
- URL 添加 /struts/domTT.css,若返回css代码,则大概率strust2,domTT.css在Struts2 的 jar 包中
- 输入一个不存在路径,返回404,或者传入乱码,造成500报错,抛出异常(根据异常信息判断)Struts2 常用的关键字有:no action mapped、struts2、namespace、defined for action等。
攻击特征: - url攻击特征:...*.action?method | ?redirect:${...}
- Content-Type攻击特征:%{#context
- 报文攻击特征:#_memberAccess
s2-048 RCE
原理:问题在struts2-struts1-plugin这个插件包上。这个库的主要作用就是将struts1的action封装成struts2的action以便它能在strut2上运行使用。
而由于struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute函数可以调用 getText() 函数,这个函数刚好又能执行OGNL表达式,同时这个 getText() 的 参数输入点,又可以被用户直接进行控制,如果这个点被恶意攻击者所控制,就可以构造恶意执行代码,从而实现一个RCE攻击。
OGNL表达式
是对象图导航语言,功能强大的表达式语言,通过简单的表达式语言,就可以存取对象的任意属性,调用对象的方法
关键特点和用法示例:
1.导航对象图:OGNL允许通过点号(.)来导航对象图的属性和方法。例如,person.name表示访问person对象的name属性。
2.访问集合和数组:OGNL支持对集合和数组进行访问和操作。可以使用方括号([])来获取集合或数组的元素,例如,list[0]表示获取列表的第一个元素。
3.方法调用:OGNL允许调用对象的方法,并传递参数。例如,person.getName()表示调用person对象的getName()方法。
4.表达式计算:OGNL支持在表达式中执行算术运算、逻辑运算、比较运算等。例如,age > 18 && age < 60表示判断age是否大于18且小于60。
5.条件判断:OGNL支持条件判断,可以使用三元表达式(? :)来实现条件判断。例如,score >= 60 ? "Pass" : "Fail"表示如果score大于等于60,则返回"Pass",否则返回"Fail"。
6.调用静态方法和访问静态字段:OGNL支持调用静态方法和访问静态字段。可以使用@符号来指示静态方法和静态字段。例如,@java.lang.Math.abs(-5)表示调用Math类的静态方法abs()。6.调用静态方法和访问静态字段:OGNL支持调用静态方法和访问静态字段。可以使用@符号来指示静态方法和静态字段。例如,@java.lang.Math.abs(-5)表示调用Math类的静态方法abs()。
s2-062 RCE
原理:
开发人员使用%{…} 语法进行强制 OGNL 解析,有一些特殊的TAG属性可以执行二次解析。对不受信任的用户输入使用强制 OGNL 解析可能会导致远程代码执行。
修复
- 通过给所有属性一个空白值 =“”
- 将 org.apache.commons.collection.BeanMap 添加到 Struts2 沙箱的 excludeClasses 列表将排除直接使用它
- 升级到最新版本
6.spring框架
框架特征
- url中添加不存在路径,spring框架会报错,他会含有whitelabel Error Page关键字
- 访问/oauth/authorize路径 favicon.ico spring是一片小绿叶
Framework反序列化漏洞(CVE-2017-8047):
在Spring Framework中,如果应用程序未正确处理反序列化操作,攻击者可以通过构造恶意的序列化数据,执行任意代码。
AMQP远程命令执行漏洞(CVE-2017-8045):
原理
在Spring AMQP的Message类中,如果应用程序未正确配置(前置条件:将请求的ContentType设置为application/x-java-serialized-object),攻击者可以通过构造恶意的AMQP消息,使得getBodyContentAsString方法中将接收到的消息进行反序列化操作,从而导致任意代码执行。
hvv面试常见框架漏洞问题合集的更多相关文章
- Java 分布式框架面试题合集
Java 分布式框架面试题合集 1.什么是 ZooKeeper? 答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案.设计目的是将那些复杂且容易出错的分布 ...
- C++常见问题解答博客合集
1 关于宏 https://blog.csdn.net/hanchaoman/article/details/8809951
- Java中常见方法详解合集(方法的定义及语法结构)
Java的方法定义 1.方法的定义 方法是控制对象的动作行为方式与准则,在Java中方法位于类体下又有另一种含义. 普通的方法在类中称为"实例方法",因为方法的调用需要创建对象,而 ...
- struts2漏洞复现分析合集
struts2漏洞复现合集 环境准备 tomcat安装 漏洞代码取自vulhub,使用idea进行远程调试 struts2远程调试 catalina.bat jpda start 开启debug模式, ...
- LeetCode面试常见100题( TOP 100 Liked Questions)
LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题 ...
- Java学习、面试、求职、干货资源精品合集
本系列文章整合了本号发表和转载过的,有关Java学习.进阶.面试.做项目.求职经验等方面的文章,希望对想要找工作,以及正在找工作的你,能够有所帮助. 原创Java学习专题文章: 如何才能够系统地学习J ...
- 小程序框架WePY 从入门到放弃踩坑合集
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集
Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
随机推荐
- 红队实战靶场ATT&CK(二)
一.环境配置 web靶机有一块NAT网卡,只需要修改这块NAT网卡的网关,IP改成与攻击机器同网段就可以了 到web靶机中C:/Oracle/Middleware/user_projects/doma ...
- python入门教程之九日期时间常用操作
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. Py ...
- [Linux/Java SE]查看JAR包内的类 | JAR 命令 | 反编译
1 查看JAR包内的类 另一个思路: 解压JAR包jar -xf <jarPath> 1-1 单JAR包 -t list table of contents for archive(列出存 ...
- 多态 polymorphic
多态是同一个行为具有多个不同表现形式,多态实现需要以下条件 继承父类并重写方法 父类引用指向子类对象:Animal a = new Cat(); 多态实例: //测试类 public class Te ...
- UESTC__ACM 1264 人民币的构造
链接地址:https://acm.uestc.edu.cn/contest/198/problem/J 我们都知道人民币的面值是1.2.5.10,为什么是这个数值呢,我们分析了下发现,从1~10的每个 ...
- JUC(二)线程间通信
目录 线程间通信 多线程编程步骤 一个加减实例 & 虚假唤醒问题 Lock接口实现 lock.newCondition设置等待条件 线程间定制化通信 线程间通信案例 设置标志位 线程间通信 多 ...
- 使用Go语言操作HDFS
HDFS(Hadoop分布式文件系统)是Hadoop生态系统的一部分,它是一个可扩展的分布式文件系统,被设计用于在大规模数据集上运行的应用程序 安装相关package: $ go get github ...
- Go语言实现基于HTTP的内存缓存服务
所有的缓存数据都存储在服务器的内存中,因此重启服务器会导致数据丢失,基于HTTP通信会将使开发变得简单,但性能不会太好 缓存服务接口 本程序采用REST接口,支持设置(Set).获取(Get)和删除( ...
- Python NumPy 广播(Broadcast)
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...
- vue+vant项目中 rem适配配置
vant rem适配,需要安装两个插件 postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem lib-flexible 用于设置 rem 基准值 postcss-px ...