网安面试笔记

383 阅读1小时+

网络安全实习生面试题目总结

Bob JIANG

所有参考资料均在文章末尾标记,搬运侵删。

网络协议

模型与协议

  1. OSI 7层模型

    • 应用层: HTTP, FTP, SMTP 对应程序的通信服务
    • 表示层: 主要定义数据格式以及加密,包括多个消息的控制和管理
    • 会话层: 定义如何开始结束、控制对话;包括多个双向信息的控制管理
    • 传输层: 差错恢复协议以及无差错恢复协议,以及对于顺序不对的数据包重新排序,比如TCP和UDP
    • 网络层: 定义了标识所有节点的逻辑地址,路由的实现,以及一个包分成更小包的分段方法,比如IP
    • 数据链路层: 定义了单个链路上如何传输数据,如ATM,MAC
    • 物理层: 定义了传输介质的特性
    螢幕截圖 2024-04-15 下午4.25.07.png
  2. TCP/IP四层模型

应用层、传输层、网络层、网络接口层

  1. 网络为什么要分层?
  • 各层之间相互独立, 提高了灵活性和可替换性, 是一种常见解耦的思路
  • 大问题化小, 将复杂的网络问题分解为许多比较小的,界线比较清晰简单的部分来处理,从而更易于单独实现每个分层的协议,并界定各个分层的具体责任和义务。
  1. 常见的网络协议
位置协议名称协议内容
应用层HTTP基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议
应用层SMTP 简单邮件发送协议基于 TCP 协议,是一种用于发送电子邮件的协议 / 只负责发送
应用层POP3/IMAP邮件接收协议基于 TCP 协议,两者都是负责邮件接收的协议
应用层FTP文件传输协议基于 TCP 协议,是一种用于在计算机之间传输文件的协议 / 不安全
应用层Telnet远程登陆协议基于 TCP 协议,用于通过一个终端登陆到其他服务器 / 明文不安全
应用层SSHSecure Shell Protocol基于 TCP 协议,加密和认证机制实现安全的访问和文件传输等业务
应用层RTP实时传输协议通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量
应用层DNS域名管理系统基于UDP 协议,用于解决域名和 IP 地址的映射问题
传输层TCP传输控制协议提供面向连接的,可靠的数据传输服务
传输层UDP用户数据协议提供无连接的,尽最大努力的数据传输服务
网络层IP网际协议定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地 / IPv4, IPv6
网络层ARP地址解析协议解决了 IP 地址转 MAC 地址的一些问题
网络层ICMP互联网控制报文协议传输网络状态和错误消息的协议,常用于网络诊断和故障排除 / Ping工具
网络层NAT网络地址转换协议应用于内部网到外部网的地址转换过程中
网络层OSPF网络地址转换协议种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径
网络层RIP路由信息协议一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径
网络层BGP边界网关协议应一种用来在路由选择域之间交换网络层可达性信息的路由选择协议,具有高度的灵活性和可扩展性

传输层-TCP协议

  1. 特点
  • 面向连接的、可靠的字节流服务

  • 仅两方通信,广播和多播不能用于TCP

  • TCP使用校验和,确认和重传机制来保证可靠传输

  • TCP使用滑动窗口来实现流量控制,通过动态改变窗口大小来进行拥塞控制

  • 使用累积确认保证数据的顺序不变和非重复

  • 可靠性传输

    连接和断开的可靠性:连接是基于三次握手,而断开则是四次挥手
    有状态:TCP会记录哪些数据发送了,哪些数据被接受了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。
    可控制:报文校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制
    

螢幕截圖 2024-04-09 下午1.04.04.png

  • 拥塞控制
    • 慢启动: (拥塞窗口)cwnd = 1, cwnd = 2 * cwnd。
    • 拥塞避免: 当cwnd >= ssthresh(慢启动阀值)时进入,cwnd = cwnd + 1;如果出现超时,则ssthresh = cwnd / 2,然后重新执行慢开始。
    • 快重传: 发送方收到三个重复确认,可以知道此确认的下一个报文段丢失,执行快重传,例如连续收到三个M2,则M3丢失,立即重传M3。
    • 快恢复: 将拥塞阈值降低为拥塞窗口的一半,将cwnd设置为ssthresh,此时直接进入拥塞避免。
  1. 与UDP比较
  • UDP不需要建立连接,直接传输数据(不可靠);TCP协议是有连接的
  • UDP支持一对一,一对多,多对多的交互传输; TCP是一对一的连接
  • UDP是尽最大努力交付,而不是可靠性交付;TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性
  • TCP有拥塞控制和流量控制机制,而UDP没有,网络拥堵不会影响发送速率
  • TCP是流式传输(字节流服务),UDP是一个包一个包传输(报文服务),没有边界
  • TCP 和 UDP 可以使用一个端口
  1. TCP的三次握手

    螢幕截圖 2024-04-09 上午10.23.13.png

    三次握手:建立TCP连接,需要服务器和客户端发送三个包

    • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

    • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

    • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

      发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入ESTABLISHED状态,TCP 握手结束。
      第三次握手是可以携带数据的,前两次是不可以携带数据的。

  2. 为什么TCP不是两次握手?

防止已失效的连接请求又传送到服务器端,因而产生错误,客户端并不能保证一定能接收到服务器端发来的信息;

经过三次握手之后,客户端A 和服务器端B 都可以确认之前他们的所发送的消息,各自都能收到且报文也都成功发送给对方了,所以四次是多余的。

  1. SYN攻击

    在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的

    应对方案:

    • syn cookie:在收到SYN包后,服务器根据一定的方法,以数据包的源地址、端口等信息为参数计算出一个cookie值作为自己的SYNACK包的序列号,回复SYN+ACK后,服务器并不立即分配资源进行处理,等收到发送方的ACK包后,重新根据数据包的源地址、端口计算该包中的确认序列号是否正确,如果正确则建立连接,否则丢弃该包。
    • SYN Proxy防火墙:服务器防火墙会对收到的每一个SYN报文进行代理和回应,并保持半连接。等发送方将ACK包返回后,再重新构造SYN包发到服务器,建立真正的TCP连接。
  2. 四次挥手

螢幕截圖 2024-04-09 下午12.03.16.png

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
  1. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACKSYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACKFIN一般都会分开发送。

  1. TIME-WAIT 状态为什么需要等待 2MSL
  • 2MSL,2 Maximum Segment Lifetime,即两个最大段生命周期
  • 1个 MSL 保证四次挥手中主动关闭方最后的 ACK 报文能最终到达对端
  • 1个 MSL 保证对端没有收到 ACK 那么进行重传的 FIN 报文能够到达
  1. TCP与UDP的使用场景

TCP适用于需要可靠传输的应用场景,如Web浏览、电子邮件、文件传输等。 UDP则适用于实时性要求较高的应用场景,如音频和视频流媒体、网络游戏等。

  1. TCP与UDP对应的应用层协议

    TCPUDP
    FTP文件传输协议, port:21
    Telnet远程登陆的端口, port:23
    SMTP简单邮件传送协议, port:25
    POP3POP3 用于接收邮件
    DNS域名解析服务, port:53
    SNMP网络管理协议, port:161
    TFTP简单文件传输协议

网络层-IP协议

IP 协议位于 TCP/IP 协议的第三层——网络层。与传输层协议相比,网络层的责任是提供点到点(hop by hop)的服务,而传输层(TCP/UDP)则提供端到端(end to end)的服务。

  1. 使用浏览器访问域名的全过程

    • 浏览器向DNS服务器发出解析域名的请求
    • DNS服务器将域名解析为对应的IP地址,并返回给浏览器
    • 浏览器根据IP地址与目标服务器建立TCP连接
    • 浏览器发出HTTP请求报文
    • 服务器回复HTTP请求报文
    • 浏览器解析响应报文,并显示在Web页面上
    • 收到报文结束,释放TCP连接
    • 使用的协议:
      • 应用层:HTTP, DNS
      • 传输层:TCP/ UDP
      • 网络层:IP(IP数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将目的主机的IP地址映射成MAC地址)
  2. IP和MAC区别(网络层和链路层):

    MAC只负责某一个区间之间的通信, 而IP负责把数据包发送给最终的地址

  3. IP地址的分类

  • IPv4地址: IPv4(Internet Protocol version 4)是目前广泛使用的IP地址版本。它由32位二进制数字组成,通常表示为四个用点分隔的十进制数,例如192.168.0.1。IPv4地址被分为不同的类别,包括A类、B类、C类、D类和E类。
    - A类地址:A类地址使用第一个字节作为网络标识,范围从0.0.0.0到127.255.255.255。
    - B类地址:B类地址使用前两个字节作为网络标识,范围从128.0.0.0到191.255.255.255。
    - C类地址:C类地址使用前三个字节作为网络标识,范围从192.0.0.0到223.255.255.255。
    - D类地址:D类地址用于多播(multicast)通信,范围从224.0.0.0到239.255.255.255。
    - E类地址:E类地址保留用于将来的用途,范围从240.0.0.0到255.255.255.255。
    
  • IPv6地址: IPv6(Internet Protocol version 6)是下一代IP地址协议。它由128位二进制数字组成,通常表示为八组用冒号分隔的十六进制数。IPv6地址提供了更大的地址空间,以满足日益增长的互联网设备需求。
    • IPv6地址没有固定的地址类别,但可以基于前缀长度对其进行划分。例如,前缀长度为64位的地址通常用于本地子网,前缀长度为128位的地址用于单个设备。
  1. IPv4不够如何解决?
    • NAT: 用于解决内网中的主机要和因特网上的主机通信。由NAT路由器将主机的本地IP地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换。
    • IPv6:2 的 128 次方个地址
  2. 子网(subnet): 子网是将一个大的 IP 地址空间划分为更小的子网络的过程。它有助于组织和管理 IP 地址。

