常见webshell管理工具交互流量特征都有哪些?
菜刀特征:
默认的webshell连接密码都是caidao ,ua头位百度爬虫,请求体中存在eval,base64登特征关键字,webshell流量参数默认z0
冰蝎特征:
在建立链接之前会有一个 AES 密钥交互过程,body体中都是 AES 加密后密文
冰蝎2.0 建立连接后 所有请求 **Cookie的格式都为: Cookie: PHPSESSID=; path=/;**
冰蝎3.0 默认16个U-A头 Content-Type:application/ octet-stream
冰蝎4:内置10 u-a头,accept:application/json,text/javascript;*/*;q=0.01;
Content-Type:application/x-www-form-urlencoded
蚁剑特征:PHP类 WebShell流量最中明显的特征为 @ini_set ("display_errors","0");
哥斯拉特征:不修改User-Agent,User-Agent会类似于Java/1.8.0_121(具体什么版本取决于JDK环境版本)在请求包的Cookie中有一个非常致命的特征,最后的分号标准的HTTP请求中最后一个Cookie的值是不应该出现;的
请求包特征:“pass=”起始 ,请求包较长,响应包为0
内存马
内存马是指一种只在内存中运行,没有文件落地或者运行后能够删除自身的木马。
内存马分类:
PHP内存马
php不死马是通过内存马启动后删除文件本身之前,使代码在内存中执行死循环,使管理员无法删除内存马,达到权限维持的目的。
Python内存马
利用flask框架中存在的ssti注入来实现内存修改的,具体是通过flask框架存在应用模板渲染过程的render_template_string()函数,在进行渲染但未对用户传输的代码进行过滤导致用户可以通过注入恶意代码来实现python内存马的注入。
Java内存马
在Java程序中,客户端发起的web请求会依次经过Listener、Filter、Servlet三个组件,Java内存马的原理即在客户端发起web请求的这个过程中对内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode,从而达到我们的目的。
内存马如何排查:
先判断是通过什么方法注入的内存马,可以先查看web日志是否有可疑的web访问日志,如果是filter或者listener类型就会有大量url请求路径相同 参数不同的,或者页面不存在但是返回200的,查看是否有类似哥斯拉、冰蝎相同的url请求,哥斯拉和冰蝎的内存马注入流量特征与普通webshell的流量特征基本吻合。通过查找返回200的url路径对比web目录下是否真实存在文件,如不存在大概率为内存马。如在web日志中并未发现异常,可以排查是否为中间件漏洞导致代码执行注入内存马,排查中间件的error.log日志查看是否有可疑的报错,根据注入时间和方法根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。
shiro反序列化漏洞原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,
先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe
Cookie值在整个漏洞利用过程中,比较重要的是AES加密的密钥
如果没有修改默认的密钥那么就很容易就知道密钥了。
shiro550与shiro721的区别:
1、这两个漏洞主要区别在于Shiro550使用已知密钥碰撞,只要有足够密钥库(条件较低),不需要Remember Cookie
2、Shiro721的ase加密的key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造RememberMe Cookie值来实现反序列化漏洞攻击,难度较高
流量层分析shiro反序列化是否攻击成功
1.在HTTP请求头Cookie里出现rememberMe字段以及可能出现自定义类型例如c: aWQ=,响应体中出现大量编码字符串,若需要判断是否攻击成功,
需对请求数据和响应体内容进行解密判断
2. 检查请求头中的"rememberMe" cookie。攻击者可能会在此处插入恶意序列化数据
3. 观察服务器响应。如果服务器返回了异常错误信息,如Java反序列化异常,可能表明攻击成功
分析应用程序日志:如果日志中出现了异常堆栈跟踪,可能表明攻击成功
例如,攻击者发送了一个包含恶意序列化数据的请求,服务器响应了一个包含Java反序列化异常的错误信息这可能表明攻击成功。
在发生命令执行攻击时,如何判断是struts2漏洞执行命令?
1. 在请求头中存在OGNL表达式,一般在url中会出现的攻击特征主要是:.action?method | ?redirect:$ 在conten-type中出现的攻击特征主要有:%{#context 、在报文体中出现的攻击特征主要有:#_memberAccess 等
2. 判断请求中是否包含特定的 Struts2 关键字,如"method:"、"redirect:"等,这些关键字可能是用于执行命令的操作;
3. 检查请求中是否包含"Content-Type"头字段,并且值为"application/x-www-form-urlencoded",这是 Struts2 框架默认的 Content-Type 值,用于处理 POST 请求
4. 检查请求参数中是否包含OGNL表达式,如"${}"、"%{}"等字符;
5. 检查请求是否包含一个名为"class"的参数,值为"java.lang.Runtime",这个参数可以用于执行系统命令
如何在流量层面分析struts2命令执行是否成功
1.查看请求头或请求体中是否含有OGNL表达式,Struts2 命令执行的原理是通过 ognl 表达式执行 java 代码
2.查看请求头或请求体中是否存在命令执行类代码
3.查看响应体是否返回上述命令执行的结果
威胁情报类告警产生误报的原因是什么?
1、防火墙、邮件网关有发起黑域名解析的行为可能是误报
2、威胁情报失效了
如何分析文件上传告警是否攻击成功?
1、查看响应体响应结果判断服务器是否接受了该上传请求,上传成功通常状态码为200,查看响应体中是否响应了上传路径,访问该上传路径查看文件是否被解析是否存在
2、通过查看态势感知日志判断文件是否落地3、登陆受害者主机全局搜索上传文件
如何判断Cobalt Strike攻击流量?
1、http-beacon通信中,默认使用get方法向/dpixel、/__utm.gif、/pixel.gif等地址发起请求,同时请求头存在cookie字段并且值为base64编码
2、dns-beacon通信中,默认使用cdn.、www6.、api.、www.、post.为开头发起dns请求,并且查询结果伴随0.0.0.0、0.0.0.80、0.0.0.241等非常规IP
3、心跳包间隔一定时间,均有通信,且流级上的上下行数据长度固定
4、常见User-Agent:Cobalt Strike通常使用自定义的User-Agent字符串,例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) Cobalt Strike
5、命令和控制流量:Cobalt Strike的HTTP请求中可能包含与C2服务器通信的命令和控制信息,这些信息在正常的Web请求中不会出现。
发生挖矿木马事件通过流量层面如何判断真实性?
1. 通信端口:挖矿木马可能会使用特定的端口进行通信。例如,Monero挖矿木马通常会使用TCP端口3333或5555进行通信
2. 通信流量:挖矿木马的通信流量可能会具有特定的特征,例如大量的高速数据传输和周期性的通信,在数据包中可以看到大量的计算资源使用信息和挖矿结果信息
3. 进程和文件系统:挖矿木马可能会创建特定的进程和文件来执行挖矿操作。例如,Monero挖矿木马通常会在操作系统上创建名为"xmrig"的进程,并在文件系统上创建名为"config.json"的配置文件
4. 系统资源:挖矿木马可能会占用系统资源,例如CPU和内存,并可能导致系统崩溃或变得缓慢。
5. 判断流量的数据:挖矿木马通常会在通信中发送一些特定的数据,例如挖矿难度、钱包地址、挖矿程序版本等如果流量中存在这些数据,就可能存在挖矿木马
6. 看数据包的详细信息,看终端或者服务器是否有与矿池交互的信息,判断是否存在登录到矿池(method“:”login“)、从矿池接收任务(”method“:”job“)字段,在载荷内容中是否存在ok、success等字段
Apache Log4j2 远程代码执行漏洞原理?
Apache Log4j2 框架中存在一个名为 JNDI Lookup 的功能,它允许通过配置文件中的 JNDI 名称引用外部资源。攻击者构造一个特殊的日志消息,其中包含恶意的 JNDI 名称,并通过网络发送给受影响的应用程序。当应用程序使用 Log4j2 框架解析日志消息时,它会尝试查找和引用该 JNDI 名称。如果恶意的 JNDI 名称指向一个恶意的远程资源,例如恶意的 LDAP 服务器或 RMI 服务,攻击者可以控制该远程资源的内容和行为。攻击者可以在恶意的远程资源中注入恶意代码,并在目标系统上执行任意命令或获取敏感信息。
流量层面分析Apache Log4j2 远程代码执行漏洞是否攻击成功
1、dnslog类:查看是否存在源ip与dnslog的外联日志记录
2、命令执行攻击
有回显:响应体中存在命令执行结果
无回显 :存在源ip与ldap服务ip的外联日志记录
已知攻击者IP,如何溯源定位攻击人员?
1、IP反查注册信息,可能会查询到域名,通过域名查询备案和whois信息,可能会查出邮箱电话,通过社工库查询相关邮箱和电话信息定位人员支付宝,微信转账;微博,百度贴吧等
安全设备发现一台Linux主机触发挖矿告警,上机排查该机器执行ps,top命令未发现挖矿及恶意进程,现在怀疑ps,top命令被替换,请问应该如何处理?
1、使用cat /etc/ld.so.preload命令查看动态链接库文件是否加载有so文件,提取加载的so文件上传至威胁情报平台,判断是否为恶意so文件
2、清除so文件,使用ldconfig命令重新加载动态链接库,执行ps,top命令查看是否可以发现挖矿进程信息
3. 确认ps和top命令是否被替换:可以使用命令"which ps"和"which top"查看这两个命令的路径是否为系统默认路径"/bin/ps"和"/usr/bin/top",如果不是则说明被替换。也可以通过比较ps和top命令的md5值来判断是否一致。2. 确认动态链接库是否被劫持:可以使用命令"ldd /bin/ps"和"ldd /usr/bin/top"查看这两个命令依赖的动态链接库是否正常,如果有动态链接库被替换,则会发现其中一些动态链接库路径不对
4. 恢复被替换的命令和动态链接库:如果确认被替换,可以从系统安装介质或官方网站上下载对应版本的ps和top命令和动态链接库,替换掉被替换的文件即可。
5. 检查系统安全:替换命令和动态链接库只是暂时的措施,需要进一步排查系统安全状况,比如查杀恶意程序、加强访问控制、更新系统补丁等,以防止类似问题再次发生
6. 借助工具busybox
如何分析排查钓鱼邮件事件?
1.确认邮箱批量发送时间点
2.排查邮箱登录日志,发现【恶意IP】在【什么时间】通过web登录成功;
3.查看邮件内容,确认钓鱼邮件的影响和目的;
4.排查浏览器或上网行为,判断是否访问过钓鱼页面;
5.对访问过的设备进行全盘查杀
分析邮件头部:查看邮件的原始头部信息检查发件人的真实地址、邮件服务器的来源、邮件传输路径等注意查看"Received"字段,查看是否存在异常的邮件转发或代理分析链接与附件,添加至黑名单查看有多少内网ip访问过这个链接或者ip,双向排查
如何研判sql注入类型告警事件?
1.排除302、404、301、502,非200状态码
2.判断请求包内相关的sql语句是否为恶意的SQL语句
3.判断响应体内是否包含数据库敏感信息,或者系统信息。
如何研判JBOSS 反序列化漏洞攻击成功?
1.在访问JBOSS漏洞页面/invoker/readonly后,返回值为500
2.请求体有llections.map.LazyMap、keyvalue.TiedMapEntry攻击链特征并且有明显的命令执行行为比如whoami
3.在返回500 堆栈报错页面内容中包含了系统返回内容 比如系统用户:root
如何研判Fastjson反序列化漏洞攻击成功
1.请求头:method: POST content_type: application/json
2.请求体:data:com.sun.rowset.JdbcRowSetImpl,dataSourceName,@type
3.请求体: 包含攻击者C2服务器地址
4.状态码为:400 也可能是500
5.通过态势感知平台进行回溯分析,在分析中心输入语法:(sip:(失陷服务器IP) OR sip:(攻击者C2IP)) AND (dip:(失陷服务器IP) OR dip:(攻击者C2IP))