首页 > 其他分享 >hvv面试常问的几个漏洞

hvv面试常问的几个漏洞

时间:2023-07-18 13:45:10浏览次数:36  
标签:常问 漏洞 S2 面试 OGNL Java 序列化 表达式 hvv

hvv面试常问的几个漏洞

一、Struts2

1.1 简介

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

1.2 S2-001 漏洞原理

该漏洞因用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。如注册或登录页面,提交失败后一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL表达式解析,所以可以直接构造payload进行命令执行。

1.3 S2-005 漏洞原理

S2-005 起源于S2-003 ,struts2会将http的每个参数名解析为OGNL语句执行。OGNL表达式通过#来访问struts2对象,struts框架通过过滤#字符防止安全问题,然后通过unicode编码或8进制即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置来修补,但是安全配置被绕过导致漏洞,攻击者可以利用OGNL表达式将这两个选项打开。

1.4 S2-007 漏洞原理

age来自于用户输入,传递一个非整数给id导致错误,struts会将用户的输入当作ongl表达式执行,从而导致了漏洞。

struts2框架的漏洞通常由于OGNL表达式可以由用户控制而产生

二、log4j

2.1 简介

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,我们可以控制每条日志的输出格式;只需要通过一个配置文件就可以灵活的配置,而不需要修改任何代码。

2.2 漏洞原理

log4j中有一个lookup接口,它可以在输出日志的时候,通过某种方式去查找要输出的内容。

lookup会将${}中的字段直接解析。例如${java:version}会被替换为对应的java版本。攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。

三、Fastjson

3.1 简介

fastjson 是一个 有阿里开发的一个开源Java 类库,可以将 Java 对象转换为 JSON 格式(序列化),当然它也可以将 JSON 字符串转换为 Java 对象(反序列化)。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象

3.2 漏洞原理

fastjson漏洞的本质还是一个反序列化漏洞,由于引用了AutoType功能,fastjson在对json字符串反序列化的时候,会读取到@type的内容,将json内容反序列化为java对象并调用这个类的setter方法。

@type的类可以被恶意构造,只要合理构造一个json,使@type指定一个想要攻击类库就可以实现攻击

标签:常问,漏洞,S2,面试,OGNL,Java,序列化,表达式,hvv
From: https://www.cnblogs.com/B0like/p/17562691.html

相关文章

  • 面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
    你好呀,我是歪歪。这篇文章带大家盘一个读者遇到的面试题哈。根据读者转述,面试官的原问题就是:一个SpringBoot项目能同时处理多少请求?不知道你听到这个问题之后的第一反应是什么。我大概知道他要问的是哪个方向,但是对于这种只有一句话的面试题,我的第一反应是:会不会有坑?所以并......
  • 2023-07面试题
    1,spring中有哪些方式可以把bean注册进ioc容器?①使用xml的方式声明bean的定义,spring容器在启动时会加载和解析这个xml,把bean装载进ioc容器中。②使用@ComponentScan注解去扫描声明了@Controller@Service@Repository@Component注解的类,然后把这些类加载进ioc容器。③使用@Conf......
  • 字典,元组,元组内置方法、相关面试题 、 集合的内置方法 、字符编码 、文件操作 、函数
    字典的内置方法1.定义方式 d={'usernamne':"kevin"}#定义空字典d={}info=dict(username='kevin',age=18)#{'username':'kevin','age':18} print(info) #dic={#'name':�......
  • sun.misc.BASE64Decoder包异常问题处理
    之前有一个用的是jdk1.7的,最近导入发现各种报错。sun.misc.BASE64Decoder包找不到了,解决:展开后,找到Accessrules:,增加**,然后保存就可以生效。 ......
  • java真实业务场景面试题
    Java真实业务场景面试题Java是一种广泛使用的面向对象编程语言,在各个行业中都有广泛的应用。因此,在Java开发人员的面试中,经常会涉及到一些与真实业务场景相关的问题。本文将为您介绍一些常见的Java真实业务场景面试题,并提供相应的代码示例。1.数据库连接池数据库连接池是Java中......
  • Python 全栈工程师必备面试题 300 道(2020 版)
    2020元旦巨献,面试升级必备!献给正在学习Python的同学!Python全栈工程师必备面试题300道(2020版)Python面试不仅需要掌握Python基础知识和高级语法,还会涉及网络编程、web前端后端、数据库、网络爬虫、数据解析、数据分析和数据可视化等各方面的核心知识。针对网上资料参差不齐,并......
  • 10个最常见的HTML5面试题及答案
    1、新的HTML5文档类型和字符集是?HTML5文档类型很简单:<!doctypehtml>HTML5使用UTF-8编码示例:<metacharset=”UTF-8″>2、HTML5中如何嵌入音频?HTML5支持MP3、Wav和Ogg格式的音频,下面是在网页中嵌入音频的简单示例:<audiocontrols><sourcesrc=”jamshed.m......
  • Linux网络配置常用的基础命令(面试也经常提到)
    Linux网络配置常用的基础命令原创 weijishu 微技术之家 2023-07-1407:07 发表于上海通常情况下,不管什么操作系统,配置IP地址分为如下两类:动态DHCP模式:系统默认是DHCP也就是动态获取IP地址,这种有个坏处就是IP地址会经常变换。如果用连接工具的话,IP地址改变之后需要重......
  • Redis面试二
    1、有MySQL不就用了吗?为什么要用Redis这种新的数据库?主要是因为Redis具备高性能和高并发的两种特性。高性能:假如用户第一次访问数据库中的某些数据。这个过程比较慢,因为是从硬盘上读取的。该用户访问的数据缓存中,这样下一次再访问这些数据的时候就可以直接从获取了。操作缓存就是直......
  • #yyds干货盘点# LeetCode程序员面试金典:分数到小数
    题目:给定两个整数,分别表示分数的分子 numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回任意一个。对于所有给定的输入,保证答案字符串的长度小于104。 示例1:输入:numerator=1,denominator......