网络层-ARP协议

- 当主机A要发送数据包给目标主机B时,首先会检查自己的**ARP缓存**(ARP Cache)中是否有**目标主机B的IP地址对应的MAC地址**。如果有,主机A就直接使用该MAC地址进行数据包的封装和发送。
- 如果ARP缓存中没有目标主机B的MAC地址,主机A就会发送一个**ARP请求广播**(ARP Request Broadcast)到局域网上的所有主机。 ARP请求广播中包含了主机A的**IP地址和MAC地址,以及目标IP地址(即主机B的IP地址)**。其他主机收到该广播后,会检查自己的IP地址是否与目标IP地址匹配。
- 如果有主机发现自己的IP地址与目标IP地址匹配,它会发送一个**ARP响应**(ARP Reply)给主机A。该响应中包含自己的IP地址和MAC地址。
- 主机A接收到ARP响应后,会将目标IP地址和对应的MAC地址存入ARP缓存中,并使用该MAC地址进行数据包的封装和发送。

网络层-路由交换原理

  1. 什么是路由交换?请简要说明其作用和原理

    路由交换是一种网络技术,用于传输数据包。它能够根据数据包的目标地址来选择最佳的路径实现网络通信。通过使用路由表的信息来决定数据包的传输路径,从而使网络中的数据得以高效、准确地到达目标地址。

  2. 动态路由和静态路由的区别

    动态路由是一种自动化的路由选择机制,其中网络设备能够根据网络信息的动态变化自主调整路由表,从而实现数据包的传输;而静态路由是由网络管理员手动配置的一种固定的路由选择机制,其中路由表的内容不会自动变化。动态路由和静态路由可以同时存在。

  3. OSPF协议的作用和特点

    OSPF(Open Shortest Path First)是一种基于链路状态的动态路由选择协议。OSPF协议可以根据网络的拓扑结构和链路状态计算出最短路径,并将其记录在路由表中。通过使用OSPF协议,路由交换产品能够快速、准确地选择最佳的路径,提高网络的传输性能和稳定性。

    原理: OSPF 组播的方式在所有开启 OSPF 的接口发送 Hello 包,用来确定是否有 OSPF 邻居,若发现了,则建立 OSPF 邻居关系,形成邻居表,之后互相发送 LSA(链路状态通告)相互通告路由,形成 LSDB(链路状态数据库)。再通过 SPF 算法,计算最佳路径(cost 最小)后放入路由表。

  4. BGP协议的作用和特点

    BGP(Border Gateway Protocol)是一种用于在互联网上实现自治系统之间的路由选择的协议。BGP协议能够根据自治系统之间的策略来选择最佳的路径,实现自治系统之间的互联互通。

  5. 路由器和交换机

    路由器是网络设备,用于在不同网络之间转发数据包。交换机是局域网设备,用于在局域网内部转发数据帧。路由器工作在网络层,交换机工作在数据链路层。

  6. 路由聚合

    路由聚合是将多个具有相同目的地前缀的路由表项合并为一个更大的路由表项,以减少路由表的大小和复杂性。

  7. VPN(Virtual Private Network)

    VPN 是一种通过公共网络(如互联网)建立私密通信连接的技术。它用于加密通信、远程访问和建立安全的跨网络连接。

  8. QoS(Quality of Service)

    QoS 是一组技术和机制,用于控制网络流量、优先处理特定类型的数据和保证服务质量。

  9. ACL(Access Control List)

    ACL 是一种访问控制列表,用于限制或允许特定类型的流量通过路由器。它用于网络安全和流量管理。

  10. 路由器的 NAT 穿透(NAT traversal)

    NAT 穿透是一种技术,用于在存在 NAT 的网络中建立点对点通信连接。它解决了 NAT 对直接通信的限制。

  11. 路由器的冗余(redundancy)

    冗余是指在网络中使用备份设备或路径来提高可靠性和容错性。它用于防止单点故障和实现高可用性。

  12. MPLS(Multiprotocol Label Switching)

    MPLS 是一种基于标签的网络技术,用于快速转发数据包和实现灵活的路由和流量工程。

  13. 负载均衡(load balancing)

    负载均衡是将流量均匀分配到多个服务器或网络设备上,以提高性能和可靠性。它用于分担单个设备或服务器上的负载。

  14. 网络地址转换(NAT)

    网络地址转换是一种网络技术,用于将私有 IP 地址转换为公共 IP 地址以进行互联网访问,以及实现 IP 地址的映射和转换。

  15. 端口转发(port forwarding)

    端口转发是将路由器或防火墙上的某个端口的流量转发到另一个目标地址和端口的过程。它用于实现远程访问和服务映射等功能。

