2025年渗透测试面试题总结-某 欧科云链-安全开发(题目+回答)

发布于:2025-04-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

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

目录

 欧科云链-安全开发

SQL注入如何判断数据库类型

核心判断方法

扩展思路

XSS除了打Cookie还有什么利用思路

其他利用方向

高级攻击场景

代码审计流程

核心步骤

扩展实践

Filter的作用域

作用域分类

扩展说明

可能产生反序列化漏洞的业务场景

防御建议

除了readObject,其他反序列化触发点

扩展案例

反序列化失败的可能原因

调试方法

AST(抽象语法树)

核心概念

扩展分析

代码生成AST的方法

核心步骤

工具示例

不经过IR直接生成AST的缺陷

直接解析的局限性

对比LLVM的优势

提权方法(除EXP外)

防御措施

SUID提权生命周期

经典案例

Windows烂土豆提权

原理与步骤

免杀技术分类

对抗检测

HIDS(主机入侵检测系统)流程

工具示例

LAST(日志分析安全技术)与RASP(运行时应用自保护)区别

埋点深度影响

Log4j埋点策略对比

安全建议

百度IAST实现与主动/被动式区别

百度实践

符号执行与约束求解

可直接Fuzz检测的漏洞类型

工具推荐

 欧科云链-安全开发

sql注入如何判断数据库类型
xss除了打cookie还有什么利用思路
代码审计流程
filter的作用域
哪些业务场景可能会出现反序列化漏洞
除了readobject,还有哪些反序列化漏洞
反序列化失败吗,可能有哪些原因
AST是?
代码如何生成AST    
有没有不经过IR阶段(比如借组LLVM),直接生成AST的方法,与前者相比有何缺陷
抛开exp,如何提权(烂土豆、suid、mysql提权)
suid提权的生命周期
Windows烂土豆提权
免杀相关:webshell免杀、静态免杀、动态免杀、shellcode免杀
HIDS的流程是什么
LAST与RASP的区别
俩者在埋点深浅上有何区别(同类漏洞、如何做埋点处理)
埋点的深浅对于检出率有何影响
log4j做埋点,直接在log4j的Class里做hook,和直接hook jndi的initial和lookup有什么区别(算上对和上面哪个问题的提示)
百度的IAST是怎么做的,主动式和被动式的区别
俩种方法是否会产生脏数据
符合执行如何做约束求解
哪些漏洞可以直接fuzz检测到

SQL注入如何判断数据库类型

核心判断方法
  1. 错误信息特征
    • MySQL:错误信息包含 You have an error in your SQL syntax,版本查询可通过 SELECT @@version
    • Oracle:错误信息常包含 ORA- 前缀(如 ORA-00933: SQL command not properly ended),版本查询用 SELECT * FROM v$version
    • MSSQL:错误信息可能包含 Microsoft SQL Server 标识,版本查询用 SELECT @@VERSION
  2. 函数与语法差异
    • 注释符
      • MySQL:#-- (需空格)
      • MSSQL:--
    • 字符串拼接
      • MySQL:CONCAT()
      • Oracle:|| 操作符
    • 时间盲注函数
      • MySQL:SLEEP(5)
      • MSSQL:WAITFOR DELAY '0:0:5'
  3. 联合查询列数探测
    通过 ORDER BY 递增列数观察报错,不同数据库的默认列数可能不同。例如:
    • MySQL:联合查询需列数一致,否则报错 The used SELECT statements have a different number of columns
    • PostgreSQL:报错显示为 each UNION query must have the same number of columns
扩展思路
  • 版本函数探测:通过注入 version()db_name() 等函数获取数据库标识。
  • 系统表查询
    • MySQL:information_schema.tables
    • MSSQL:sysobjects
    • Oracle:all_tables
  • 协议与端口辅助判断:结合服务端口(如MySQL默认3306、MSSQL默认1433)缩小范围。

XSS除了打Cookie还有什么利用思路

其他利用方向
  1. 钓鱼与社交工程
    • 伪造登录页面:通过XSS注入 <iframe> 加载钓鱼页面,诱导用户输入账号密码。
    • 劫持用户操作:通过JavaScript模拟点击(如 document.forms[0].submit() )实现自动转账。
  2. 浏览器漏洞利用
    • 结合浏览器0day(如CVE-2021-21224)执行系统命令或下载恶意软件。
    • 利用WebRTC获取内网IP,辅助内网渗透。
  3. 资源滥用与破坏
    • 挖矿脚本:注入加密货币挖矿代码(如Coinhive脚本)。
    • DDoS攻击:通过 fetchXMLHttpRequest 发起大量请求攻击第三方站点。
    • 数据篡改:修改页面内容(如商品价格、公告信息)造成业务影响。
