hvv面试常问的几个漏洞

发布时间 2023-07-18 13:37:28作者: B0like

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指定一个想要攻击类库就可以实现攻击