应用层-HTTP/HTTPS

  1. 基本信息

    HTTP是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 HTTP是一个无状态的面向连接的协议

    HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不安全, HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全。

    https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。

  2. 常见状态码: 1: 服务器收到请求 2: 成功 3: 重定向 4: 客户端错误 5: 服务端错误

  3. GET和POST的区别

    • 编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
    • 参数的角度,GET 一般放在 URL 中,因此不安全,POST 放在请求体中,更适合传输敏感信息。
    • 幂等性的角度,GET 是幂等的,而 POST 不是。(幂等表示执行相同的操作,结果也是相同的)
    • TCP 的角度,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)
  4. HTTP/2改进

    • 头部压缩
    • 多路复用
    • 服务器推送
  5. 跨域资源共享CORS

    跨域请求(Cross-Origin Request)是指在Web开发中,由一个域(或域名、主机)下的网页向另一个域下的资源发起的HTTP请求。在浏览器的安全策略中,默认情况下,Web页面只能请求同源(相同协议、域名和端口)下的资源,而跨域请求则是违反了这个安全策略。

    CORS(跨来源资源共享)是一种浏览器安全机制,用于防止跨域请求。当你的网页向不同域名的服务器发出请求时,如果服务器没有开启CORS,那么浏览器就会阻止请求,并抛出一个CORS错误。

    解决CORS问题的方法通常有以下几种:

    • 在服务器端设置CORS: 如果你有权限修改服务器端的代码,可以在服务器端设置CORS响应头,以允许跨域请求。
    • 使用代理:如果你没有权限修改服务器端代码,可以使用代理来解决CORS问题。例如,你可以在本地启动一个Node.js服务器,将跨域请求转发到目标服务器,然后在客户端通过代理服务器发出请求。这种方法需要额外的开销和配置,但可以解决CORS问题。
    • JSONP: JSONP(JSON with Padding)
  6. HTTP缓存

    什么是缓存? 把一些不需要重新获取的内容再重新获取一次

    为什么需要缓存? 网络请求相比于 CPU 的计算和页面渲染是非常非常慢的。

    哪些资源可以被缓存? 静态资源,比如 js css img。

    个人理解:Cookie更倾向储存用户信息,而HTTP缓存则是网站加载的静态资源。

    image.png

    刷新对缓存的影响:

    • 正常操作:强制缓存有效,协商缓存有效。
    • 手动刷新:强制缓存失效,协商缓存有效。
    • 强制刷新:强制缓存失效,协商缓存失效。
  7. SSL

    SSL 代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和 Web 服务器之间发送的数据的协议。是一种共享密钥加密和公开密钥加密并用的混合加密机制。

    SSL 工作过程,A:客户端,B:服务器端

    • 协商加密算法:A 向 B 发送 SSL 版本号和可选加密算法,B 选择自己支持的算法并告知 A
    • 服务器鉴别:B 向 A 发送包含公钥的数字证书,A 使用 CA 公开发布的公钥对证书进行验证
    • 会话密钥计算:A 产生一个随机秘密数,用 B 的公钥进行加密后发送给 B,B 根据协商的算法产生共享的对称会话密钥并发送给 A.
    • 安全数据传输:双方用会话密钥加密和解密它们之间传送的数据并验证其完整
  8. 一次完整的 HTTP 请求过程

    域名解析 --> 发起 TCP 的 3 次握手 --> 建立 TCP 连接后发起 http 请求 --> 服务器响应 http请求,浏览器得到 html 代码 --> 浏览器解析 html 代码,并请求 html 代码中的资源(如 js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

  9. HTTPS的实现原理

    HTTPS在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段

    螢幕截圖 2024-04-16 下午5.02.26.png

    ① 证书验证阶段

    1. 浏览器发起 HTTPS 请求
    2. 服务端返回 HTTPS 证书
    3. 客户端验证证书是否合法,如果不合法则提示告警

    ② 数据传输阶段

    1. 当证书验证合法后,在本地生成随机数
    2. 通过公钥加密随机数,并把加密后的随机数传输到服务端
    3. 服务端通过私钥对随机数进行解密
    4. 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

    为什么数据传输是用对称加密?

    首先,非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的;

    另外,在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。

  10. HTTPS的中间人攻击

    首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的“中间人攻击”问题。

    螢幕截圖 2024-04-16 下午5.12.48.png
  11. 从输入一个url到页面展示发生了什么

  • 在浏览器中输入指定网页的 URL。
  • 浏览器通过 DNS 协议,获取域名对应的 IP 地址。
  • 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
  • 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
  • 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
  • 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
  • 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。

应用层-DNS

DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题。

浏览器在本地会维护一个hosts列表,一般来说浏览器要先查看要访问的域名是否在hosts列表中,如果有的话,直接提取对应的 IP 地址记录,就好了。如果本地hosts列表内没有域名-IP 对应记录的话,那么此时就需要DNS了。

  1. DNS服务器

    • 根 DNS 服务器
    • 顶级域 DNS 服务器(TLD 服务器)
    • 权威 DNS 服务器
    • 本地 DNS 服务器
  2. DNS工作流程:递归+迭代

    螢幕截圖 2024-04-16 下午5.40.27.png

Nginx

Nginx, 是一个 Web 服务器和反向代理服务器用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。

  • 优点: 跨平台、配置简单,非阻塞、高并发连接、内存消耗小、成本低廉。

  • 主要功能:

    • 正向、反向代理

      螢幕截圖 2024-04-09 下午1.38.51.png
      • 正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定原始服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。代理服务器和客户端处于同一个局域网内。
      • 反向代理实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端 。代理服务器和原始服务器处于同一个局域网内。
    • 负载均衡、分流

      • 轮询(默认)round_robin:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
      • IP 哈希 ip_hash: 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 共享的问题。 当然,实际场景下,一般不考虑使用 ip_hash 解决 session 共享。
      • 最少连接 least_conn: 下一个请求将被分派到活动连接数量最少的服务器
      • 权重 weight: weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下,达到合理的资源利用率。
    • 虚拟主机(绑定host)

密码学

密码学基础

  1. 对称加密和非对称加密

    • 对称加密: 加密和解密使用同一个密钥

      优缺点: 对称加密,双方用相同密钥,加密速度快、高效、适用于大量数据的加密场景 ,但是无法解决密钥管理、无法确认消息来源。

      • DES加密算法: 分组加密算法;算法分组长度64bit,密钥长度56bit

        螢幕截圖 2024-04-09 下午5.32.27.png

        • 优点:密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。
        • 缺点:密钥单一,密码管理困难。
      • AES加密算法: 分组加密算法,铭文长度为128位,密钥长度为128,192,256

        先进行一次明文与子密钥矩阵异或初始变换,
        再进行 9轮运算,具体是字节代换,行列变换、轮密钥加密等,
        最后进行一次最终轮变换(无列变换)。
        
        螢幕截圖 2024-04-09 下午5.38.54.png
    • 非对称加密: 使用两个密钥,公开密钥和私有密钥

      假设A想把信息m传递给B,那么B生成两个有相关性的数字,分别为e(公钥)和d(私钥); B把公钥传递给A。 A利用公钥的某一个算法得到密文c;A通过公开的方式把密文c告诉B。B利用私钥的某一个算法得到明文,m。

      优缺点:非对称加密,公钥私钥,能提供身份验证、数字签名,但是加密速度慢、算法复杂。

      • RAS加密算法:

        质数 p, q
        n = p * q
        y(N) = (p-1)(q-1) // 欧拉函数
        公钥e需要满足条件: 1<e<y(N)的整数, 且e和y(N)需要互质
        私钥d与公钥e关系满足: e*d / y(N), 余数为1
        
        加密: m^(e)/n,求余数c
        解密: c^(d)/n, 求余数,余数一定为m
        

        RSA大于等于124bit比较安全。(n=pq,需要质因数分解,大数质因数分解比较困难)

        缺点:

        • 虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
        • 产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
        • 分组长度太大,使运算代价很高,尤其是速度较慢,且不利于数据格式的标准化

        优点:

        • 数学原理简单、在工程应用中比较易于实现
      • ECC椭圆曲线加密算法

        椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大素数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。

        优点:

        • 安全性高
        • 处理速度快
  2. 密码学攻击

    • 主动攻击:在主动攻击中,攻击者尝试修改信息。 由于修改,由于可见性,可以容易地检测到这种攻击。比如重放、篡改等。

    • 被动攻击:在被动攻击中,攻击者尝试获取信息而不修改信息。 因此,这些类型的攻击很难进行攻击,因为在数据中看不到任何干预迹象。比如窃听等。

  3. 重放攻击

    窃听者不直接破解消息认证码,而是把它保存起来,反复利用,这种攻击就叫做重放攻击(replay attack)。 防止重放攻击的3种方法:

    • 加入序列号
    • 加入时间戳
    • 加入随机数
  4. 生日攻击和数字签名 生日攻击不是真实的一个攻击,而是一种概率的结果。生日攻击是以概率论中的生日问题为数据基础的一种密码学攻击方法。由生日悖论结论可以看出来:产生哈希冲突所需的输入样本数量,远低于所有可能哈希值的全集数量。两个不同的输入,经过哈希算法后,得到了同样的哈希值,就叫做哈希碰撞。因此,对于数字签名,需要先hash处理,私钥加密公钥解密。

  5. Hash算法

    HASH算法(哈希算法)是一种将输入数据转换为固定长度的输出值的算法。它将任意大小的输入数据(如文件、消息、密码等)映射为固定长度的哈希值(也称为摘要、指纹或哈希码)。HASH算法的输出通常是一个固定长度的二进制字符串。 常见的HASH算法有MD5、SHA-1、SHA-256等。这些算法以不可逆的方式将输入数据转换为哈希值,其中不同的输入数据几乎肯定会产生不同的哈希值,而相同的输入数据始终会产生相同的哈希值。HASH算法具有以下特性:

    • 确定性:给定相同的输入,HASH算法总是产生相同的输出。
    • 不可逆性:从哈希值无法推导出原始输入数据。
    • 高效性:计算HASH值的过程通常是快速的。

    SHA-1(Secure Hash Algorithm 1)是一种广泛使用的HASH算法,它接受任意长度的输入,并生成长度为160位(20字节)的哈希值。SHA-1被广泛用于数字签名、消息完整性检查和密码存储等安全应用中。然而,由于SHA-1存在安全性方面的弱点,如碰撞攻击的可行性增加,因此在安全性要求较高的场景中,推荐使用更安全的HASH算法,如SHA-256或SHA-3等。

    1. 数据填充(Padding),确保数据块长度满足512位的要求:
        首先,在输入数据的末尾添加一个位为1的比特,这表示数据块的结束。
        接下来,添加一系列位为0的比特,直到满足以下条件:数据块的长度(以比特为单位)加上填充位的长度等于448,即 (L mod 512) = 448,其中 L 是输入数据的长度。
        最后,将以64位(8字节)形式表示的原始数据长度附加到填充后的数据块的末尾,以便记录原始数据的长度,不参与运算。
    2. 初始化哈希值(Initial Hash Values):
        SHA-1使用532位(4字节)的初始哈希值(H0、H1H2H3H4)作为内部状态。
    3. 消息扩展(Message Expansion):
        每个512位的数据块被划分为1632位的字(W0-W15)。对于每个数据块,SHA-1进行消息扩展,生成额外的48个字(W16-W63)。
    4. 迭代压缩(Iteration Compression)
        SHA-1使用80次迭代压缩来处理每个数据块。
    5. 生成哈希值(Output Hash Value)
        在处理完所有数据块后,SHA-1的最终哈希值由532位的中间哈希值(AB、C、D、E)组成,它们按顺序连接起来形成160位的结果。
    

    SHA-224、SHA-256、SHA-384,和SHA-512我们可以统称为SHA2加密算法,SHA加密算法的安全性要比MD5更高,而SHA2加密算法比SHA1的要高。其中SHA后面的数字表示的是加密后的字符串长度。

  6. 加密盐 盐就是一个随机字符串用来和我们的加密串拼接后进行加密。加盐主要是为了提供加密字符串的安全性。假如黑客通过一定手段这个拿到加密串,他拿到的明文,并不是我们加密前的字符串,而是加密前的字符串和盐组合的字符串,这样相对来说又增加了字符串的安全性。

  7. 加密攻击工作模式/威胁模型

    唯密文攻击        只知道密文或密文的一部分 ,可通过统计学方法破密。
    已知明文攻击      同一密钥的几个明-密文对
    选择明文攻击      攻击者可选明文获得密文
    选择密文攻击      攻击者可选密文获得明文
    
  8. 分组加密和序列加密

    • 分组加密每次处理特定长度的快数据,输出定长密文。每个数据块独立加密,输出密文后再与其他数据块组合在一起。扩散性好,插入敏感,但处理速度慢。常见的分组加密算法有AESDES

    • 序列加密/流加密对数据流进行连续处理,明密文长度相同。序列加密是将明文数据逐个字符或逐个比特进行加密的方式。每个字符或比特都依赖于前一个字符或比特的加密结果。速度快,低错误传播 但扩散性差,插入不敏感。 常见的序列加密算法有流密码算法,如RC4

  9. 拓展长度攻击 针对特定加密散列函数的攻击手段。比如:md5(secret+padding+追加字符串).

    假设我们有一个哈希函数MD5,它以"secret+padding+追加字符串"作为输入,并生成相应的哈希值。攻击者想要利用拓展攻击来构造一个新的输入,而不需要知道"secret"的值。
    拓展攻击的过程如下:
    
    攻击者知道原始输入的哈希值,即MD5("secret+padding+追加字符串")。
    攻击者取得原始输入的哈希值,并使用其输出作为新攻击的起点。
    攻击者构造一个新的输入,包括原始的"padding""追加字符串",以及攻击者自己添加的任意数据。
    攻击者将构造的新输入作为输入,继续使用MD5哈希函数进行计算。
    由于MD5是一个迭代哈希函数,攻击者可以利用原始输入的哈希值作为中间状态,将其与新输入的数据进行连接,然后继续哈希计算。最终,攻击者获得了一个新的哈希值,即MD5("secret+padding+追加字符串+攻击者添加的数据"),而不需要知道"secret"的值。
    
    通过拓展攻击,攻击者能够构造出看似合法的输入,并生成相应的哈希值,而无需知道原始输入的"secret"值。这种攻击利用了哈希函数的特性,特别是在迭代哈希函数中,攻击者可以利用中间状态信息进行拓展。
    
  10. MAC消息认证码 (message authentication code) 是一种确认完整性并进行认证的技术。通过消息认证码可以确认自己收到的消息是否就是发送者的本意,也就是说可以判断消息是否被篡改,是否有人伪装成发送者发送了这条消息。消息认证码的输入包括任意长度的消息和一个发送者与接收者之间的共享密钥。输出固定长度的数据,输出的数据就是MAC值。 螢幕截圖 2024-04-09 下午9.37.17.png

    初始化:发送方和接收方预先共享一个密钥。
    消息处理:发送方使用共享密钥和消息作为输入,通过特定的算法(如HMAC、CMAC等)生成MAC值。
    发送:发送方将消息和MAC值一起传输给接收方。
    验证:接收方使用相同的共享密钥和接收到的消息作为输入,通过相同的算法生成一个新的MAC值。
    比较:接收方将新生成的MAC值与接收到的MAC值进行比较。
    

同态加密

同态加密技术是一种加密方式,它可以在加密的同时进行计算,而无需解密。具体来说,同态加密可以让两个密文进行加法或乘法运算后得到一个新的密文,解密后得到的结果与对应的明文进行相同的运算结果。

同态加密技术的出现是为了解决数据隐私和数据共享之间的矛盾。在医疗领域中,医院需要共享患者的病历记录,但又不能泄露患者的隐私信息。使用同态加密技术可以在不泄露患者隐私信息的同时,实现病历记录的共享。

  • 常用的同态加密

    由于同态加密计算需要更大的计算资源,运行效率低等问题,还不能直接应用真实的工程中,所以在实际应用中多半是选取半同态加密。

    满足有限运算同态性而不满足任意运算同态性的加密算法称为半同态加密。典型的半同态加密特性包括乘法同态、加法同态、有限次数全同态等。如下表所示:

    算法描述加密特性
    RSA算法是最为经典的公钥加密算法,至今已有40余年的历史;非随机化加密,具有乘法同态性的原始算法面临选择明文攻击乘法同态
    ElGamal算法是一种基于Diffie-Hellman离散对数困难问题的公钥密码算法,可实现公钥加密和数字签名功能乘法同态
    Paillier算法基于合数剩余类问题的公钥加密算法,也是目前最为常用且最具实用性的加法同态加密算法加法同态
    Boneh-Goh-Nissim一种基于双线性映射的公钥密码方案,支持任意次加法同态和一次乘法同态运算,有限次数全同态

多方安全计算

多方安全计算(Multi-Party Computation,MPC)是一种密码学协议,旨在实现多个参与方之间的计算,同时保护各方的隐私和数据安全。MPC允许多个参与方在不泄露私密输入的情况下进行计算,并获得计算结果。

在传统的计算模型中,参与方通常需要将他们的私密输入交给一个可信的第三方进行计算。然而,这可能引发隐私泄露和数据滥用的风险。MPC的目标是通过协议设计和密码学技术,使得参与方能够在不暴露私密输入的情况下进行计算。

MPC协议通常涉及以下步骤:

  • 协议设置:所有参与方共同确定协议的参数和安全假设。通常,这包括选择合适的加密算法、密钥生成方案以及通信通道的安全性要求。
  • 输入分配:每个参与方将其私密输入进行加密,并将加密后的输入分发给其他参与方。这样,每个参与方只持有其他参与方的加密输入,而不知道实际的明文值。
  • 计算过程:参与方通过在加密输入上执行特定的计算协议,如加法、乘法、比较等,来逐步计算最终的结果。这些计算协议使用特定的密码学技术,如安全多方计算、同态加密、零知识证明等。
  • 输出恢复:最终的计算结果通过协议的输出恢复阶段进行解密,并将解密后的结果提供给参与方。

一般会采用半诚实模型

螢幕截圖 2024-04-09 下午9.51.02.png

本地差分隐私

本地差分隐私(LDP)是一种最先进的方法,在保护每个用户隐私的同时允许统计计算。与差分隐私(DP)不同,由于在本地向用户输入添加了噪声,因此不需要一个可信的数据中心。

本地差分隐私的关键思想是在个体数据的发布和分析过程中引入随机性,以防止个体的敏感信息被泄露。这通过在计算结果中添加一定程度的噪音来实现。这种方法可以在不直接访问个体数据的情况下提供对整体数据的统计分析结果,同时保护个体的隐私。

具体来说,本地差分隐私涉及以下几个关键概念:

  • 敏感性(Sensitivity):敏感性是指对于数据集中的任意两个相邻个体(仅在一个个体数据上有微小差异),在计算结果中引入的最大可能差异量。它用来衡量数据的敏感程度。
  • 随机化(Randomization):随机化是指在个体数据的发布或计算过程中引入的随机性。它可以通过在计算结果中添加噪音、扰动或随机采样来实现,以保护个体的隐私。
  • 隐私损失(Privacy Loss):隐私损失度量了通过发布或计算过程中引入的随机化来保护隐私的程度。较低的隐私损失表示更强的隐私保护。

本地差分隐私的最常见应用是在数据聚合和统计分析上。例如,一个数据持有者可以在其数据中添加一定程度的噪音,然后将噪音化的数据共享给第三方进行统计分析,而不会泄露个体的敏感信息。

白盒密码

白盒密码(White-box cryptography)是一种密码学概念,旨在在不可信的环境中保护密钥和算法的安全性。在传统密码学中,密钥和算法都是保密的,但在白盒密码中,攻击者可以完全访问和分析算法和密钥,因此需要采取额外的措施来保护其安全性。

白盒密码的目标是防止攻击者利用算法和密钥的完全访问权限来破解加密或签名过程。它通过在算法和密钥中引入混淆和随机化技术,使得攻击者无法直接获取算法和密钥的实际值,从而增加攻击的难度。

白盒密码的设计和实现是一项复杂的任务,需要综合使用密码学、软件保护和安全工程等领域的技术。一些常见的白盒密码技术包括:

  • 算法混淆(Algorithm obfuscation):通过对算法进行变换和重组,使其在实现上变得复杂和难以理解,以增加攻击者分析和逆向工程的难度。
  • 密钥保护和隐藏(Key protection and hiding):通过将密钥划分为多个部分,并将其存储在分散的位置,以防止攻击者直接访问和获取完整的密钥。
  • 随机化技术(Randomization techniques):通过在算法执行过程中引入随机性和不确定性,使攻击者无法准确预测算法的行为和结果。

SGX

SGX,即英特尔软件保护扩展(Intel Software Guard Extensions),是一种硬件级别的安全技术,旨在提供可信执行环境(Trusted Execution Environment,TEE)以保护应用程序和数据的安全性。

SGX技术利用处理器中的安全扩展指令集,为应用程序提供了一种隔离和保护的执行环境,被称为“安全容器”或“安全区域”。在SGX环境中,应用程序可以在受保护的内存区域(被称为“安全区域”)中运行,其中的代码和数据对于操作系统、虚拟机监视器或其他应用程序都是不可见的。

SGX的关键特性包括:

  • 内存隔离:SGX使用硬件隔离技术,将应用程序的代码和数据隔离在安全区域中,防止未经授权的访问和修改。
  • 完整性保护:SGX使用数字签名和哈希树等技术,确保安全区域中的代码和数据的完整性,防止被篡改或替换。
  • 加密保护:SGX可以对安全区域中的数据进行加密,以防止在内存中的数据泄露。
  • 远程验证:SGX支持远程验证,允许第三方验证安全区域的真实性和完整性,确保与受信任的执行环境进行通信。

SGX的应用场景包括保护敏感数据、安全计算外包和应用程序安全验证等。例如,企业可以使用SGX来保护其敏感数据,确保只有经过授权的应用程序可以访问和处理这些数据。在云计算环境中,SGX可以用于在不信任的主机上进行安全计算外包,使用户可以在受信任的执行环境中执行敏感计算任务,而不会泄露数据给云服务提供商。

Web安全

一个网站的渗透测试思路,流程

  • 信息收集

    • 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
    • 网站指纹识别(包括,cms,cdn,证书等),dns记录
    • whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
    • 子域名收集,旁站查询(有授权可渗透),C段等
    • google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
    • 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
    • 传输协议,通用漏洞,exp,github源码等
  • 漏洞挖掘

    • 浏览网站,看看网站规模,功能,特点等
    • 端口,弱口令,目录等扫描
    • XSS,SQL注入,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
  • 漏洞利用 | 权限提升

    • mysql提权,serv-u提权,linux内核版本提权等
  • 清除测试数据 | 输出报告

    • 日志、测试数据的清理
    • 总结,输出渗透测试报告,附修复方案
  • 复测

    • 验证并发现是否有新漏洞,输出报告,归档
  • Whois主要查的什么?

    1.域名信息 2.注册商 3.联系人 4.联系邮箱 5.网站创建时间 6.网站过期时间 7.DNS信息 8.网站状态
    

XSS(Cross Site Scripting) 跨站脚本攻击

XSS,跨站脚本攻击,允许攻击者将恶意代码植入到提供给其它用户使用的页面中。XSS涉及到三方,即攻击者、客户端与Web应用。

XSS的攻击目标是为了盗取存储在客户端的cookie或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。(获取管理员ip xss蠕虫 钓鱼攻击 前端JS挖矿 键盘记录 屏幕截图)

例:一个搜索页面,根据url参数决定关键词的内容

<input type="text" value="<%= getParameter("keyword") %>">
<button>搜索</button>
<div>
  您搜索的关键词是:<%= getParameter("keyword") %>
</div>

用户输入<script>alert('XSS');</script>拼接到 HTML 中返回给浏览器。形成了如下的 HTML:

<input type="text" value=""><script>alert('XSS');</script>">
<button>搜索</button>
<div>
  您搜索的关键词是:"><script>alert('XSS');</script>
</div>

浏览器无法分辨出 <script>alert('XSS');</script> 是恶意代码,因而将其执行。根据攻击的来源,XSS攻击可以分成:

  • 存储型
  • 反射型
  • DOM 型
  1. 存储型

    攻击者将恶意代码提交到目标网站的数据库中
    用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器
    用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
    恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    

    这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。

  2. 反射型 XSS

    攻击者构造出特殊的 URL,其中包含恶意代码
    用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器
    用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
    恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    

    反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。 反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。

    由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见

  3. DOM 型 XSS

    攻击者构造出特殊的 URL,其中包含恶意代码
    用户打开带有恶意代码的 URL
    用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行
    恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
    

    DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞

  4. XSS的预防

    XSS攻击的两大要素:

    • 攻击者提交而恶意代码
    • 浏览器执行恶意代码

    防 XSS 的核心是必须对输入的数据做过滤处理

    针对第一个要素,我们在用户输入的过程中,过滤掉用户输入的恶劣代码,然后提交给后端。前端,服务端,同时需要对 HTML 转义处理。将其中的”<”,”>”等特殊字符进行转义编码。但是如果攻击者绕开前端请求,直接构造请求就不能预防了

    而如果在后端写入数据库前,对输入进行过滤,然后把内容给前端,但是这个内容在不同地方就会有不同显示

    过滤并非可靠,需要防止浏览器执行恶意代码:

    • 在使用 .innerHTML.outerHTMLdocument.write() 时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent.setAttribute() 等
    • 如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTMLouterHTML 的 XSS 隐患
    • DOM 中的内联事件监听器,如 locationonclickonerroronloadonmouseover 等,<a> 标签的 href 属性,JavaScript 的 eval()setTimeout()setInterval() 等,都能把字符串作为代码运行。如果不可信的数据拼接到字符串中传递给这些 API,很容易产生安全隐患

CSRF(Cross-site request forgery)跨站请求伪造

CSRF:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

一个典型的CSRF攻击有着如下的流程:

  • 受害者登录a.com,并保留了登录凭证(Cookie)
  • 攻击者引诱受害者访问了b.com
  • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie
  • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
  • a.com以受害者的名义执行了act=xx
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

csrf可以通过get请求,即通过访问img的页面后,浏览器自动访问目标地址,发送请求

同样,也可以设置一个自动提交的表单发送post请求,如下:

    <form action="http://bank.example/withdraw" method=POST>
    <input type="hidden" name="account" value="xiaoming" />
    <input type="hidden" name="amount" value="10000" />
    <input type="hidden" name="for" value="hacker" />
    </form>
    <script> document.forms[0].submit(); </script> 

访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作; 还有一种使用a标签的,需要用户点击链接才会触发。 访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。

< a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">
    重磅消息!!
<a/>
  • CSRF的特点

    • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
    • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
    • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪
  • CSRF的预防

    CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。

    预防CSRF的核心思路:验证请求来源地址;关键操作添加验证码;在请求地址添加 token 并验证

    防止csrf常用方案如下:

    • 阻止不明外域的访问

    • referer 识别

      HTTP Header 中有一个字段 Referer,它记录了 HTTP 请求的来源地址。如果 Referer 是其他网站,就有可能是 CSRF 攻击,则拒绝该请求。但是,服务器并非都能取到 Referer。很多用户出于隐私保护的考虑,限制了 Referer 的发送。在某些情况下,浏览器也不会发送 Referer,例如 HTTPS 跳转到 HTTP。

    • Samesite Cookie

    • 提交时要求附加本域才能获取的信息

    • CSRF Token

      用户打开页面的时候,服务器需要给这个用户生成一个Token;对于GET请求,Token将附在请求地址之后。对于POST请求来说,要在form的最后加上。当用户从客户端得到了Token,再次提交给服务器的时候,服务器需要判断Token的有效性

    • 双重Cookie验证

    • 验证码

      通常情况下,验证码能够很好的遏制 CSRF 攻击,但是很多情况下,出于用户体验考虑,验证码只能作为一种辅助手段,而不是最主要的解决方案。

SQL注入

Sql 注入攻击,是通过将恶意的Sql查询或添加语句插入到应用的输入参数中,再在后台 Sql服务器上解析执行进行的攻击。

  • 流程如下所示:

    • 找出SQL漏洞的注入点
    • 判断数据库的类型以及版本
    • 猜解用户名和密码
    • 利用工具查找Web后台管理入口
    • 入侵和破坏
  • 例:

    用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出

    select * from user where name = ‘lianggzone’ and password = ‘’ or1=1
  • 预防方式如下:

    • Web端:
      • 有效性检验,严格检查输入变量的类型和格式
      • 限制字符串输入的长度
      • 对访问数据库的Web应用程序采用Web应用防火墙(WAF)
    • 服务端:
      • 不用拼接 SQL 字符串
      • 预编译
      • 有效性检验
      • 过滤和转义特殊字符,比如单引号、双引号
  • sqlmap盲注

    在传统的SQL注入攻击中,攻击者可以直接获取到应用程序返回的数据库错误信息或查询结果,从而了解到他们所注入的恶意SQL语句是否生效。 但在盲注(Blind)注入中,攻击者无法直接获取到这些信息,因此称之为"盲注"

    在盲注攻击中,攻击者通过构造恶意的注入语句,将其输入传递给应用程序处理。然后,攻击者观察应用程序的响应或其他可见的行为来确定注入是否成功,并进一步探测和利用数据库中的数据。

    • 基于布尔的盲注(Boolean-based Blind Injection)

      攻击者通过注入条件语句,利用应用程序中基于布尔条件的判断来获取有关数据库内容的信息。攻击者可以尝试不同的条件并根据应用程序的响应来验证其正确性。页面会返回报错信息。

      id=1 AND (SELECT COUNT(*) FROM users) > 0
      id=1 AND SUBSTRING((SELECT version()), 1, 1) = '5'
      id=1 AND ASCII(SUBSTRING((SELECT password FROM users WHERE username='admin'), 1, 1)) = 97
      id=1 AND (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public') > 10
      id=1 AND LENGTH((SELECT database())) = 6
      
    • 基于时间的盲注(Time-based Blind Injection)

      攻击者在注入语句中使用延时函数或计算耗时操作,以观察应用程序对恶意查询的处理时间。通过观察响应时间的变化,攻击者可以逐渐推断数据库中的数据。页面不会返回任何报错信息。基于时间的盲注通常会使用一些可能引起延迟或错误的操作,如睡眠函数sleep()、错误的SQL语句或其他耗时的操作。

      id=1; IF((SELECT COUNT(*) FROM users) > 0, SLEEP(5), NULL)
      id=1; IF((SELECT ASCII(SUBSTRING((SELECT password FROM users WHERE username='admin'), 1, 1))) = 97, BENCHMARK(10000000, MD5('a')), NULL)
      id=1; IF(EXISTS(SELECT * FROM information_schema.tables WHERE table_schema='public' AND table_name='users'), BENCHMARK(5000000, SHA1('a')), NULL)
      id=1; IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_name='users') = 5, SLEEP(2), NULL)
      id=1; IF((SELECT SUM(LENGTH(username)) FROM users) > 20, BENCHMARK(3000000, MD5('a')), NULL)
      

