首页 > 其他分享 >hvv面试常见框架漏洞问题合集

hvv面试常见框架漏洞问题合集

时间:2023-06-12 20:22:38浏览次数:39  
标签:调用 框架 漏洞 攻击者 面试 OGNL 序列化 合集 hvv

1.thinkphp

特征判断

  1. 直接在url后加/?s=1
  2. 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在反序列化时实例化并执行恶意代码,从而导致远程代码执行漏洞

利用

  1. 攻击者构造一个恶意日志消息,其中包含一个恶意Java对象,其类名是恶意代码的类名。
  2. 攻击者向目标系统的Log42日志记录器发送恶意消息。
  3. Log42会在处理消息时,通过使用默认的反序列化器将消息数据反序列化成Java对象。
  4. 攻击者在恶意消息中,构造了一个使用了恶意代码类的对象。
  5. 在实例化对象时,恶意代码的类会被加载,并执行其中恶意代码,导致远程代码执行漏洞。
  6. 攻击者在目标系统上获得远程控制权限。

防护

  1. 添加jvm启动参数-D log4j2. formatmsgnolookups=true
  2. 在应用 classpath下添加log4j2 component properties配置文件,文件内容为1中的指令
  3. 部署使用第三方防火墙产品迸行安全防护。

4.fastjson框架

Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用 Java 做 Web 开发时,不可避免的会遇到 Json 的使用。
介绍:Fastjson是一个Java语言编写的高性能JSON处理框架,由阿里巴巴集团开发和维护。它提供了一种快速、灵活和方便的方式来处理JSON数据

框架特征

  1. 任意抓包,提交方式改为post,花括号不闭合,返回包回出现fastjson字样
  2. 没回显就构造payload放dnslog盲打(dnslog.cn)

反序列化漏洞(1.2.24)

原理:

利用fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。

5.struts2框架

框架特征:

  1. URL 中添加不存在路径:在 URL 的反斜杠部分添加网站不存在的路径,最好是随机字符串组成的较长路径,如果返回同样的页面,则大概率是 Struts2 框架