高级攻击场景
  • 结合CSRF:通过XSS窃取CSRF Token,绕过同源策略发起跨站请求。
  • 键盘记录:监听 onkeypress 事件窃取用户输入。
  • 界面伪装:覆盖页面元素(如“支付成功”弹窗)欺骗用户。

代码审计流程

核心步骤
  1. 信息收集与准备
    • 确定审计目标(如Java Spring、PHP Laravel)。
    • 获取代码仓库、依赖库列表及配置文件(如 pom.xmlcomposer.json )。
  2. 白盒静态分析
    • 工具辅助:使用 SonarQubeSemgrep 扫描常见漏洞(如SQL注入、硬编码密钥)。
    • 敏感函数追踪:搜索 eval()Runtime.exec() 等危险函数调用链。
  3. 动态调试与验证
    • 黑盒测试:结合Burp Suite拦截请求,验证输入点是否可控。
    • 断点调试:通过IDE(如IntelliJ、VS Code)跟踪数据流,确认漏洞触发路径。
扩展实践
  • 依赖库漏洞检测:使用 OWASP Dependency-Check 扫描第三方库(如Log4j 2.x)。
  • 架构风险分析:检查认证逻辑(如JWT实现)、权限控制(如RBAC)是否合理。
  • 历史漏洞复现:针对已知CVE(如Fastjson反序列化)检查修复情况。

Filter的作用域

作用域分类
  1. 全局过滤器(Global Filter)
    • 应用于所有请求(如Spring的 @WebFilter("/*"))。
    • 典型场景:统一编码设置、日志记录、XSS防御。
  2. 局部过滤器(Local Filter)
    • 通过URL模式匹配特定请求(如 @WebFilter("/admin/*"))。
    • 应用场景:权限校验、API限流。
  3. 类/方法级过滤器
    • 通过AOP实现(如Spring的 @Around 注解)。
    • 示例:事务管理、性能监控。
扩展说明
  • Servlet与Spring对比
    • Servlet Filter:通过 web.xml 配置,作用域由 <url-pattern> 定义。
    • Spring Interceptor:基于HandlerMapping,支持更细粒度控制(如排除静态资源)。
  • 优先级控制:通过 @Order 注解或 web.xml 中的 <filter-mapping> 顺序定义执行链。

可能产生反序列化漏洞的业务场景

  1. 远程通信协议
    • RPC框架:Dubbo、gRPC 使用Hessian、Protobuf序列化,若未校验数据来源可能导致RCE。
    • HTTP接口:接收JSON/XML数据的接口使用 ObjectMapper 反序列化(如Jackson的 enableDefaultTyping 开启多态)。
  2. 会话管理
    • Session存储:部分框架将会话数据序列化后存储(如Redis),攻击者可篡改Session实现身份伪造。
    • Cookie反序列化:Java的 CookieHelper 直接反序列化用户可控的Cookie值。
  3. 配置文件与数据传输
    • YAML/XML配置解析:SnakeYAML、XStream解析恶意配置导致代码执行。
    • 消息队列:Kafka、RabbitMQ消费者反序列化消息时触发漏洞。
防御建议
  • 使用安全反序列化库(如JSON的 JsonReader 替代 ObjectMapper)。
  • 禁用多态类型(如Jackson的 @JsonTypeInfo 注解需谨慎使用)。

除了readObject,其他反序列化触发点

  1. XMLDecoder反序列化
    • Java中通过 XMLDecoder.readObject() 解析XML数据,可执行任意代码(如 <java> <void class="java.lang.ProcessBuilder">...</void> </java>)。
  2. YAML解析漏洞
    • SnakeYAML的 yaml.load() 支持构造恶意对象(如 !!javax.script.ScriptEngineManager 触发SPI机制)。
  3. JSON多态利用
    • Fastjson的 @type 指定恶意类(如 com.sun.rowset.JdbcRowSetImpl 触发JNDI注入)。