WAF Bypass

WAF(Web Application Firewall)Bypass是指绕过Web应用程序防火墙的技术或方法。

  • 关键字编码:通过对敏感关键字进行编码,如将"select"编码为"sel%e%ct",以绕过WAF的关键字检测和过滤。
  • 内联注释:使用内联注释(如"/!select/")将攻击负载中的关键字或恶意代码隐藏起来,以逃避WAF的检测。
  • 编码:对攻击负载进行多次编码,如URL编码、HTML实体编码等,使其在传输过程中难以被WAF识别和解析。
  • multipart请求绕过:通过在POST请求中添加一个合法的上传文件,绕过WAF对请求内容的分析和检测,从而绕过WAF的保护。
  • 参数绕过:使用重复参数的方式,如"id=1&id=1",以绕过WAF对参数的检测和阻止。

文件上传漏洞

指的是用户上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。

  • 判断文件类型。在判断文件类型的时候,可以结合使用 MIME Type,后缀检查等方式因为对于上传文件,不能简单地通过后缀名称来判断文件的类型,因为攻击者可以将可执行文件的后缀名称改为图片或其他后缀类型,诱导用户执行
  • 对上传的文件类型进行白名单校验,只允许上传可靠类型
  • 上传的文件需要进行重新命名,使攻击者无法猜想上传文件的访问路径,将极大地增加攻击成本,同时向 shell.php.rar.ara 这种文件,因为重命名而无法成功实施攻击
  • 限制上传文件的大小
  • 单独设置文件服务器的域名