例如:URL/S2_016_war/barspace/aaaaaaaaaa1/bbbbbbbb2/ccccccccc3/ddddddddddddd4/login.action
因为按照 Struts2 框架规则,首先会在当前路径下找 action 名 login,如果没有找到去上一层找,还没有找到会去上上层找,一直找到应用程序的根路径为止。层层向上查找,直接找到应用程序为止。

  1. URL 添加 /struts/domTT.css,若返回css代码,则大概率strust2,domTT.css在Struts2 的 jar 包中
  2. 输入一个不存在路径,返回404,或者传入乱码,造成500报错,抛出异常(根据异常信息判断)Struts2 常用的关键字有:no action mapped、struts2、namespace、defined for action等。
    攻击特征:
  3. url攻击特征:...*.action?method | ?redirect:${...}
  4. Content-Type攻击特征:%{#context
  5. 报文攻击特征:#_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 解析可能会导致远程代码执行。

修复

  1. 通过给所有属性一个空白值 =“”
  2. 将 org.apache.commons.collection.BeanMap 添加到 Struts2 沙箱的 excludeClasses 列表将排除直接使用它
  3. 升级到最新版本

6.spring框架

框架特征

  1. url中添加不存在路径,spring框架会报错,他会含有whitelabel Error Page关键字
  2. 访问/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方法中将接收到的消息进行反序列化操作,从而导致任意代码执行。

标签:调用,框架,漏洞,攻击者,面试,OGNL,序列化,合集,hvv
From: https://www.cnblogs.com/Nuy0ah/p/17476023.html

相关文章

  • 最近面试题
    面试题1.业务流程的测试点2.考虑哪些异常场景3.余额怎么看4.余额存在网站上吗?5.产品出货你关吗?6.自动化怎么做的7.文本会检查哪些东西8.有没有检查过数据库9.做自动化时不会自动检查数据库吗?10.接口测试测什么11.怎么考虑接口案例12.接口案例是自己设计的吗?13.检查接......
  • C++面试八股文:如何在堆上和栈上分配一块内存?
    C++面试八股文:如何在堆上和栈上分配一块内存?某日二师兄参加XXX科技公司的C++工程师开发岗位6面:面试官:如何在堆上申请一块内存?二师兄:常用的方法有malloc,new等。面试官:两者有什么区别?二师兄:malloc是向操作系统申请一块内存,这块内存没有经过初始化,通常需要使用memset手......
  • 计算机体系结构面试题
    1、请解释什么是指令级并行(Instruction-LevelParallelism,ILP)并提供一个示例说明? 在计算机体系结构中,指令级并行是指同时执行多个计算机指令的能力,以提高程序的执行速度。这种并行性的实现通常涉及到在单个指令流中发现和执行多个独立指令的方法。示例:假设有以下三个指令:ADD......
  • 面试考代码,居然翻车了!
    你好,我是田哥今天早上,一位同学去现场面试,面试官现场写一段代码,请看代码:/***@author公众号:java后端技术全栈*@date2022年11月07日*/publicclassSolution{publicstaticvoidmain(String[]args){intcount=0;for(inti=0;i<10;i++......
  • 一场面试30多个题目,虚脱了!
    大家好,我是田哥最近这两年,因为受疫情影响,工作确实不好找。为了答谢你的关注,田哥整理最近7位朋友的面经,希望给正在准备面试或正在面试的你提供点小帮助。第一位朋友在杭州面试一家小厂,面经如下:1.项目介绍2.springboot和springMVC3.Spring和SpringBoot区别4.AOP动态代理5.......
  • 1009道面试题,想刷完,要多久?
    我的面试题网站,目前已更新到1009题了,今天对所有题目做一个汇总(后续还会继续优化,继续完善):Redis的数据类型有哪些?请简述一下JVM的内存模型说说堆和栈的区别说说你对CAP的理解你知道哪些分布式事务解决方案?什么是二阶段提交?什么是HTTP?HTTP的作用是什么?说说HTTP的优点和缺点什么是长......
  • 年后面试,给你提6点建议!
    你好,我是田哥转眼年底,很大部分人都在观望,甚至已经开始着手准备明年的面试了,不知道屏幕前的你是如何打算的?从现在开始,到明年三月份还有两个多月的时间,时间不多,但也不少了。只要自己好好准备,明年肯定有收获的。如何准备,准备哪些?我给你总结了6个方面:简历问题自我介绍问题项目介绍问题......
  • 第一次面试,面完,直接拒了!
    你好,我是田哥这是一位东北黑龙江同学的面经,也是他人生第一次面试经历。来看看他面试遇到了些什么问题,然后,你也可以先看看题目,看看自己能回答上来多少。面试问题1.自我介绍(就说了来自哪,想找java)(停顿一会儿)2.说一下你对java的了解?(大声)3.你对java锁机制了解多少。4.说一下单例模式5.M......
  • java刷题网站最近更新的面试题
    49个人中至少几个人生日是同一月?如何用3升和5升桶量取4升水?JVM逃逸分析默认是开启还是关闭?ZGC有缺点吗?JVM对Java的原生锁做了哪些优化?为什么wait(),notify()和notifyAll()必须在同步方法或者同步块中被调用?什么是锁消除和锁粗化?为什么代码会重排序?什么是自旋?你们线程池是怎......
  • C++面试八股文:在C++中,你知道哪些运算符?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第11面:面试官:在C++中,你都知道都哪些运算符?二师兄:啥?运算符?+-*/=这些算吗?面试官:嗯,还有其他的吗?二师兄:当然还有,+=,-=,*=,/=,==,还有逻辑运算,位运算等。面试官:好的。那你知道这些运算的优先级吗?二师兄:(面试官傻逼吧,这谁记得住)记不住......