扩展案例
  • Groovy反序列化:通过 MethodClosure 执行系统命令。
  • PHP反序列化魔术方法__destruct()__wakeup() 中调用危险函数。

反序列化失败的可能原因

  1. 数据格式不兼容
    • 序列化与反序列化的类版本不一致(如 serialVersionUID 变更)。
    • 字段类型或结构变更(如新增字段未被处理)。
  2. 依赖缺失或冲突
    • 反序列化所需的类未在ClassPath中(如第三方库未引入)。
    • 类加载器隔离(如Tomcat的Web应用类加载机制)。
  3. 安全限制触发
    • JVM安全管理器(SecurityManager)禁止某些操作(如文件读写)。
    • 反序列化过滤器(ObjectInputFilter)拦截恶意类。
调试方法
  • 查看堆栈跟踪确认类加载失败位置。
  • 使用 -Dsun.io.serialization.extendedDebugInfo=true 输出详细序列化信息。

AST(抽象语法树)

核心概念
  1. 定义与结构
    • AST是源代码的树状表示,每个节点对应语法结构(如函数声明、循环语句)。
    • 示例:if (x > 0) { print(x); } 解析为 IfStatement 节点,包含条件表达式和代码块。
  2. 应用场景
    • 编译器:用于语法检查、代码优化(如删除无用代码)。
    • 静态分析:检测代码缺陷(如空指针引用)。
    • 代码转换:Babel将ES6+代码转换为ES5。
  3. 生成工具
    • Java:JavaParser、ANTLR。
    • Pythonast 模块。
扩展分析
  • 与CFG的区别:控制流图(CFG)关注执行路径,AST关注语法结构。
  • IDE集成:VS Code的语法高亮和代码提示依赖AST解析。

代码生成AST的方法

核心步骤
  1. 词法分析(Lexical Analysis)
    • 将源代码分割为Token(如标识符、关键字、运算符)。
  2. 语法分析(Parsing)
    • 根据语法规则(如BNF)将Token组合为语法树节点。
  3. 树形结构构建
    • 递归下降、LL/LR算法生成AST。