绕过方法:

  • WAF绕过: 修改上传表单字段 表单字段大小写替换 表单字段增加或减少空格 表单字段字符串拼接 构造双文件上传表单,同时上传双文件 编码绕过 垃圾数据填充绕过 文件名大小写绕过
  • 服务器检测绕过: MIME类型绕过 前端JS检测抓包改包绕过 黑名单绕过:php3、asa、ashx、windows特性(test.asp_、流特性)、apache解析漏洞 图片内容检测使用图片马绕过 .htassess绕过
  • 白名单检测绕过: 截断上传绕过 IIS6/7/7.5解析漏洞,nginx低版本解析漏洞 文件包含绕过

DDos攻击

利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。客户端向服务端发送请求链接数据包,服务端向客户端发送确认数据包,客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认。没有彻底根治的办法,除非不使用 TCP。

对于UDP而言,在正常情况下,服务器在特定端口上收到 UDP 数据包时,将通过以下两个步骤进行响应:

  • 服务器首先检查是否有任何当前侦听指定端口请求的程序正在运行。
  • 如果该端口上没有程序正在接收数据包,则服务器将以 ICMP (ping) 数据包作为响应,以告知发送方目标不可达。

DDos 预防:

  • 限制同时打开 SYN 半链接的数目
  • 缩短 SYN 半链接的 Time out 时间
  • 关闭不必要的服务

