突发:宕机崩溃OOM

news/2024/10/14 10:51:59

突发:宕机崩溃OOM

 

事故背景:我们的项目每年都进行一次三级等保认证,2024年*月*日认证公司对我们的项目进行渗透测试时,我们系统出现无法访问和使用的情况。出现问题后我们联系认证公司停止测试,系统依然没有恢复。

事故分析: 

1. 出现问题后我第一时间检查了日志,发现了OOM

java.lang.OutOfMemoryError: Java heap space

at org.apache.tomcat.util.threads.TaskThreadFactory.newThread(TaskThreadFactory.java:42) 

由于没有dump日志所以不好排查OOM的原因,我便加上了启动参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/heapdump-9001.hprof 

然后联系对方公司再测试一遍 

  1. OOM再次出现,我拿到了heapdump-9001.hprof,开始用MemoryAnalyzer 进行分析,首先查看大对象(Dominator Tree)

 

大对象在这儿看,点进去发现最大的是 数据库相关

 

最大的这个对象有1个多G,有200多万条数据,都在内存里

 

 

怎么可能有200多万呢,肯定是查错了,难道SQL注入导致把数据库里所有数据都查出来了?

再去数据库查下,果然是所有数据:

  1. 再尝试找找代码是哪儿运行的,

 

点开LeakSuspects

 

找到

 

好多都是框架代码,我们尝试在里面找到 认识的业务相关代码: 

 

 

  1. 找到getFiles代码:

 

 

这里都是拼接的SQL,有SQL注入问题,应该就是这儿的问题了。

 

  1. 那么对方公司是怎么注入的呢,每个请求在Ngnix Acess日志里有记录,我尝试到Ngnix里查找日志,发现了 

/request?view&cgFormField=-1'%20OR%202%2B663-663-1=0%2B0%2B0%2B1%20or%20'BApebRcZ'='

 

添加日志发现 该参数传入后,SQL变成了这样:

 

 

注意两个or 之间 变成了 1=1 永恒true,也就导致把所有数据都查出来了。 

原因已经找到了,那么该如何解决呢,之前知道用预编译prepareStatement就行, 但这里的代码 不适合大动,查了下用StringEscapeUtils.escapeSql()  比较合适,改成这样

 

 

 

同样的参数再次测试

 

相当于整个字符串 是个value ,不会被恶意拆掉 

事故复盘:

查看了该处代码提交记录,很久之前就是这么写的,往年渗透测试时并没有测出来。比起追究责任,更重要的是给我们提醒:

  1. 注意SQL注入问题,不要拼接原生SQL,可以用上面的注入字符串自测。
  2. 每个应用都应该加上-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath,免得出现宕机无法复现,无法排查问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

java报“非法字符:\65279”

1.今天跑老的项目代码时,某个class文件报错非法字符:\65279”,再此记录下解决方式!错误原因:原因就在于某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),它的表示的是 Unicode 标记(BOM)…

AOT漫谈专题(第三篇): 如何获取C#程序的CPU利用率

一:背景 1. 讲故事 上篇聊到了如何对AOT程序进行轻量级的APM监控,有朋友问我如何获取AOT程序的CPU利用率,本来我觉得这是一个挺简单的问题,但一研究不是这么一回事,这篇我们简单的聊一聊。 二:如何获取CPU利用率 1. 认识cpuUtilization字段 熟悉.NET底层的朋友应该知道,…

【GIS前沿技术】什么是网格化(Gird)GIS?

文章目录 网格GIS的主要特点 网格GIS的优势 网格GIS工作原理 网格GIS实现技术 网格GIS是一种将地理空间数据组织成网格(格网)形式的地理信息系统。每个网格单元(通常称为“像元”或“格网单元”)代表特定的空间范围,具有固定的大小和形状。这种结构使得数据的存储、处理和…

请问公司网站如何修改电话

要修改公司网站上的联系电话,你可以按照以下步骤操作:登录网站后台:如果你的公司网站有CMS(内容管理系统)如WordPress或Drupal,你需要登录到该系统的管理后台。找到页面编辑器:在后台管理界面中,找到包含联系电话信息的页面,通常是“关于我们”、“联系我们”或者页脚…

公司网站修改_单位网站修改

为了帮助您更好地理解和执行公司或单位网站的修改工作,我将分步骤介绍一般性的网站修改流程和注意事项: 1. 确定修改目标明确网站需要改进的具体方面,如设计更新、功能增强、内容调整等。 收集用户反馈或分析现有数据来确定优先级。2. 规划与设计制定详细的修改计划,包括时…

怎么修改一个公司网站的网页?

要修改一个公司网站的网页,你可以按照以下步骤进行:获取权限:确保你有权限访问和修改网站的内容管理系统(CMS)或源代码。备份现有内容:在进行任何更改之前,先备份当前的网页文件或数据库内容,以防修改过程中出现问题。确定修改需求:明确你需要修改的具体内容,例如文本…

pdf添加水印

1.打开pdf转换器 2.在pdf工具编辑界面找到添加水印 3.点添加文件。将所需文件拖拽到此处 4.点击添加图片水印,找到所需的图片水印上传并调试水印所在位置,导出即可。

免费如何修改公司的网页 自己就能做个网站

要免费修改公司的网页或自己创建一个网站,可以遵循以下步骤:选择合适的工具:选择适合初学者且功能强大的免费网站建设工具,如Wix、WordPress.com或Google Sites。学习基础知识:学习HTML、CSS和JavaScript的基础知识。这些是网页设计的基本语言。 如果使用WordPress或其他C…