1. SQL注入攻击
SQL注入攻击是一种常见的网络安全威胁,它利用Web应用程序中对用户输入的数据的不正确处理,攻击者可以在SQL查询中注入恶意代码,从而执行非授权的数据库操作。这种攻击方式可以导致数据泄漏、数据篡改、绕过认证等多种安全问题。
2.XSS攻击(跨站脚本攻击)
跨站脚本攻击(Cross-Site Scripting,常缩写为XSS)在网页中嵌入客户端恶意脚本,常用s语言,也会用其他脚本语言。属于客户端攻击,受害者是用户,包括网站管理员,攻击者一般靠管理员身份作为跳板。
3.CSRF攻击(跨站请求伪造攻击)
跨站请求伪造(Cross-Site Request Frogery,长缩写为CSRF),攻击者通过欺骗手段诱使用户在不知情的情况下,在其已经登录的Web应用程序上执行非预期的操作。程序在开发的时候,未对相关页面进行token和REFERER判断,造成攻击者可构造自己的URL地址欺骗目标用户进行点击。
4.文件上传漏洞
文件上传漏洞是指Web应用在处理用户上传的文件时,由于没有正确的验证或限制上传的文件类型、大小或内容,导致恶意文件被上传到服务器并执行,从而引发安全问题的一种漏洞。
5. DDos攻击(分布式拒绝服务攻击)
分布式拒绝服务攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDos攻击,从而成倍的提高拒绝服务攻击的威力。
6. 逻辑漏洞攻击
逻辑漏洞是由于程序逻辑设计上的缺陷导致的安全问题,攻击者可以利用这些缺陷来绕过正常的业务逻辑。
7.XXE漏洞攻击(XML外部实体注入漏洞漏洞攻击)
XXE漏洞是一种影响处理XML数据的应用程序的安全问题。攻击者可以利用这些漏洞来读取服务器上的文件、执行系统命令、发起拒绝服务攻击(Dos)、探测内网端口、攻击内网网站等。XML文档可以定义实体,而外部实体的内容在XML文档外部,当应用程序没有正确限制外部实体的使用时,就可能触发XXE漏洞。
8. SSRF漏洞攻击(服务器端请求伪造攻击)
SSRF(Server-Side Request Forgery)是一种网络安全漏洞,允许攻击者利用服务器端的应用程序向攻击者指定的服务器发起请求。这种漏洞通常用于攻击那些无法从外网上直接访问的内部系统。SSRF漏洞的形成主要是由于服务器端提供了从其他服务器获取数据的功能,但没有对目标地址进行过滤与限制。
9. 网络安全漏洞梳理
|----------------|---------------------------------|------------------|-------------------------------------|
| 网络安全漏洞 | 定义 | 攻击方式 | 攻击原理 |
| SQL注入 | 通过在输入字段中插入恶意SQL代码,攻击者可以操纵后端数据库。 | 提交恶意输入到表单或URL参数 | 利用应用程序对输入数据的不充分过滤,执行未授权的SQL命令。 |
| 跨站脚本攻击(XSS) | 攻击者将恶意脚本注入到网页中,其他用户访问时脚本执行 | 注入脚本到用户输入或URL参数 | 利用网页对用户输入的不过滤或不转义,使恶意脚本在其他用户浏览器中执行。 |
| 跨站请求伪造(CSRF) | 攻击者利用用户的登录状态,强制用户浏览器执行非自愿的操作。 | 通过第三方网站发送恶意请求 | 利用Web应用未充分验证请求来源,执行用户身份下的非法操纵。 |
| 服务器端请求伪造(SSRF) | 攻击者利用服务器发起的请求来访问或操作内部系统。 | 构造恶意请求让那个服务器执行 | 服务器对请求的目标不限制,允许访问不应访问的资源。 |
| XML外部实体注入(XXE) | 攻击者通过XML输入,使解析器读取外部文件或资源。 | 提交包含外部实体引用的XML数据 | 应用程序允许XML文档包含对外部实体的饮用,导致信息泄露或拒绝服务。 |
| 远程命令/代码执行(RCE) | 攻击者在远程服务器上执行任意的命令或代码。 | 通过应用程序的漏洞提交恶意输入 | 应用程序未正确处理用户输入,允许执行系统命令或代码。 |
| 反序列化漏洞 | 攻击者通过修改序列化数据来执行恶意代码。 | 提交修改后的序列化对象 | 应用程序未安全的处理反序列化过程,允许执行恶意构造的对象。 |
| 安全配置缺陷 | 由于配置不当导致的安全漏洞。 | 利用配置不当进行攻击 | 系统或应用的配置未遵循安全最佳实践,留下安全漏洞。 |
通俗解释:
- SQL注入:你在和一个自动回复的机器人对话,你输入"我喜欢苹果",她回答"你选择了苹果"。但如果你说"我喜欢苹果';删除所有水果;--",它不仅告诉你选择了苹果,还执行了删除所有水果的命令。这就是SQL注入,攻击者通过输入特殊代码让数据库执行额外的命令。
- 跨站脚本攻击(XSS):你在社交平台上看到了一个视频链接,点进去后却发现这是一个恶作剧,它在你的账户上发布了一些垃圾信息。XSS就是攻击者在网站上放置的恶意代码,当其他用户访问网站时,这些代码就会在他们的浏览器上执行。
- 跨站请求伪造(CSRF):你在银行上有一个账户,登陆后没有登出。然后你访问了一个恶意网站,这个网站向你的银行发送了一个转账请求,因为你还处于登陆状态,银行就会执行这个请求。CSRF攻击就是利用已经登陆的状态,让网站在你不知情的情况下代表你发送请求。
- 服务器端请求伪造(SSRF):你有一个可以向任何人发送请求的助手,但这个助手被黑客利用了,他让助手去查看你的私人邮箱或其他内部系统。SSRF攻击就是攻击者让服务器去请求访问不应该访问的内部资源。
- XML外部实体注入(XXE):你有一个可以读取电子书的阅读器,但这个阅读器不进读了你指定的书籍,还读取了你电脑上的其他文件。XXE攻击就是攻击者让应用程序读取或访问不应该访问的文件或资源。
- 远程命令/代码执行(RCE):你有一个可以远程控制的玩具车,但这个玩具车的遥控器被黑客拿到了,他现在可以控制玩具车去任何地方。RCE攻击就是攻击者通过漏洞控制服务器执行他们想要的命令或代码。
- 反序列化漏洞:你有一个可以保存游戏进度的设备,但这个设备被黑客修改了,当你加载保存的游戏进度时,游戏突然变的不一样了。反序列化漏洞就是攻击者修改了应用程序保存的状态,当你再次加载这个状态时,执行了攻击者的代码。
10.网络安全威胁梳理
- 文件上传漏洞:这种漏洞发生在Web应用允许用户上传文件时,如果上传的文件类型没有得到正确的限制或检查,攻击者可能上传恶意文件,如可执行文件或脚本,从而获得对服务器的控制或执行其他攻击。
- DDos(分布式拒绝服务):DDos是一种通过大量流量或请求来压垮服务器或网络,使其无法响应合法用户的请求的攻击方式。这种攻击通常设计多个来源,使得单个源头难以追踪。
- 恶意软件(Malware):包括病毒、蠕虫、特洛伊木马等,它们可以破坏、窃取或加密数据,或在不知情的情况下使用受感染的系统进行非法活动。
- 钓鱼攻击(Phishing):通过伪造的电子邮件、网站等手段诱骗用户提供敏感信息,如密码、信用卡信息等。
- 中间人攻击(Man-in-the-Middle,MITM):攻击者截获并可能修改两个当事方之间的通信,而不被双方察觉。
- 零日漏洞(Zero-day exploit):利用软件中未知的漏洞进行攻击,软件的开发者和用户在攻击发生前都不知道这个漏洞的存在。
- 社交工程(Social Engineering):通过心理操纵手段诱使人们泄露敏感信息或执行某些操作。
- 内部威胁(Inside Thread):来自组织内部人员的威胁,可能是恶意的员工或被外部攻击者操纵的内部人员。
- 数据泄露(Date Breach):未经授权的访问、窃取或破坏敏感数据。
- 勒索软件(Ransomware):一种恶意软件,它加密受害者的文件并要求支付赎金以解锁。
- 僵尸网络(Botnet):一个由多个受感染的计算机组成的网络,它们被远程控制用于执行DDos攻击或其他恶意活动。
- 会话劫持(Session Hijacking):攻击者通过盗取或预测会话标识符来接管用户会话,从而获得对用户账户的访问权限。
11. 网络协议分布图
- 应用层:这层支持网络应用,包括但不限于HTTP(超文本传输协议)、HTTPS(安全超文本传输协议)、FTP(文件传输协议)、SSH(安全外壳协议)、SMTP(简单邮件传输协议)、DNS(域名系统)、SNMP(简单网络管理协议)、POP3(邮局协议第三版)、IMAP(互联网消息访问协议)
应用层决定的是应用如何沟通,例如两个不同型号电脑上的不同软件,开发者可以根据HTTP协议编写应用程序实现两个应用的沟通。
- HTTP:用于从网络传输超文本到本地浏览器的传输协议
- FTP:用于在网络上的计算机之间传输文件
- SSH:提供加密的数据传输、身份验证和数据完整性验证
- 传输层:负责在主机进程间,提供数据传输服务,主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。
虽然有MAC和IP地址可以抵达对方主机,但对方主机可能运行着无数多个软件进程,这时就需要端口号来进行定位了,比如客户端生产不同的端口号,即使同时访问80端口也没有问题。传输层在网络层端到端的基础上,实现了服务进程到服务进程的传输。
- TCP:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。使用三次握手建立连接,并在数据传输结束后通过四次挥手释放连接。
- UDP:UDP是一种无连接的传输层协议,它提供了一种简单的方式来封装的IP数据报,但不保证数据的可靠传输。
- 网络层:负责将数据报从源头传输到目的地,主要协议是IP(互联网协议),与MAC地址协同工作。
- IP协议:IP是网络层的核心协议,负责在不同网络间传输数据包
- MAC地址:MAC地址是网络设备在物理层上的地址,通常被收录在网络接口卡(NIC)上
- IP协议与MAC地址在网络通信协议中协同工作,但他们属于不同的层次。IP地址用于在网络层中标识设备,并在多个网络中路由数据包;MAC地址用于在数据链路层标识设备,并在局域网内进行数据帧的传输。
12. ARP协议工作原理
ARP(地址解析协议)和RARP(逆向地址解析协议)都是网络协议,他们用于处理网络地址的解析问题,但他们的作用和工作原理有所不同。
ARP用于将网络层的IP地址解析为数据链路层的MAC地址。在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但IP地址必须封装成帧才能通过网络。这就意味着发送方必须有接收方的物理地址(MAC),因此需要完成逻辑地址到物理地址的映射。ARP协议可以接受来自IP协议的逻辑地址,将其映射为响应的物理地址,然后把物理地址递交给数据链路层。
工作原理:
- 检查ARP缓存:主机在发送数据前检查自己的ARP缓存表,查找目的IP地址对应的MAC地址
- 发送ARP请求:如果缓存中没有找到对应条目,主机发送一个ARP请求广播包,询问网络上所有设备:"谁的IP地址是这个,请告诉我你的MAC地址"
- 接收ARP请求:网络上所有设备接收到ARP请求,但只有拥有请求中指定IP地址的设备会响应
- 发送ARP响应:拥有指定IP地址的设备发送ARP相应包给请求主机,包含其MAC地址
- 更新ARP缓存:请求主机接收到相应后,更新自己的ARP缓存表,并将数据发送给目的MAC地址
13.RARP协议工作原理
RARP用于将数据链路层的MAC地址解析为网络层的IP地址,这在某些设备(如无盘工作站)不知道自己的IP地址时非常有用。
工作原理:
- 发送RARP请求:设备发送一个RARP请求,询问网络上的RARP服务器:"我的MAC地址是这个,请告诉我的IP地址"
- RARP服务器查找:RARP服务器接收到请求后,在RARP表中查找对应的MAC地址
- 发送RARP响应:如果找到对应的MAC地址,RARP服务器发送相应给请求设备,包含分配给MAC地址的IP地址
- 接收RARP响应:请求设备接收到响应后,得知自己的IP地址,并可以开始正常通信
14. DNS简述及其工作原理
计算机只能识别并用IP地址定位,这个过程就需要DNS域名解析系统的参与,将难以记忆的数字和字母转换为便于记忆的域名。
DNS(域名系统,Domain Name System)是互联网上用于将人类可读的域名(如www.example.com)转换为机器可读的IP地址(如192.0.2.1)的系统。它允许用户通过用于记忆的域名来访问来访问互联网上的资源,而不必记住难以理解的数字IP地址。以下是工作原理:
- 用户输入域名:用户在浏览器中输入一个网站的域名,如
www.example.com
。 - 查询本地DNS缓存:用户的设备首先检查本地DNS缓存,看是否有该域名的IP地址记录。
- 递归查询:如果本地没有记录,请求会被发送到配置的DNS服务器,该服务器会尝试在它的缓存中查找。
- 访问根DNS服务器:如果DNS服务器缓存中没有,它会向互联网的根DNS服务器查询。
- 获取TLD服务器信息:根服务器指向负责该域名后缀(如.com)的顶级域名(TLD)服务器。
- 访问权威DNS服务器:TLD服务器提供负责该域名的权威DNS服务器的信息。
- 获取IP地址:权威DNS服务器响应查询,提供域名对应的IP地址。
- 缓存并返回结果:本地DNS服务器将IP地址缓存起来,并返回给用户设备。
- 建立连接:用户设备使用这个IP地址来建立与目标网站的连接
15. RIP简述及其工作原理
RIP(路由信息协议,Routing Information Protocol)是一种用于网络中路由器之间交换路由信息的内部网关协议(IGP)RIP是一种基于距离矢量算法的协议,使用"跳数"作为衡量到达目的地距离指标。RIP协议就是这样一种简单、自动的路由协议,选择最佳线路并实时更新,以便信息的高效传递。以下为工作原理:
- 路由表初始化:每个运行RIP的路由器都有一个路由表,用于存储到达不同网络目的地的路径信息。
- 路由广播:路由器定期广播自己的路由表,将信息发送给局域网内所有其他路由器。
- 路由更新:当路由器接收到来自其他路由器的RIP更新信息时,会根据收到的信息更新自己的路由表。
- 跳数限制:RIP使用"跳数"来衡量路由的"成本",即数据包到达目的地所需经过的路由器数量。RIP协议通常将最大跳数限制为15跳,超过15跳的网络被认为是不可达。
- 路由选择:路由器根据到达目的地的跳数来选择最佳路径。如果存在多条路径,RIP会选择跳数最少的路径。
- 触发更新:当网络拓扑发生变化时(例如,链路故障或恢复),路由器会立即发送触发更新,而不是等待定期广播,以快速通知其他路由器路由变化。
- 分割水平:为了防止路由循环,RIP使用分割水平(split horizon)技术,即路由器不会将从某个接口接收到的路由信息通过同一接口广播出去。
- 路由聚合:RIP支持路由聚合,以减少路由信息的数量和简化路由表。
RIP缺点:
- 收敛速度较慢:RIP协议在网络拓扑发生变化时,可能需要较长时间来收敛到正确的路由状态;
- 不支持大型网络:RIP有一个最大跳数限制,这限制了RIP在大型网络中的使用;
- 安全性问题:RIP协议本身没有内置的认证机制,因此可能容易受到路由信息的篡改或伪造
16. OSPF简述及工作原理
OSPF(Open Shortest Path First,开放最短路径优先)是一种内部网关协议(IGP),用于在单个自治系统(AS)内部进行路由信息分发。OSPF是动态路由协议的一个例子,它使用链路状态算法来计算到达目的地的最短路径。以下是工作原理:
- 手机网络信息:每个OSPF路由器收集其直接连接的网络信息
- 交换链路状态:路由器使用洪范法将这些信息广播给所有其他路由器
- 构建链路状态数据库:每个路由器根据收到的信息构建一个全局的链路状态数据库
- 计算最短距离:使用Dijkstra算法,每个路由器独立计算到网络中所有其他路由器的最短距离
- 更新路由表:根据计算结果,路由器更新自己的路由表
- 区域划分:为了提高效率,OSPF可以将大型网络划分为多个区域,减少路由信息的交换范围
- 快速收敛:当网络发生变化时,OSPF能够迅速重新计算并更新路由表,实现快速收敛
17. TCP与UDP区别
- 连接性:TCP是一种面向连接的协议,数据传输前需要建立连接,通过三次握手过程来确保链接的建立;UDP是一种无连接的协议,不需要连接就可以直接发送数据
- 可靠性:TCP提供可靠的数据传输服务,确保数据包按顺序到达,如果数据丢失或出错,TCP会重新发送数据;UDP不保证数据包的顺序、完整性或可靠性,发送的数据可能丢失或乱序
- 速度:TCP因为需要建立连接和确认数据的接收,相对速度较慢;UDP由于不需要建立连接和确认,速度通常更快
- 流量控制和拥塞控制:TCP具有流量控制和拥塞控制机制,可以根据网络状况调整数据传输速率;UDP没有这些机制,发送方可能会在网络拥堵时发送大量数据,导致网络拥塞
- 用途:TCP适用于需要可靠传输的应用,如网页浏览(HTTP)、文件传输(FTP)、邮件传输(SMTP)等;UDP适用于对实时性要求较高哦的应用,如在线游戏、VoIP(网络电话)、DNS查询等
18. 三次握手与四次挥手
三次握手:确保双方都能发送和接收数据,从而建立一个可靠的通信通道。三次握手也防止了重复历史连接的初始化请求突然又传送到了服务端,因而产生错误。
- SYN(同步序列编号):客户端选择一个初始序列号(ISN),并将SYN标识位设为1,发送给服务器,表示客户端希望建立连接
- SYN-ACK(同步-确认):服务器收到客户端的SYN保温后,会分配TCP资源,并将SYN和ACK标志位都设为1,同时将确认号(ACK)设置为客户端的ISN+1,发送给客户端
- ACK(确认):客户端收到服务器的SYN-ACK报文后,再次发送一个ACK标志位为1的报文,确认号设置为服务器的ISN+1,至此,连接建立
- 确认号都是根据对方的序号+1得到的,且就控制位来说也具有唯一性,第一次是SYN,第二次是SYN+ACK,第三次是ACK,两边不仅可以根据序号和确认号,还可以根据控制位来区分进行到哪个步骤,丢弃一些不必要的报文
四次挥手:因为TCP连接是双全工的,及数据可以在两个方向上独立的发送。每个方向上的连接都需要单独关闭,因此每个方向都需要一个FIN和ACK。
- FIN(结束):当客户端完成数据传输并希望关闭连接时,它会发送一个FIN标志位为1的报文给服务器,表示客户端已经没有数据要发送了
- ACK(确认):服务器收到FIN报文后,发送一个ACK标志位为1的报文给客户端,确认收到客户端的关闭请求
- FIN(结束):服务器在发送完所有剩余数据后,也会发送一个FIN标志位1的报文给客户端,请求关闭连接
- ACK(确认):客户端收到服务器的FIN报文后,发送最后一个ACK标志位为1的报文给服务器,确认收到服务器的关闭请求。服务器接收到这个确认后,连接正式关闭
简单来说,三次握手就像是两个人通过电话联系,每个人都需要确认对方能听到自己的声音。而四次挥手像是两个人在电话结束时都要表达结束通话的意愿,并确认对方已经理解了这个意愿。
19. GET与POST
- GET请求用于获取资源,通常不会改变服务器上的数据;GET请求通过URL传递数据,数据会被附加在URL的末尾,形成查询字符串。查询字符串以问号?开头,参数之间用&符号连接,由于数据以明文形式传递,因此不适合传输敏感数据。此外,URL的长度有限制,不同浏览器对URL的限制不同
- POST请求用于提交数据,通常会改变服务器上的数据。POST请求通过请求正文传递数据,数据不会附加在URL上。因为数据被包含在请求正文中,所以POST请求不会有URL长度的限制。POST请求适合于传输大量数据或敏感数据。
- GET请求适合用于请求数据,POST请求适用于提交数据
20. cookies与session
- cookies存储在客户端(用户的浏览器上),是小段的文本信息,由浏览器管理;存储在服务器端,服务器通过Session ID来识别和管理不同用户的Session
- cookies可以设置过期时间,即使关闭浏览器,Cookies依然存在,知道过期或被清除;session通常在用户关闭浏览器时失效,但也可以设置过期时间
- Cookies通常有大小限制,大约为4kb;Sessions理论上没有限制,但过多的Session会增加服务器的存储压力
- Cookies由于存储在客户端,更容易被篡改或被第三方读取,安全性较低;Session由于存储在服务器端,只有通过Session ID才能访问,因此相对更安全
- Cookies常用于存储用户的偏好设置、会话标识符(Session ID)等信息;Sessions常用于需要服务器记住用户状态的场景,如用户登录状态、购物车信息等
- Cookies在HTTP请求中自动发送到服务器,每次请求都会携带Cookies信息;Sessions只在首次创建时通过Cookies发送Session ID,之后通过Session ID在服务器端管理
- Cookies可以通过浏览器或编程方式设置、读取、修改和删除;Sessions需要服务器端编程来创建、跟踪和销毁
Session是一种能力:能够使服务器对用户偏好做出反应;Token是一个字符串凭证:和人的各种证件一样功能的凭证,JWT恰好是其中的一种格式;Cookie是浏览器中的一个存储技术:历时很久了
就像是,你从自己的钱包(Cookie)里掏出了身份证(Token),递给了窗口(服务器)里面,从而形成了一种Session能力
21. session 的工作原理
- 当用户访问一个需要进行身份验证的页面时,服务器会创建唯一的一个Session ID,这个ID为一个无规律的字符串,并将该ID存储在一个称为Session对象的数据结构中
- 服务器会将Session ID发送到客户端的浏览器,通常是通过在HTTP响应头中设置一个名为"Set-Cookie"的标头来实现
- 当客户端的浏览器接收到服务器发送的Session ID时,它会将该ID存储在一个称为Cookie的数据结构中,以便在后续的请求中将该ID发送回服务器
- 当用户进行其他请求时,浏览器会自动将包含Session ID的Cookie发送回服务器。服务器会根据Session ID找到对应的Session对象,并读取或存储与该Session对象关联的用户数据
- 当用户关闭浏览器或者Session超时时,Session对象和Session数据将被从服务器内存中删除,以释放服务器资源
22. HTTP请求过程
- DNS解析:当浏览器发起一个URL请求时,首先需要将URL中的域名转换为对应的IP地址,这就是DNS解析。浏览器会先检查缓存中是否有该域名的IP地址,如果没有则向本地DNS服务器发起请求
- 建立TCP连接:一旦浏览器得到目标服务器的IP地址,就需要通过三次握手来建立一个TCP连接
- 发起HTTP请求:TCP连接建立后,浏览器会向服务器发送HTTP请求。HTTP请求包括请求方法(GET、POST、PUT、DELETE等)、URL、HTTP版本号、请求头等信息
- 服务器响应:服务器收到请求后,会根据请求内容进行处理,并向浏览器返回HTTP响应,包括状态码、响应头、响应正文等信息
- 接收相应内容:浏览器接收到服务器返回的HTTP响应后,会根据响应头中的Content-Type字段来判断响应正文的类型,然后将响应正文解析成对应的格式,并进行渲染
- 关闭TCP连接:当响应内容传输完毕后,TCP连接会被关闭,释放资源
23. HTTP和HTTPS的区别
HTTP是用于数据传输的基本协议,但他不提供任何数据加密或身份验证功能。HTTPS是基于HTTP的安全协议,通过在HTTP上添加SSL/TLS加密来保证数据的安全性,HTTPS通过使用数字证书对Web服务器进行身份验证,并使用公钥加密算法来加密数据传输,以确保数据在传输过程中不被窃听或篡改
24. HTTP短连接和长连接
短连接(HTTP/1.0 默认模式)
在HTTP中,短连接意味着每个HTTP请求都对应一个全新的TCP连接。请求完成后,TCP连接就关闭了,如果需要发送新的请求,就需要重新建立TCP连接
长连接(HTTP/1.1 及以后版本默认模式)
在HTTP中,长连接(也称持久连接)允许一个TCP连接上发送多个HTTP请求和响应。只要客户端或服务端没有明确的关闭连接,这个TCP连接就可以被重用,从而减少了建立和关闭连接的开销
25. TCP如何保证可靠传输
- 序列号和确认应答机制:每个TCP报文段都有一个唯一的序列号,用来标识报文段在数据流中的位置,接收方可以按正确的顺序重新组装数据。接收方会发送确认应答给发送方,告知数据已成功接收,如果发送方在一定时间内没有收到确认,它会重新发送数据。
- 超时重传:如果一个数据包在超时间内没有收到确认,发送方会认为该数据包丢失,并重新发送该数据包
- 滑动窗口:TCP使用滑动窗口机制来控制发送方的数据流量,以匹配接收方的处理能力,防止接收方被大量数据淹没
- 拥塞控制:当网络出现拥塞时,TCP通过减慢发送速率来减少网络拥塞,避免过多的重传请求
26. 什么是SSL?HTTPS是如何保证数据传输的安全?
其实,SSL是TLS的前身,现在很多浏览器都不支持SSL,但SSL的名气很大。
SSL用于在网络上进行安全通信。SSL的主要目的是为了保护在网络上传输的数据的安全性、完整性和机密性。HTTPS是在HTTP协议的基础上加入SSL/TLS协议的安全协议,可以确保网站与客户端之间的通信是加密的、安全的
- 加密:SSL/TLS协议使用对称加密和非对称加密结合的方式,保证数据在传输过程中的安全性。对称加密用于加密数据,非对称加密用于在客户端和服务器之间交换密钥
- 鉴别:证书机构颁发的证书用于验证服务器的身份和公钥,防止中间人攻击和欺骗
- 完整性:SSL/TLS协议使用消息摘要算法,通过对消息进行哈希运算生成消息摘要,以确保在传输过程中的数据完整性
27. 如何保证公钥不被篡改
- 数字签名:使用可信的撕咬对公钥或包含公钥的信息(如证书)进行数字签名。接收方可以使用对应的公钥验证签名,确保公钥的真实性
- 证书颁发机构(CA):由受信任的第三方机构(如证书颁发机构)来发行公钥证书。CA会对公钥的所有者进行身份验证,然后使用CA的私钥对公钥进行数字签名
- 公钥基础设施(PKI):建立完整的PKI系统,包括证书管理、密钥管理、证书吊销列表(CRL)和在线证书状态协议(OCSP)等,以确保公钥的整个生命周期的安全
- 公钥哈希:将公钥进行哈希处理,然后将哈希值公布出来,这样可以确保公钥未被篡改
28. 常用渗透工具
BurpSuite、SQLmap、Namp、kali Linux、瑞士军刀
29. XSS盲打
XSS盲打(Blind XSS)是一种特殊类型的XSS攻击,攻击者无法直接看到攻击效果,但可以利用它来实现一些恶意目的,比如盗取用户的cookies或其他敏感信息
XSS盲打是指攻击者没有先进行漏洞探测,而是直接尝试利用已知的XSS漏洞进行攻击。在某些情况下,攻击者可能会通过盲打XSS攻击内网服务器。攻击者可能会利用XSS漏洞注入恶意代码,使得在受害者的浏览器中执行该代码后,向攻击者控制的服务器发送请求,以获取内网服务器的敏感信息。这种攻击方式通常需要攻击者事先准备一个恶意服务器,以接收发送到该服务器的请求并获取敏感信息
30. 鱼叉式攻击和水坑攻击
鱼叉式攻击(Spear Phishing)和水坑攻击(Watering Hole Attack)是两种常见的网络攻击手段,它们都用于针对特定的目标进行网络钓鱼或恶意软件的分发
鱼叉式攻击:这是一种有针对性的网络钓鱼攻击,攻击者精心设计电子邮件或消息,使其看起来像是来自受信任的来源,目的是诱骗目标用户泄露敏感信息或点击恶意链接
水坑攻击:水坑攻击是一种针对特定群体的网络攻击,攻击者识别出目标群体经常访问的网站(水坑),然后在这些网站上植入恶意软件或钓鱼链接
鱼叉式攻击针对特定的个人或小群体,而水坑攻击针对更广泛的群体,基于他们共同的兴趣或访问习惯。
31. 虚拟机逃逸
虚拟机逃逸(VM Escape)是一种安全漏洞,它允许攻击者从虚拟机内部突破虚拟化层的限制,访问或控制宿主机(Hypervisor)或其他虚拟机。这种攻击可能危及整个虚拟化环境的安全性
虚拟机逃逸指攻击者利用虚拟化软件或操作系统中的漏洞,从虚拟机(VM)环境中获得对物理主机的控制权。攻击者可以通过虚拟机逃逸攻击,绕过安全措施,获取对整个物理主机的访问权限,并访问所有存储在其中的敏感数据
32. 中间人攻击
中间人攻击(Man-in-the-Middle Attack,简称MITM)是一种网络攻击方式,攻击者在通信双方之间拦截、修改、冒充或制造虚假通信内容,并尝试篡改或者重放数据的一种攻击方式。攻击者通常会在用户和服务器之间插入一个恶意的中间节点,这个节点会伪装成正常的通信节点,使双方都认为他们在与对方直接通信
33. 云安全
云安全是一系列技术和实践,旨在保护云计算环境中的数据、应用程序和基础设施免受各种威胁和攻击。它包括数据保护、身份和访问管理、网络安全、应用程序安全、合规性和审计以及业务连续性和灾难恢复等关键领域
云安全面临的挑战包括认证和授权问题、管理界面漏洞、安全事故管理、应用程序安全和数据安全等。为了应对这些挑战,云安全中的措施和控制包括预防控制、威慑控制、侦查控制和纠正控制
34. Websocket
WebSocket是一种网络通信协议,提供了在单个TCP连接上进行全双工通信的能力。这意味着客户端和服务器可以同时发送和接收数据,而不需要建立信息连接。
Websocket采用全双工通信:WebSocket允许服务器主动向客户端发送消息,这与传统的HTTP请求-响应模式不同,在传统模式中,只有客户端可以首先发送请求;且Websocket为持久连接:一旦WebSocket连接被建立,它将保持开放状态,直到客户端或服务器端明确关闭连接
35. DDos攻击与CC攻击
DDoS攻击(分布式拒绝服务攻击)和CC攻击(Challenge Collapsar,挑战黑洞)都是旨在使目标服务器或网络无法正常提供服务的网络攻击手段,但它们在攻击方式和特点上存在一些区别
DDos是针对IP的攻击,攻击通过控制遍布全球的多台计算机,向目标服务器发送海量请求,以此耗尽资源,导致正常服务中断。DDos攻击类型多样,包括SYN Flood攻击(利用TCP三次握手协议漏洞发送大量SYN请求)ICMP Flood攻击(利用ping命令,向目标服务器发送大量的ICMP请求)UDP Flood攻击(利用UDP协议特性发送大量UDP数据包)
CC攻击(HTTP Flood)是一种特殊的DDos攻击方式,更侧重于web应用层面的攻击,攻击者通过伪造HTTP请求,向Web服务器发送大量的请求,模拟用户访问,从而使得服务器过载,无法正常处理合法的网络流量
36. land攻击是什么
LAND攻击(Local Area Network Denial attack,局域网拒绝服务攻击)是一种拒绝服务(Dos)攻击方式,它利用了TCP/IP协议栈的缺陷。LAND攻击的影响包括服务中断和系统崩溃。服务中断可能导致网站无法访问、邮件服务器无法接收和发送邮件等
37. CRLF注入攻击
CRLF(Carriage Return Line Feed,回车换行)注入攻击是一种Web安全漏洞,它利用了HTTP响应分割的机制。在HTTP协议中,CRLF(\r\n
)序列用来表示一个头部字段的结束。如果一个应用程序在构造HTTP响应时不小心将用户输入的数据拼接到响应头中,攻击者就可能通过CRLF注入来操纵响应头,导致响应被错误地分割
38. 防止XSS
前端方面:
- 输入过滤:在前端对用户输入进行过滤,禁止或转义掉潜在的危险字符,如<,>,&,",',/等
- 使用HTTPS协议:使用HTTPS来保护用户数据的安全性和完整性,防止中间人攻击
- 文件上传限制:禁止上传可执行文件,限制允许的文件类型,并实施文件内容检查,确保上传的是预期格式的文件
- HTTP头设置:使用HTTP头来限制网页内容的加载,以防止XSS攻击
后端方面:
- 输入验证:实施强类型检查和验证逻辑,确保输入数据的合法性
- 预编译语句(Prepared Statements):对于数据库查询,使用预编译语句来避免SQL注入
- 数据加密:使用数据加密算法(如AES)和安全协议(如TLS)来保护数据传输和存储
- 安全的HTTP头:设置
X-Content-Type-Options
、X-Frame-Options
等安全头,增强安全性
39. 端口防护安全:
- 了解开放端口:使用端口扫描工具(如NAMP)来识别那些端口是开放的,了解每个端口的作用
- 最小权限原则:仅打开必要的端口,对于不需要的服务,保持端口关闭
- 使用防火墙:配置防火墙规则来允许信任的流量,阻止或限制其他所有流量
- 定期更新:确保所有通过端口提供的服务都是最新版本,以减少已知漏洞的风险
- 使用入侵检测系统(IDS):部署IDS来监控可疑活动,并在检测到潜在攻击时发出警报
- 使用入侵防御系统(IPS):部署IPS来主动组织恶意流量和攻击
- 加密通信:对于需要开放的端口,使用SSL/TLS等加密协议来保护数据传输的安全
40. Webshell检测思路
Webshell是攻击者上传到服务器并用于远程控制的恶意脚本或程序
- 检查文件名:检查文件名是否与webshell相关,如果是,则可能是webshell
- 检查文件内容:检查文件内容是否包含webshell特性,如果是,则可能是webshell
- 检查文件权限:检查文件权限是否被更改,如果更改,则可能是webshell
- 检查文件时间:检查文件的创建时间和修改时间,如果有异常,则可能是webshell
- 检查文件大小:大小异常则可能是webshell
41. GPC绕过
GPC是PHP中一个用于提高安全性的特性,它自动为GET、POST、COOKIE数据中的某些字符添加反斜线进行转义,以防止SQL注入和XSS攻击等
如果想要绕过GPC,可以使用URL重写、伪静态、XMLHttpRequest等技术
- URL重写:URL重写通常是指使用服务器端重写规则(如Apache的 .htaccess文件或IIS的URL Rewrite模块)来改变URL的显示形式。使其对用户更友好或符合网站的URL结构。这并不会隐藏GET参数或避免它们被服务器接收
- 伪静态:伪静态是一种技术,他将动态网页URL转换为静态资源的URL样式,以提高搜索引擎的友好度。着同样不影响URL参数的传输或GPC对他们的处理
- XMLHttpRequest:XMLHttpRequest是一个JavaScript对象,用于在不重新加载整个页面的情况下与服务器交换数据并更新部分网页。它通常用于发送异步请求,可以是GET或POST请求。虽然POST请求不会在URL中显示参数,但它们仍然会经过服务器的GPC处理(如果启用)
42. Web常用加密算法
1.对称加密算法:
- AES(Advanced Encryption Standard):高级加密标准,目前最广泛使用的对称加密算法之一,支持128、192和256位密钥,常用于数字签名和加密
- DES(Data Encryption Standard):数据加密标准,较老的加密算法,已被AES取代,但仍在一些旧系统中使用,常用于加密和解密
- 3DES(Triple DES):三成数据加密算法,是对DES算法的扩展,使用两个或三个不同的密钥对数据进行三次DES加密
2.非对称加密算法:
- RSA:一种广泛使用的非对称加密算法,基于大整数分解的困难性,常用于生成密钥和加密小数据量
- ECC(Elliptic Curve Cryptography):椭圆曲线密码学,提供了与RSA相同的安全级别,但使用的密钥更短
3.散列函数(哈希算法):
- SHA-256(Secure Hash Algorithm 256):安全哈希算法的变种,生成256位的哈希值广泛用于数据完整性验证,常用于数字签名等安全认证场景
- MD5(Message Digest Algorithm 5):消息摘要算法第五版,常用于文件校验,由于安全漏洞,不推荐用于敏感数据的加密,但仍广泛用于一些非安全性场景
4.消息认证码(MAC)算法:
- HMAC(Hash-based Message Authentication Code):基于哈希函数的消息认证码,提供消息的完整性和认证,常用于消息完整性验证
5.密码派生函数:
- PBKDF2(Password-based Key Derivation Function 2):基于密码的密钥派生函数第二版,用于从密码中安全的派生密钥,常用于加密口令
- bcrypt:一种密码哈希函数,专为密码存储设计,通过使用盐(salt)和多次迭代来增加破解难度,常用于加密口令
6.椭圆曲线集成加密方案(ECDSA):
- 用于数字签名和公钥加密,基于椭圆曲线密码学
7.流加密算法:
- RC4:曾广泛用于SSL 3.0和TLS 1.0,但由于安全问题,现在已不推荐使用,之前常用于加密大量数据
8.编码和转义:
- 对于Web开发,还经常使用Base64编码来传输二进制数据,但它不是加密算法,不能提供安全性
43. xss作用
- 获取cookie:攻击者获取到cookie后,可以进行会话劫持,冒充用户在网站上执行操作
- 会话劫持:攻击者可以利用XSS攻击来劫持用户的会话,通过操作用户的会话Cookie来控制用户账户
- 信息泄露:攻击者可以读取用户浏览器中的任何信息,包括敏感信息,如个人信息、私人消息等
- 钓鱼攻击:攻击者可以创建假冒的登陆表单,诱骗用户输入用户名和密码
- 重定向攻击:攻击者可以利用XSS在受害者的浏览器中执行重定向,将用户带到恶意网站
- 恶意脚本执行:攻击者可以执行任意JavaScript代码,这可能包括键盘记录器、浏览器插件的滥用
- 横向移动:在成功攻击一个用户后,攻击者可能会尝试在同一个域内横向移动,寻找更多的漏洞来攻击其他用户或系统
- 持久化攻击:攻击者可以将恶意脚本持久化,例如通过修改或创建受信任的网页内容
- 数据操作:攻击者可以提交恶意表单,修改或删除网站上的数据
- CSRF攻击:攻击者可以利用XSS来发起跨站请求伪造攻击,代表用户执行未授权的操作
- 浏览器漏洞利用:如果用户的浏览器存在漏洞,攻击者可以通过XSS攻击来利用这些漏洞,执行更深层次的恶意行为
- 本地文件访问:在某些情况下,攻击者可能尝试通过XSS访问用户的本地文件
- 社交工程:攻击者可以利用XSS在社交网站上散布恶意链接或信息,进行社交工程攻击
44. 网络劫持
网络劫持(Network Hijacking)指攻击者通过非法手段控制或拦截网络通信的行为。这种攻击可以发生在网络层或应用层,目的是获取敏感信息、篡改数据、进行拒绝服务攻击或传播恶意软件
常见的网络劫持手段有:中间人攻击、DNS劫持、ARP欺骗、会话劫持、钓鱼攻击、DDos攻击、路由器劫持、电子邮件劫持
防护措施可以使用HTTPS,通过SSL/TLS加密数据传输;使用DNSSEC(DNS安全扩展)来验证DNS记录的完整性;在网络设备上启用ARP防护功能防止ARP欺骗;使用防火墙和IDS来检测和组织恶意流量;定期更新软件和固件,修补安全漏洞;通过VPN加密整个网络连接;将网络分割成多个子网,减少攻击者可访问的范围
45. DNS欺骗
DNS欺骗也称DNS劫持,是一种网络攻击手段,攻击者通过篡改DNS(域名系统)记录,将域名解析到错误的IP地址,从而实现对用户访问的重定向。这种攻击可能导致用户访问假冒的网站(如钓鱼网站),泄露敏感信息,或使用户的网络流量经过攻击者的服务器,以便进行监听和篡改。
46. 缓冲区溢出原理及防御
缓冲区溢出是一种常见的安全漏洞,它发生在当程序尝试向一个固定长度的缓冲区内写入过多数据时,超出的数据可能会覆盖相邻内存区域,导致程序运行出错或执行恶意代码。
对于防御:在写入数据之前进行边界检查,检查数据长度是否超过缓冲区大小;使用提供自动边界检查的函数,如strncpy、snprintf等;使用堆栈保护机制,如堆栈溢出保护、边界检查缓冲区;使用隔离技术(ASLR),以及深度检查技术,如恶意代码检查、反编译检查
47.CSRF防护
- 会话标识符的生成与分配:在用户成功登陆后,服务器生成一个随机且唯一的会话标识符,这个会话标识符用于追踪用户的唯一会话,并在用户进行敏感操作时用于验证请求的合法性
- 会话标识符的绑定与传输:在表单提交前把这个会话标识符附加到表单中
- 服务器端会话标识符的验证:在接受表单提交后,使用会话标识符与之前存储在服务器上的值进行对比
- 使用令牌绑定技术:在验证成功后,这个标识符将被删除或重新生成新的标识符
- 如果验证失败,请求将被拒绝,把用户重新定向到登陆页面,或者给出警告
48. 文件上传绕过方法
- 文件扩展名绕过:将文件后缀改为常见的文件扩展名,如.js 、.jpg 、.exe等
- 根据文件头信息修改文件扩展名:一些图片文件,如png、gif、jpg等,都有自身的文件头,可在文件开头修改其文件头
- 使用base64编码上传:将需要上传的文件用Base64编码,再结合XMLHttpRequest上传
- 字符串文件上传:根据文件格式将其转换为字符串,再利用eval等函数取值
- "多部分/表单编码(multipart/form-data)"信息:一般Web应用都是采用此种格式上传文件,利用多级分割,传一个字符串$_FILES文件域数组
- 采用数据库存储文件:可以把文件当作二进制数据,存储在数据库里,再获取路径下载
- 遗漏文件类型:尝试上传各类类型文件,以不合法文件类型方式绕过限制,如JSP等
- Exe反射:Exe反射加载是将非托管代码(如C++)编译成可执行模块并从可执行文件中加载到当前的应用程序中
49. cookie可测试内容
- 存在性:验证是否所有的Cookie都有必要存在,并且没有不必要的cookie被设置
- 安全性标志:检查Cookie是否设置了安全标志,如Secure、HttpOnly和SameSite属性
- 数据保护:确保Cookie中不包含敏感信息,或敏感信息是否经过了适当的加密
- 过期时间:验证Cookie的域和路径设置是否正确,以确保他们不会在不应该的地方被访问
- 检查Cookie的域和路径设置是否正确,以确保它们不会在不应该的地方被访问
- 大小限制:验证Cookie的大小是否符合规格限制,通常每个Cookie不应该超过4KB
- 跨站请求:检查Cookie是否容易受到CSRF攻击,并验证CSRF防护措施的有效性
- 访问控制:测试Cookie的访问控制,确保它们不能被第三方JavaScript代码访问
- 浏览器兼容推荐:确保Cookie在不同的浏览器和版本中都能正确工作
50. 业务逻辑类漏洞类型
- 权限绕过:未授权访问或执行操作,如通过修改URL或参数绕过登录。
- 输入验证不足:应用程序未能充分验证输入数据,导致SQL注入、XSS等攻击。
- 竞态条件:并发请求导致的数据不一致,如库存同步问题。
- 价格篡改:攻击者修改价格参数,尝试以低价购买商品。
- 支付逻辑绕过:绕过支付流程,获取商品或服务而未实际支付。
- 会话劫持:攻击者盗取会话标识符,接管其他用户的会话。
- 错误处理不当:错误信息泄露敏感信息,辅助攻击者进一步攻击。
- 访问控制不当:用户能够访问他们不应该访问的数据或功能。
- 配置错误:如不恰当地暴露敏感配置信息或服务端点。
- 第三方服务漏洞:第三方组件或服务的漏洞被利用,影响主应用安全。
51. 文件包含漏洞
文件包含漏洞发生在Web应用允许用户控制文件路径时,未经严格验证的输入可导致攻击者包含服务器上的任意文件,从而可能泄露敏感信息或执行远程代码。防御此漏洞需要严格验证用户输入,限制文件访问范围,并采用白名单方法确保只能访问预定的文件
52. 渗透测试过程中发现一个只能上传zip文件的功能,有什么可能的思路
- 文件类型限制测试:尝试上传修改过的ZIP文件或其他格式,检查时都有文件类型检查漏洞
- ZIP炸弹:上传一个包含大量压缩文件的ZIP,测试服务器是否能够妥善处理ZIP炸弹
- 目录遍历:检查ZIP文件内的文件是否能够包含"../"等遍历序列,尝试突破上传目录限制
- 文件包含漏洞:如果ZIP包含可执行文件或脚本,测试系统是否会执行ZIP内的文件
- 信息泄露:检查ZIP文件上传后是否有任何敏感信息泄露,例如错误消息或服务器响应
- 服务器资源消耗:上传大型ZIP文件,评估服务器处理大文件的能力,检查是否存在拒绝服务的风险
- 文件内容检查:尝试在ZIP内容包含恶意脚本或代码,检查服务器是否对上传内容进行安全检查
- 上传接口滥用:检查上传功能是否能被滥用,例如上传大量文件进行服务拒绝攻击
- 权限测试:检查上传后的ZIP文件是否能够被其他用户访问,评估权限管理是否得当
- 执行路径分析:分析上传的ZIP文件在服务器上的存储路径和执行路径,寻找潜在的安全漏洞
- 提取和执行:如果服务器会自动提取ZIP文件,测试是否有可能通过精心构造的ZIP来执行恶意操作
- 响应测试:观察上传ZIP文件后服务器的响应,检查是否有可能通过响应信息获取额外的安全信息
53. python常用的标准库
- 操作系统接口:os、os.path、subprocess、shutil
- 文件通配符:glob
- 字符串处理:re、string、difflib、textwarp、unicodedate
- 数据编码和处理:base64、codecs、csv、xml
- 数学:decimal、fractions、math、random、statistics
- 日期和时间:datetime、time
- 拆分合并数据:collections、copy、heapq、bisect
- 数据压缩和归档:zlib
- 文件加载器:fnmatch
- 流控制和种子:itertools
- 线程和进程:threading、multiprocessing
- 调试器:pdb
- 软件包:pkgutil、modulefinder、zipimport
- 系统及环境:sys、warings、contextlib、platform、getopt、argparse
- Internet数据处理:urllib、urllib2、http、smtplib、poplib、imaplib、ftplib、telnetlib
- 其他:struct、copyreg、shelve、weakref
54. reverse tcp和bind tcp的区别
TCP建立连接时有两种方式:Reverse TCP和Bind TCP
Bind TCP是攻击者让受害主机监听一个端口,等待连接;Reverse TCP为攻击者让受害主机主动连接到攻击者指定的服务器和端口
55. SSRF漏洞利用
SSRF漏洞利用是一种攻击技术,它利用服务器端请求伪造(Server Side Request Forgery)漏洞,允许攻击者构造特殊的HTTP请求,从而访问内部网络上的服务器资源。攻击者可以利用SSRF漏洞来获取内部网络上的敏感信息,甚至可以控制内部网络上的服务器