常见形式:SYN Flood UDP Flood ICMP Flood Connection Flood HTTP Get UDP DNS Query Flood

  • CC攻击

    攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(Challenge Collapsar)

    DDoS攻击的目标是通过超过目标系统处理能力的大量流量来使其服务不可用,例如通过洪泛目标系统的网络连接或资源。而CC攻击主要针对Web应用程序,通过发送大量的HTTP请求来占用目标服务器的资源,使其无法处理合法的用户请求。

    模拟多个正常用户不停地访问如论坛这些需要大量数据操作的页面,造成服务器资源的浪费,CPU长时间处于100%,网络拥塞;

    CC攻击网页,DDOS攻击服务器,更难防御 CC门槛较低,DDOS需要大量服务器 CC持续时间长,DDOS产生的影响大

网络钓鱼

  1. 网络钓鱼的目的

    • 使用恶意软件感染设备
    • 窃取私人凭据以盗用金钱或身份
    • 接管在线账户
    • 诱骗自愿汇款或寄送贵重物品
  2. 网络钓鱼的主要手段

    网络钓鱼有多种分类方法。可以分为,邮件钓鱼、短信钓鱼、社交媒体钓鱼、语音钓鱼;也可以分类为域欺骗、点击劫持等等,下面是一些常见的网络钓鱼方式:

    • 鱼叉攻击:

      鱼叉攻击是一种较为高级的网络钓鱼攻击手法,针对特定的目标或组织,借助构造特定主题和内容的邮件、短信等第三方媒介,吸引特定目标群体打开链接或下载附件等方式的钓鱼攻击行为。鱼叉攻击实施前,攻击者需要在前期对特定目标的工作情况、生活情况及其它活动规律等进行摸底侦察,再运用社会工程学方法构造定制化的钓鱼邮件、短信等。

      这些钓鱼邮件应降低目标的防范心理,诱骗其下载附件中的带有病毒代码或者漏洞利用的伪装性攻击文档,实现精准、高效的载荷投递。

    • 鲸钓攻击:

      攻击者不针对组织内的低级别人员,而是针对高层,如首席执行官等。钓鲸的目标是经过精心挑选的,因为受害者价值很高,而被盗的信息将比普通员工提供的信息更有价值。钓鲸需要依赖于社交工程,攻击者需要更好地了解目标。通常攻击者会先从互联网和各种社交媒体平台获取目标的相关信息,然后再用此信息设计有针对性的钓鱼。

      鲸钓攻击和鱼叉攻击的区别在于,鲸钓只针对组织内的高级别人员,而鱼叉攻击的目标是重要的组织,它会向该组织内的所有员工发钓鱼邮件,而不单单针对高层。

    • 水坑攻击:

      水坑攻击是一种看似简单但成功率较高的网络攻击方式,在受害者必经之路设置了一个“水坑(陷阱)”,攻击者分析攻击目标的上网活动规律,寻找攻击目标经常访问网站的脆弱性,先将此网站“攻破”并植入攻击代码,一旦攻击目标访问该网站就会“中招”。水坑攻击手法针对的目标多为特定的团体(组织、行业、地区等),由于此种攻击借助了目标团体所信任的网站,攻击成功率很高,即便是那些对鱼叉攻击、鲸钓攻击或其他形式的钓鱼攻击具有防护能力的团体也会中招。

    • 克隆钓鱼:

      是指复制以前发送的真实邮件,但将合法附件和链接替换为恶意附件和链接。这种骗局不仅会出现在电子邮件中,也会以虚假社交媒体账户和短信等为载体。

    • 网域嫁接(DNS 缓存投毒) 使用恶意软件或现场漏洞将流量从安全网站重新路由到网络钓鱼网站。如果网站已经遭到网域嫁接,访问者即使手动输入 URL 仍会被重定向到恶意网站。

    • 双面恶魔攻击是指在咖啡店和机场等场所提供看似正规实则假冒的公共 Wi-Fi,意在诱骗受害者连接此 Wi-Fi,从而窃听所有在线活动。

  3. 网络钓鱼的防护和处理

    • 对企业:
      • 实施安全控制
        • 电子邮件扫描
        • URL过滤(黑名单)
        • 加密流量检查
      • 零信任架构:核心理念是不相信任何用户或设备,无论是内部还是外部的。它将安全重心从网络边界转移到了数据和应用层
        • 最小权限原则:用户和设备只被授予完成其工作所需的最低权限级别
        • 身份验证和授权
        • 多因素认证
        • 内部和外部流量的同等对待
      • 加强安全意识培训
      • 采取有效的网络安全对策
      • 紧急处理流程
        • 立即隔离受影响的系统:一旦发现数据泄露,立即隔离受影响的系统,断开与网络的连接,以阻止攻击者继续访问和泄露数据
        • 启动紧急响应计划:企业应该有预先制定的紧急响应计划,以便能够快速、有组织地应对安全事件。启动响应计划,召集相关团队成员,包括IT安全团队、法务部门和高级管理人员。
        • 保留证据:在采取任何行动之前,确保保留有关攻击和数据泄露的证据。这些证据有助于后续的调查和法律程序。拍摄截屏、保存相关日志、备份受影响系统的映像等。
        • 通知相关方:根据适用的法律法规和合同义务,及时通知相关方,如数据主体(用户)、合作伙伴、监管机构等。提供透明的沟通,并告知受影响方采取必要的防护措施。
        • 修复漏洞和强化安全:对受影响的系统进行彻底的检查和修复,以修补漏洞和强化安全措施。更新系统和应用程序到最新的安全补丁,重新评估权限和访问控制策略,加强密码策略,实施多因素认证等。
        • 进行事后调查:展开详尽的事后调查,以确定攻击的来源、影响范围和攻击成果。这有助于了解漏洞和薄弱点,并采取措施防止未来的攻击。
        • 告知执法机构:在某些情况下,可能需要向执法机构报告数据泄露事件。根据地区和适用法律,及时与执法机构合作,提供必要的信息和协助。
    • 对个人
      • 敏感数据警惕性(可以将鼠标悬停在链接上查看目标 URL)
      • 验证发送者身份
      • 强密码和多因素认证
      • 安装了最新的安全软件和操作系统更新