工具示例
  • ANTLR:通过 .g4 语法文件定义规则,自动生成解析器。
  • Roslyn(C#):提供API直接操作AST。

不经过IR直接生成AST的缺陷

直接解析的局限性
  1. 优化难度大
    • 缺乏中间表示(IR)难以实现跨平台优化(如LLVM的IR支持多种后端)。
  2. 代码复用性低
    • 每种语言需独立实现解析器,无法复用通用优化逻辑。
  3. 性能损耗
    • 直接生成机器码需处理复杂细节(如寄存器分配),易产生低效代码。
对比LLVM的优势
  • LLVM通过IR层实现语言无关的优化,提升编译效率。

提权方法(除EXP外)

  1. SUID提权
    • 查找具有SUID权限的文件:find / -perm -4000 2>/dev/null
    • 利用条件:文件属主为root且存在漏洞(如旧版 pkexec)。
  2. 环境变量劫持
    • 通过 LD_PRELOAD 注入恶意动态库,劫持合法进程。
  3. MySQL提权
    • 利用 FILE 权限写WebShell或SSH密钥。
    • 通过UDF执行系统命令(需插件目录写入权限)。
防御措施
  • 定期检查SUID/SGID文件,删除不必要的权限。
  • 限制MySQL用户权限,禁用 FILEPROCESS

SUID提权生命周期

  1. 发现阶段
    • 枚举SUID文件,筛选属主为root的可执行文件。
  2. 利用阶段
    • 通过路径劫持(如 PATH 环境变量)或参数注入执行恶意代码。
  3. 清理阶段
    • 删除临时文件,清除日志(如 /var/log/auth.log )。
经典案例
  • CVE-2021-4034(PwnKit)pkexec 的SUID提权漏洞。

Windows烂土豆提权

原理与步骤
  1. 令牌模拟攻击
    • 利用Windows的令牌模拟机制,将服务账户权限提升至SYSTEM。
  2. 操作流程
    • 使用 JuicyPotatoRogueWinRM 触发COM对象加载。
    • 监听本地端口,捕获SYSTEM权限的令牌。
  3. 防御建议
    • 禁用非必要的COM组件,限制服务账户权限。

免杀技术分类

  1. WebShell免杀
    • 混淆:使用Base64、异或加密绕过正则检测。
    • 动态加载:通过 eval($_POST['code']) 分离恶意代码。
  2. 静态免杀
    • 修改特征码:重写函数名、删除敏感字符串。
    • 加壳保护:使用UPX或自定义壳加密二进制。
  3. 动态免杀
    • 内存加载:反射注入或Process Hollowing不落地执行。
    • API混淆:动态解析函数地址(如 GetProcAddress)。
对抗检测
  • 使用合法证书签名恶意文件。
  • 利用合法进程(如 msiexec.exe )加载恶意模块。

HIDS(主机入侵检测系统)流程

  1. 数据采集
    • 收集进程、文件、网络、日志等数据(如Auditd、Sysmon)。
  2. 行为分析
    • 基于规则(YARA)或机器学习检测异常(如可疑进程链)。
  3. 响应与阻断
    • 隔离主机、终止恶意进程、修复漏洞。
工具示例
  • Osquery:通过SQL查询实时监控主机状态。
  • Wazuh:集成威胁情报和自动化响应。

LAST(日志分析安全技术)与RASP(运行时应用自保护)区别

  1. 部署位置
    • LAST:基于日志分析,部署在独立服务器。
    • RASP:嵌入应用运行时(如Java Agent)。
  2. 检测能力
    • LAST:依赖日志完整性,可能漏报。
    • RASP:实时监控代码执行流,精准检测漏洞。
  3. 性能影响
    • LAST:低延迟,仅日志存储开销。
    • RASP:可能增加应用响应时间(5%-10%)。
埋点深度影响
  • 深埋点:在框架底层(如Servlet)拦截,覆盖所有请求但实现复杂。
  • 浅埋点:在业务代码层检测,易实现但可能遗漏底层漏洞。

Log4j埋点策略对比

  1. Log4j类Hook
    • 优势:覆盖所有日志输出,拦截漏洞触发前的恶意输入。
    • 缺陷:无法防御绕过日志的JNDI注入(如直接调用 InitialContext.lookup )。
  2. JNDI API Hook
    • 优势:直接阻断JNDI请求(如禁用 ldap:// 协议)。
    • 缺陷:需修改JVM参数或核心库,兼容性风险高。
安全建议
  • 升级Log4j至2.17.0+,默认禁用JNDI。
  • 使用Security Manager限制JNDI协议。

百度IAST实现与主动/被动式区别

  1. 主动式(插桩)
    • 原理:在应用中插入探针,跟踪数据流(如污点分析)。
    • 优势:高检出率,支持复杂漏洞(如业务逻辑错误)。
    • 脏数据问题:通过请求标记区分测试流量与实际用户数据。
  2. 被动式(流量分析)
    • 原理:镜像流量解析,匹配漏洞模式(如SQL注入特征)。
    • 优势:无侵入性,支持多语言。
    • 脏数据风险:测试流量可能污染生产数据(如写入测试订单)。
百度实践
  • 混合模式:主动插桩结合流量分析,平衡覆盖率和性能。
  • 数据隔离:测试环境与生产环境隔离,避免脏数据。

符号执行与约束求解

  1. 符号执行流程
    • 路径探索:遍历程序分支,生成路径条件(如 if (x > 0))。
    • 约束生成:将路径条件转换为数学表达式(如 x > 0 ∧ y = x + 1)。
    • 求解输出:使用SMT求解器(如Z3)生成具体输入值。
  2. 应用场景
    • 漏洞检测:发现整数溢出、缓冲区溢出。
    • 代码验证:证明程序满足特定安全属性。
  3. 挑战
    • 路径爆炸:循环和递归导致路径数量指数增长。
    • 复杂约束:浮点数运算、非线性方程难以求解。

可直接Fuzz检测的漏洞类型

  1. 输入验证漏洞
    • SQL注入/XSS:通过模糊测试触发数据库报错或脚本执行。
  2. 协议解析漏洞
    • 缓冲区溢出:发送超长或畸形数据包(如Heartbleed漏洞)。
  3. 文件解析漏洞
    • PDF/Office漏洞:构造恶意文件触发解析器崩溃(如CVE-2017-0199)。
工具推荐
  • AFL(American Fuzzy Lop):基于覆盖率的模糊测试工具。
  • Boofuzz:网络协议模糊测试框架。

网站公告

今日签到

点亮在社区的每一天
去签到