2025年渗透测试面试题总结-某长亭-安全开发工程师(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。

目录

 长亭-安全开发工程师

一、Nmap扫描方式与TCP握手阶段对应关系

1.1 基础扫描类型与原理

1.2 高级扫描技术扩展

1.3 云环境与IPv6扩展

二、进程/线程/协程应用场景

2.1 核心概念与资源模型

2.2 现代架构演进

2.3 安全与调试考量

三、浏览器多窗口/标签进程模型

3.1 架构设计原则

3.2 资源管理与性能

3.3 安全扩展机制

四、Golang协程实现机制

4.1 G-M-P调度模型

4.2 协程生命周期管理

4.3 并发模式与性能优化

五、Shiro反序列化漏洞

5.1 漏洞原理与利用链

5.2 防御与加固措施

六、类存在性探测与反序列化炸弹

6.1 类探测技术

6.2 反序列化炸弹构造

七、前后端权限校验设计(约1200字)

7.1 认证与授权模型

7.2 细粒度权限控制

 长亭-安全开发工程师

nmap支持哪几种扫描方式,分别对应TCP三次握手的哪个阶段
进程/线程/协程,分别对应场景说明下
浏览器开启多个窗口,属于多进程还是多线程?一个窗口内的多标签呢?为什么这样设计?
golang的协程内部如何实现的
shiro反序列化说一下
如何探测是否存在谋个类(jar包)(反序列化炸弹)
如何设计前后端的权限校验

一、Nmap扫描方式与TCP握手阶段对应关系

1.1 基础扫描类型与原理
  1. SYN扫描(-sS)
    • 阶段:TCP第一次握手(SYN包发送)
    • 原理:发送SYN包后,若收到SYN-ACK则标记端口开放,立即发送RST终止连接。
    • 命令nmap -sS 192.168.1.1
    • 优势:隐蔽性强,不建立完整连接;绕过策略:适应无状态防火墙。
  2. TCP全连接扫描(-sT)
    • 阶段:完成三次握手(SYN→SYN-ACK→ACK)
    • 原理:完整建立连接后关闭,易被日志记录。
    • 场景:用于无权限发送裸SYN包的环境(如非Root用户)。
  3. FIN扫描(-sF)
    • 阶段:TCP连接关闭阶段(发送FIN包)
    • 原理:发送FIN包,开放端口会忽略,关闭端口响应RST。
    • 绕过能力:穿透部分过滤SYN包的老式防火墙。
1.2 高级扫描技术扩展
  1. UDP扫描(-sU)
    • 协议层:传输层,无握手过程
    • 挑战:高延迟与不可靠性,需结合--max-retries调整重试策略。
    • 案例:DNS(53)、SNMP(161)服务探测。
  2. ACK扫描(-sA)
    • 用途:探测防火墙规则(状态检测或简单包过滤)
    • 响应分析:无响应表示状态防火墙放行;RST表示包过滤。
  3. 隐蔽扫描(-sN/-sF/-sX)
    • 组合策略:NULL(无标志)、FIN、Xmas(FIN+URG+PUSH)扫描组合,规避IDS检测。
1.3 云环境与IPv6扩展
  1. 云服务商限制
    • AWS/Azure安全组可能屏蔽ICMP,需使用-Pn跳过主机发现。
    • 内网扫描优化:--traceroute结合VPC路由表分析。
  2. IPv6扫描(-6)
    • 地址空间挑战:使用--script targets-ipv6-multicast-initiator发现邻居节点。
    • 扩展报头处理:Nmap自动适配逐跳选项头。
  3. 容器化扫描
    • Kubernetes服务发现:nmap -p 1-65535 --script=k8s-service-discovery
    • Docker桥接网络:通过--network host扫描宿主机网络。

二、进程/线程/协程应用场景

2.1 核心概念与资源模型
  1. 进程
    • 资源分配:独立内存空间、文件句柄、网络端口。
    • 场景:数据库服务(如MySQL)、安全沙箱(如Chromium渲染进程)。
    • 隔离性:通过命名空间(Linux namespace)实现容器化。
  2. 线程
    • 共享资源:同一进程内的堆、静态变量。
    • 调度成本:上下文切换快于进程但高于协程。
    • 场景:Web服务器请求处理(如Tomcat线程池)、GUI应用响应。
  3. 协程
    • 用户态调度:无内核切换开销,适用于高并发I/O密集型任务。
    • 场景:微服务通信(gRPC异步调用)、爬虫请求管理。
2.2 现代架构演进
  1. 容器与进程
    • 单进程容器:Prometheus、Redis等强调单一职责。
    • Sidecar模式:Istio通过独立进程代理网络流量。
  2. 线程池优化
    • 动态调整:根据负载自动扩展线程数(如Java ThreadPoolExecutor)。
    • 避免锁竞争:无锁队列(如Disruptor框架)提升并发性能。
  3. 协程与事件循环
    • Go调度器:G-M-P模型实现多核并行。
    • JavaScript异步:Node.js 通过Libuv实现非阻塞I/O。
2.3 安全与调试考量
  1. 进程间通信(IPC)风险
    • 共享内存:需同步机制,易引发竞态条件。
    • 信号处理:不当的信号捕获导致拒绝服务(如SIGPIPE)。
  2. 线程安全问题
    • 竞态检测工具:Go的-race选项、Clang ThreadSanitizer。
    • 不可变数据结构:减少锁的使用(如Java String)。
  3. 协程泄漏排查
    • Go pprof:分析协程堆栈与阻塞操作。
    • 超时控制context.WithTimeout避免无限等待。

三、浏览器多窗口/标签进程模型

3.1 架构设计原则
  1. 多窗口多进程
    • 崩溃隔离:单个窗口崩溃不影响其他窗口(如Chrome)。
    • 安全沙箱:每个进程独立渲染,限制恶意脚本影响范围。
  2. 标签页进程策略
    • 单进程多标签:旧版Firefox,资源占用低但稳定性差。
    • 多进程多标签:现代浏览器(Edge、Brave)默认策略,每个标签独立进程。
  3. 进程复用优化
    • Site Isolation:同源标签共享进程,跨源标签隔离(防御Spectre攻击)。
    • Service Worker:独立进程处理后台同步与缓存。
3.2 资源管理与性能
  1. 内存共享技术
    • 共享内存池:V8引擎的ArrayBuffer跨线程传递。
    • 进程合并:超过阈值后合并闲置进程(Chrome内存优化)。
  2. GPU加速隔离
    • 独立GPU进程:防止图形驱动崩溃导致浏览器整体失效。
    • WebGL沙箱:限制着色器程序资源占用。
  3. 网络栈优化
    • 预连接复用:提前建立TCP连接加速导航。
    • QUIC协议支持:HTTP/3多路复用减少握手延迟。
3.3 安全扩展机制
  1. 沙箱逃逸防御
    • Seccomp-BPF过滤:限制渲染进程系统调用(如禁止execve)。
    • 命名空间隔离:每个进程拥有独立PID、网络命名空间。
  2. 扩展插件模型
    • 独立进程运行:Chrome插件进程与页面隔离,通过IPC通信。
    • 权限最小化:Manifest V3限制插件能力(如网络请求拦截)。
  3. 跨站脚本防御
    • 进程级同源策略:不同站点页面强制分进程渲染。
    • COOP/COEP头:跨源资源加载策略,防止Spectre攻击。

四、Golang协程实现机制

4.1 G-M-P调度模型
  1. 核心组件
    • G(Goroutine):轻量级协程,初始栈2KB,可动态扩展。
    • M(Machine):操作系统线程,绑定物理CPU核心执行代码。
    • P(Processor):逻辑处理器,管理本地运行队列与上下文。
  2. 调度流程
    • 任务窃取:空闲P从其他P或全局队列窃取G。
    • 系统调用处理:M进入阻塞时,P解绑并创建新M继续执行。
  3. 网络轮询器
    • epoll/kqueue整合:异步I/O就绪时唤醒对应G。
    • 非阻塞优化:文件操作通过netpoll转换为异步事件。
4.2 协程生命周期管理
  1. 创建与销毁
    • 栈分配:分段栈(旧版)或连续栈(新版)策略。
    • 复用机制:通过gfree链表复用已结束的G结构体。
  2. 抢占式调度
    • 基于信号的抢占:Unix发送SIGURG信号强制切换。
    • 函数调用标记:在函数序言插入抢占检查点。
  3. 调试与分析工具
    • GODEBUGgctrace=1输出GC日志,schedtrace=1000打印调度信息。
    • pprof:分析协程阻塞与竞争状态。
4.3 并发模式与性能优化
  1. Channel实现原理
    • 环形队列:无锁设计,sendqrecvq管理阻塞协程。
    • Select多路复用:随机轮询避免饥饿,scase数组管理事件。
  2. Sync包原语
    • WaitGroup:计数器实现协程同步。
    • Mutex/RWMutex:基于信号量与自旋锁混合实现。
  3. 内存模型优化
    • 逃逸分析:通过go build -gcflags="-m"确定变量分配位置。
    • Sync.Pool:减少GC压力,复用临时对象。

五、Shiro反序列化漏洞

5.1 漏洞原理与利用链
  1. RememberMe机制
    • 加密流程:序列化数据→AES加密→Base64编码→Cookie存储。
    • 密钥硬编码:早期版本使用固定密钥(如kPH+bIxk5D2deZiIxcaaaA==)。
  2. 攻击步骤
    • 构造恶意对象:使用ysoserial生成CommonsBeanutils链。
    • 加密构造:使用已知密钥加密Payload,篡改Cookie触发反序列化。
  3. 检测工具
    • ShiroScan:自动化检测密钥与利用链。
    • DNSLog验证:通过反序列化触发DNS查询确认漏洞。
5.2 防御与加固措施
  1. 密钥随机化
    • 配置shiro.inisecurityManager.rememberMeManager.cipherKey = random(16)
    • 禁止使用默认密钥,定期轮换加密密钥。
  2. 反序列化过滤
    • 使用SerializationWhitelist限制允许反序列化的类。
    • 集成Apache Commons IO的ValidatingObjectInputStream
  3. 依赖库升级
    • 升级至Shiro 1.8+,修复已知漏洞链。
    • 移除不必要的依赖(如Commons Collections)。

六、类存在性探测与反序列化炸弹

6.1 类探测技术
  1. 反序列化异常触发
    • 构造包含目标类的序列化流,观察ClassNotFoundException
    • 利用java.io.InvalidClassException 的详细错误信息。
  2. 远程类加载探测
    • LDAP引用:通过JNDI触发远程类加载,捕获DNS或HTTP请求。
    • RMI动态加载:利用RemoteObject的Codebase特性。
  3. 资源枚举技巧
    • Jar包遍历:通过ClassLoader.getResources() 枚举类路径。
    • 反射调用Class.forName() 尝试加载类,捕获异常。
6.2 反序列化炸弹构造
  1. 原理:构造深度嵌套或循环引用的对象图,导致OOM。
    • 案例HashSet嵌套HashMap,指数级增长对象数量。
  2. 防御手段
    • 限制反序列化深度:ObjectInputStream.setDepth(10)
    • 使用SafeObjectInputStream替换默认实现。

七、前后端权限校验设计(约1200字)

7.1 认证与授权模型
  1. RBAC(角色访问控制)
    • 核心元素:用户→角色→权限→资源。
    • 动态权限:基于属性(时间、位置)调整角色权限。
  2. JWT令牌设计
    • 结构优化:缩短Payload,敏感信息存服务端。
    • 刷新机制:长时效Refresh Token与短时效Access Token分离。
  3. OAuth2.0集成
    • 授权码模式:前端获取Code,后端兑换Token避免泄露。
    • JWT Profile:使用JWT作为客户端认证凭证。
7.2 细粒度权限控制
  1. 数据级权限
    • SQL重写:根据用户权限自动追加查询条件(如WHERE dept_id=?)。
    • 行级安全:PostgreSQL RLS策略动态过滤数据。
  2. 操作日志审计
    • 全量记录:使用AOP拦截敏感操作(如数据导出、删除)。
    • 区块链存证:关键操作哈希上链,防篡改。
  3. 零信任架构
    • 持续验证:每次请求验证设备指纹与用户行为。
    • 微服务间鉴权:双向TLS认证与服务网格策略(如Istio AuthorizationPolicy)。

你可能感兴趣的:(2025年渗透测试面试指南,面试,职场和发展,安全,红蓝攻防,web安全,python,java)