中间人攻击

中间人攻击(Man-in-the-Middle Attack,简称MITM),是一种会话劫持攻击。攻击者作为中间人,劫持通信双方会话并操纵通信过程,而通信双方并不知情,从而达到窃取信息或冒充访问的目的。中间人攻击是一个统称,具体的攻击方式有很多种,例如Wi-Fi仿冒、邮件劫持、DNS欺骗、SSL劫持等。中间人攻击常用于窃取用户登录凭据、电子邮件和银行账户等个人信息,是对网银、网游、网上交易等在线系统极具破坏性的一种攻击方式。

  1. 中间人攻击的主要步骤
    • 攻击者想办法将自己插入到通信双方的链路中,拦截通信流量,为窃取数据或冒充访问做准备
      • 如: Wifi 仿冒; DNS 欺骗;ARP 欺骗
    • 攻击者插入通信链路之后就可以操纵通信双方的通信,开始窃取数据、冒充访问等操作
      • 如: 伪造网站;解密流量…… 攻击者伪造用户访问的网站服务器证书,向浏览器发送虚假证书,浏览器无法验证证书真实性
  2. 常见的中间人攻击
    1. ARP欺骗

      攻击者污染用户的ARP缓存,达到使用户流量发往攻击者主机的目的。

      局域网用户发起访问都需要由网关进行转发,用户首先发起ARP请求获取网关IP地址对应的MAC地址,此时攻击者冒充网关向用户应答自己的MAC地址,用户将错误的MAC地址加入自己的ARP缓存,那么后续用户所有流量都将发往攻击者主机。

    2. DNS欺骗

      用户访问互联网的第一步就是向DNS服务器发起DNS请求,获取网站域名对应的IP地址,然后DNS服务器返回域名和IP地址的对应关系。攻击者利用这一过程,篡改域名对应的IP地址,达到重定向用户访问的目的。对于用户来说,浏览器访问的还是一个合法网站,但实际访问的是攻击者指定的IP地址对应的虚假网站。

    3. SSL劫持

      SSL连接,基于SSL证书进行数据验证和加密。HTTPS可以在一定程度上减少中间人攻击,但是攻击者还是会使用各种技术尝试破坏HTTPS,SSL劫持就是其中的一种。SSL劫持也称为SSL证书欺骗,攻击者伪造网站服务器证书,公钥替换为自己的公钥,然后将虚假证书发给用户。此时用户浏览器会提示不安全,但是如果用户安全意识不强继续浏览,攻击者就可以控制用户和服务器之间的通信,解密流量,窃取甚至篡改数据。

      防范:

      • 证书验证:客户端会验证服务器端的证书是否由受信任的CA签发
      • 公钥加密:HTTPS通信使用公钥加密来建立安全连接
      • 前向安全性:HTTPS通信通常使用一种称为前向安全性的技术,每次会话都使用临时的会话密钥进行加密。即使攻击者能够窃听一次通信,他们也无法解密后续的通信,因为会话密钥是动态生成的
      • 密钥固定:一些网站使用密钥固定机制,将公钥的指纹(或哈希)固定在客户端中
    4. HTTPS参见上面HTTPS最后一部分

  3. 中间人攻击的防范
  • 不随意连接公共Wi-Fi,仅连接已知可信的Wi-Fi,避免流量被恶意劫持。自有Wi-Fi不要使用路由器默认密码,设置高强度加密保护,避免被破解。
  • 确保访问HTTPS网站,可以安装开源HTTPS Everywhere浏览器插件,使浏览器自动连接HTTPS网站。
  • 不随意忽略证书不安全告警,如果产生告警说明浏览的网站可能不安全。
  • 远程访问使用VPN,保护通信流量。
  • 企事业单位部署防火墙、终端安全软件,阻断恶意攻击,并对员工进行安全意识培训。

Linux及脚本语言

Kali的使用

  • whatweb 指纹识别
  • dirb 目录扫描
  • whois whois查询
  • 无线攻击套件
  • 字典生成套件
  • 爆破工具

机器学习在安全领域的实践

AI 在网络安全的应用可以说是一场革命。它通过学习和理解网络流量模式,预测并识别潜在的威胁,从而提供更为高效、准确的网络安全保障。

  1. AI 在网络安全中的应用方式和优势

AI 在网络安全中的应用方式主要有以下几种:

  • 入侵检测:AI 可以学习网络的正常行为模式,然后检测任何偏离这些模式的行为。这可以帮助检测针对系统的未知攻击,而这些攻击可能会在传统的基于规则的侵入检测系统中被忽视。
  • 风险评估和响应:AI 可以根据已知的威胁和系统的漏洞自动评估系统的风险,并据此优化安全响应策略。
  • 预测分析:AI 可以通过收集和分析大量网络数据,预测可能的安全威胁并采取预防措施。
  • 自动化和自我修复
  • 网络安全培训:人工智能系统可用于根据真实示例对网络攻击(例如网络钓鱼尝试)进行更真实的模拟,这可用于提高网络风险意识并加强整个组织的良好网络安全实践。

AI 在网络安全中的主要优势有:

  • 大容量数据分析:人工智能系统非常擅长筛选大量数据并标记异常模式或活动。将安全、防火墙和入侵检测日志以及其他 IT 安全数据输入 AI 系统可以帮助其识别网络上的日常行为,并检测任何问题,例如可能表明存在内部威胁或正在进行的数据泄露的可疑活动。
  • 自动化、连续的控制和漏洞测试:人工智能系统有潜力用于自动连续监控和测试整个组织的网络安全控制、漏洞和补丁管理。手动执行这项工作是一个非常耗时的过程。让人工智能自动持续地执行,可以帮助您实时识别和纠正任何差距,并始终保持审计准备状态。
  • 效率提升
  • 减少误报的模式识别:AI 极为擅长模式识别,这意味着它能够更好地检测异常情况,提供行为分析并进行实时的威胁检测,如:AI 驱动式入侵检测系统,AI 驱动式电子邮件安全解决方案。
  • 沙盒网络钓鱼培训: 生成式 AI 可以为实操类网络安全培训创建逼真的网络钓鱼场景,培养员工的警惕性,并让员工为应对现实世界的威胁做好准备。
  1. AI 如何帮助检测和防止网络威胁

    以 AI 驱动的威胁猎杀系统为例,这种系统可以通过学习正常的网络行为模式,建立基准线,然后通过比较实时网络行为与基准线的偏差,检测并标记潜在威胁。一旦检测到潜在威胁,系统会立即发出警报,甚至自动采取防御措施。

  2. AI 在预测和解决网络安全问题中的能力

    预测网络安全问题方面,AI 可以通过分析历史网络流量数据,学习并预测未来可能出现的攻击模式。例如,AI 可以通过分析过去的 DDoS 攻击模式,预测未来可能会出现的 DDoS 攻击。

    解决网络安全问题方面,AI 不仅可以在攻击发生后进行迅速响应,而且还可以在攻击发生之前进行预防。例如,AI 可以通过分析潜在攻击者的行为模式,提前识别出攻击者,并采取防御措施。

  3. AI 被黑客利用的手段

    • AI 自动化恶意软件攻击: 网络犯罪分子可以利用生成式 AI 来创建复杂的恶意软件,调整其代码或行为以避免检测。这些 “智能” 恶意软件更加难以预测和控制,增加了大范围系统中断和大规模数据泄露的风险。
    • 高级网络钓鱼攻击: 生成式 AI 能够学习并模仿用户的写作风格和个人信息,使网络钓鱼攻击更具有说服力。量身定制的网络钓鱼电子邮件看似来自可信的联系人或有信用的机构,它们欺骗个人泄露敏感信息,对个人和企业的网络安全构成重大威胁。
    • 逼真的深度伪造
    • AI 需要大量数据,企业需要精准限制被共享的数据
  4. 黑客工具

    • WormGPT:不受道德限制的 “ChatGPT”
    • FraudGPT
    • Deepfake:换脸 AI 软件
  5. AI的负面影响

    • 数据偏差放大:AI 算法从历史数据中进行学习,如果用于训练的数据包含偏差,那么算法可能会无意地延续并放大这些偏差。当算法基于有偏差的数据做出决策或预测时,可能会导致不公平或歧视性结果。
    • 无意的歧视:由于训练数据或算法考虑的特征存在偏差,因此 AI 算法可能会歧视某些群体或个人。这可能会导致招聘、贷款或执法等领域的不公平待遇,这些领域的决策影响着人们的生活,但却基于其无法控制的因素。
    • 透明度和问责制:许多 AI 算法,尤其是像深度神经网络这样的复杂算法,在解释和理解方面可能具有挑战性。由于缺乏透明度,很难确定偏差被如何引入、决策被如何做出,这导致人们对出现偏见或不公平结果时的问责感到担忧。

Android/iOS无线客户端安全

深挖经历

Hint登陆平台

前端:利用Hint帮助防止克隆网站(Phishing)的攻击 后端:FLASK对密码进行Hash加密

实习: ios APP 渗透

  • iAnyGo: 修改定位

  • 尝试MySQL注入 在Intrude中选择要注入的内容($$), 注入injection payload或加载测试文件并开始攻击

  • 拦截http请求:配置iOS设备的代理,输入Burp Suite所在计算机的IP地址和监听的端口号; Proxy -> HTTP history选项卡中。在这里,你可以选择特定的请求,然后右键点击选择Send to IntruderSend to Repeater,以便修改和测试请求。

    可能的漏洞:

    • 信息泄露:拦截和修改请求可能揭示敏感信息,如用户凭据、会话标识、个人数据等。攻击者可以通过修改请求内容或查看响应信息来获取这些信息。
    • 会话劫持:通过拦截和修改请求,攻击者可以获取用户的会话标识,并在未经授权的情况下接管用户的会话,执行恶意操作。
    • 非法访问:攻击者可能修改请求以绕过访问控制机制,获取未经授权的资源或执行未经授权的操作。
    • 参数篡改:通过修改请求参数,攻击者可能导致应用程序的逻辑错误、安全漏洞或业务逻辑缺陷。
    • CSRF(跨站请求伪造):攻击者可以修改请求,使其包含针对其他网站的请求,以利用用户在其他网站上的身份验证状态,执行未经授权的操作。

实习: 钓鱼

github.com/Jiang-Feiyu…

实习: Shell Script 漏洞扫描

github.com/Jiang-Feiyu…

为了保护高风险文件扫描系统免受进程冲突的影响,可以采取以下措施:

  1. 进程隔离:将文件扫描系统的进程隔离到独立的执行环境中,确保其与其他进程隔离运行。这可以通过使用容器化技术(如Docker)或虚拟化技术来实现,以确保不同进程之间的隔离性和资源分配。

  2. 进程监控和管理:实施进程监控和管理机制,以确保对文件扫描系统的进程进行实时监控和控制。这包括监测进程的状态、性能指标和行为,以及及时采取措施来处理异常情况和冲突。

  3. 错误处理和恢复机制:实施健壮的错误处理和恢复机制,以应对进程冲突和其他异常情况。这包括捕获和处理异常、回滚操作、日志记录和通知等。

  4. 定期维护和更新, 安全审计和监测

CTF: CFB解密

密文反馈模式(Cipher Feedback Mode,CFB)。CFB是一种流密码模式,它将块密码转换为流密码。 c0cimici1c_{0} \oplus c_{i} \rightarrow m_{i} \oplus c_{i-1}

c0表示密文的第一个块,ci表示密文的第i个块,mi表示明文的第i个块,ci-1表示密文的前一个块。
c0 XOR ci表示将第一个密文块与第i个密文块进行异或操作。mi XOR ci-1表示将第i个明文块与前一个密文块进行异或操作。

加密过程:

  • 首先,明文被分割成块,每个块的大小为8个字节(64位)。
  • 对于每个明文块mi,执行以下操作:
    • 获取前一个密文块ci-1。
    • 将前一个密文块ci-1与明文块mi进行异或操作,得到结果ri。
    • 将结果ri转换为字节对象,并以大端字节序表示。
    • 将字节对象转换为十六进制字符串。
    • 发送HTTP请求到加密服务,将ri的十六进制字符串作为查询参数。
    • 从加密服务的返回结果中提取出密文块ci。

解密过程:

  • 首先,密文被分割成块,每个块的大小为8个字节(64位)。
  • 对于每个密文块ci,执行以下操作:
    • 获取前一个密文块ci-1。
    • 将前一个密文块ci-1与当前密文块ci进行异或操作,得到结果ri。
    • 将结果ri转换为字节对象,并以大端字节序表示。
    • 将字节对象转换为十六进制字符串。
    • 发送HTTP请求到加密服务,将ri的十六进制字符串作为查询参数。
    • 从加密服务的返回结果中提取出明文块miXci_1的一部分。
  • 对于每个密文块ci和对应的明文块miXci_1,执行以下操作:
    • 将明文块miXci_1转换为整数。
    • 将整数miXci_1与前一个密文块ci-1进行异或操作,得到解密后的明文块mi。
  • 重复步骤3,直到所有的密文块都被解密为对应的明文块。

密文反馈模式使用前一个密文块来加密当前的明文块,并将加密结果与当前明文块进行异或操作,从而生成密文。这种加密原理的优点是可以将块密码转换为流密码,提供了连续的加密和解密操作,适用于需要逐块处理数据的场景。它还具有反馈循环的特性,使得密文的生成具有依赖性,增加了加密的随机性和安全性。

CTF: 哈希扩展攻击

基于哈希函数的可追加性(appendability)和哈希值的唯一性特征。哈希函数是将任意长度的输入数据转换为固定长度的输出(哈希值)的函数。在正常情况下,哈希函数应该是单向的,即难以从哈希值反推出原始输入数据。然而,哈希扩展攻击利用了哈希函数的可追加性,即通过在原始数据的末尾追加额外的数据,可以直接计算出新的哈希值,而无需重新计算整个消息的哈希。

假设存在一个已知的消息M和其对应的哈希值H(M)。

攻击者希望构造一个新的消息M',满足以下条件:
    M' = M || A,其中"||"表示连接操作,A是攻击者控制的附加数据。
    H(M') = H(M) || H(A),其中"||"表示哈希值的连接操作。
    攻击者不需要知道原始消息M的内容,只需要知道它的哈希值H(M)和附加数据A。

攻击者通过以下步骤构造新的消息M':
    计算H(M)的长度,并将其与附加数据A连接起来。
    在M'的末尾追加附加数据A。
    根据哈希函数的特性,可以直接计算出新的哈希值H(M'),即H(M) || H(A)。
    攻击者可以通过哈希扩展攻击来实现一些特定的攻击目标,例如:

绕过认证:攻击者可以构造出一个合法的认证消息,而无需知道原始消息的内容。

CTF: 奶奶漏洞

螢幕截圖 2024-04-10 上午12.27.37.png
  • 目前主流越狱攻击方法有两类,一种是提示级攻击,一般需要人工策划,而且不可扩展;
  • 另一种是基于token的攻击,有的需要超十万次对话,且需要访问模型内部,还包含“乱码”不可解释。

CTF: HTML隐写

这个HTML隐写文件的破译思路可以通过以下步骤进行:

  • 色彩转换(Color Conversion):首先,需要将HTML文件中的颜色信息进行转换。在HTML中,颜色通常使用十六进制表示,例如"#FFFFFF"表示白色。可以将这些颜色值转换为RGB格式,即将十六进制的颜色值分解为红(R)、绿(G)和蓝(B)三个分量。例如,"#FFFFFF"可以转换为红色(255)、绿色(255)和蓝色(255)。
  • ASCII转换:接下来,将转换后的RGB值映射到ASCII字符。通常,每个RGB分量的取值范围是0到255,而ASCII字符的取值范围是0到127。可以将RGB值除以2,然后取整,得到一个介于0和127之间的整数,表示对应的ASCII字符。
  • Base64编码:将转换后的ASCII字符进行Base64编码。Base64是一种将二进制数据转换为可打印字符的编码方式。它将3个字节的数据编码为4个可打印字符。在这种情况下,将转换后的ASCII字符序列作为输入,进行Base64编码。

通过执行以上三个步骤,可以将原始的HTML隐写文件中的颜色信息转换为Base64编码的字符串。

CTF: 网络流量分析和数据解码

  • 利用Wireshark来捕获网络流量。这些工具可以监听网络接口,记录经过该接口的数据包。
  • 过滤并分析流量: 过滤条件可以基于协议类型、源/目标IP地址、端口号、数据包编号等。这里过滤DNS流量:在抓包工具中应用过滤条件,只显示与DNS相关的流量。可以使用过滤条件如dnsudp.port==53等。
  • 数据解码

CTF: 伪造签名

远程服务的连接是为了与服务端进行通信
进行循环猜测:
    每次循环会尝试猜测2字节的key_server,尝试所有2字节组合
    在每次循环中,使用sign函数向远程服务发送签名请求,并获取返回的签名结果s。
    在每次循环中,将当前的猜测值与之前的key_server拼接,并使用sign_message函数生成签名。
    
检查生成的签名是否与远程服务返回的签名s一致,如果一致,则说明当前的猜测值是正确的一部分。
更新key_server为正确的猜测值。
使用正确的key_server值调用get_flag函数,生成与服务端签名一致的签名,并向服务端发送请求获取标志。

Opencv: 简单的色彩/物体识别

  • 颜色空间转换函数,将原始图像从BGR颜色空间转换为HSV颜色空间
  • 创建了红色和黄色的二值掩模
  • 从二值图像中检测物体的轮廓
  • 根据轮廓计算面积,返回中心点坐标

Image-Classification

PyTorch和CNN(卷积神经网络)

  • 卷积层、激活函数、全连接层和池化层
  • 定义损失函数和优化器
  • 进行模型的训练和推理

Reference