1. 简述什么是存储型 XSS,什么是反射型 XSS,并说明区别。
存储型 XSS(Stored XSS),也称为持久型 XSS,是指恶意脚本被永久存储在目标服务器上,例如在数据库、消息论坛、访客日志或评论字段中。当用户访问包含恶意脚本的页面时,脚本会执行,影响所有访问该页面的用户。
反射型 XSS(Reflected XSS),也称为非持久型 XSS,是指恶意脚本包含在用户发送给服务器的请求中,并在服务器的响应中立即反射回来。通常,攻击者会诱导用户点击包含恶意脚本的链接,从而在用户的浏览器中执行脚本。
区别:
-
存储型 XSS:恶意脚本存储在服务器上,影响所有访问相关页面的用户。攻击载荷持久存在。
-
反射型 XSS:恶意脚本不存储在服务器上,仅在特定请求的响应中反射,影响点击恶意链接的用户。攻击载荷是临时的。
此外,还有一种 DOM-based XSS 类型,它发生在客户端,恶意脚本通过修改 DOM 环境在受害者的浏览器中执行(参考 OWASP XSS Types)。
2. BurpSuite 进行爆破网站密码时用到哪个模块?此模块应该怎么操作?如何判断是否攻击成功(可以写多个判断方法)?
在 BurpSuite 中,进行网站密码爆破时使用的是“Intruder”模块。
操作步骤:
-
使用 Proxy 模块拦截登录请求。
-
将拦截到的请求发送到 Intruder 模块。
-
在 Intruder 中,选择攻击类型(例如 Sniper、Cluster bomb 等)。
-
标记需要爆破的参数位置,通常是密码字段(password),如果需要,也可以包括用户名(username)。
-
加载字典文件作为有效载荷(payload),字典中包含可能的密码列表。
-
启动攻击,Intruder 将自动发送带有不同密码的请求。
判断攻击是否成功的方法:
-
响应长度:成功的登录响应可能与失败的响应有不同的长度。
-
响应内容:检查响应中是否包含特定的成功登录关键字,如“欢迎”、“登录成功”等。
-
HTTP 状态码:成功的登录可能返回 302 重定向到管理页面,而失败的登录返回 200 或 403。
-
会话 cookie:成功的登录可能会设置新的会话 cookie。
需要注意,现代网站可能实施速率限制和 CAPTCHA 等防御措施,增加爆破难度(参考 PortSwigger Burp Suite)。
3. SQL 注入漏洞的危害是什么?有哪些防御手段?
危害:
-
数据窃取:攻击者可以从数据库中获取敏感信息,如用户凭证、个人信息等。
-
数据修改:攻击者可以篡改或删除数据库中的数据。
-
权限提升:通过操纵查询,攻击者可能获得更高的权限。
-
服务器控制:在某些情况下,SQL 注入可导致执行系统命令,控制服务器。
-
拒绝服务攻击:通过删除表或执行资源密集型查询,造成服务不可用。
防御手段:
-
输入验证:对用户输入进行严格的格式和内容检查,但仅此不足以完全防止注入。
-
参数化查询:使用预编译的 SQL 语句,将用户输入作为参数传递,有效隔离 SQL 代码和数据。
-
最小权限原则:为应用程序使用的数据库账户分配最低必要的权限。
-
ORM 工具:使用对象关系映射工具(如 Hibernate、Django ORM)可以减少直接 SQL 查询,但需注意避免动态 SQL 生成带来的风险。
-
Web 应用防火墙(WAF):部署 WAF 可以检测和阻止 SQL 注入尝试,但可能存在误报(参考 OWASP SQL Injection)。
4. 跨站脚本攻击的危害是什么?有哪些防御手段?
危害:
-
恶意代码执行:攻击者在受害者的浏览器中执行脚本,可能导致多种攻击。
-
数据窃取:窃取敏感信息,如 cookie、会话令牌等。
-
账户劫持:通过窃取会话 cookie,攻击者可以冒充用户。
-
网站篡改:改变网站的外观或内容。
-
钓鱼攻击:注入虚假的登录表单以窃取凭证。
防御手段:
-
输入验证:对用户输入进行检查,但不足以完全防止 XSS。
-
输出转义:在将用户生成的内容输出到 HTML、JavaScript 等上下文时,进行适当的转义,以防止其被解释为代码。例如,在 HTML 上下文中使用 HTML 编码,在 JavaScript 上下文中使用 JavaScript 编码。
-
HttpOnly cookies:设置 cookie 的 HttpOnly 标志,防止脚本访问 cookie。
-
内容安全策略(CSP):通过 CSP 头限制脚本的加载来源。
-
安全的 DOM 方法:使用 textContent 而不是 innerHTML 等(参考 OWASP XSS Prevention)。
5. HTTP 协议中,响应头中的状态码有哪几个段,分别对应什么意思?
HTTP 响应状态码分为五个段:
-
1xx(信息):表示请求已接收,服务器正在处理。
-
2xx(成功):表示请求已成功接收、理解和接受。
-
3xx(重定向):表示需要进一步操作以完成请求,通常涉及重定向。
-
4xx(客户端错误):表示请求包含错误语法或无法被服务器满足。
-
5xx(服务器错误):表示服务器未能完成有效请求。
例如,200 OK 表示请求成功,404 Not Found 表示资源未找到(参考 RFC 7231)。
6. 在使用 SQLMap 进行 SQL 注入攻击时,针对于 MySQL 数据库和 ACCESS 数据库如果要获取到所有字段的名字需要走不同的流程,简述需要的流程和需要的 SQLMap 参数,并说明流程不一样的原因?
对于 MySQL 数据库:
- 使用
--columns
参数直接查询information_schema.columns
表获取字段名。
对于 Access 数据库:
- 由于 Access 没有
information_schema
,需要使用盲注等技术推断字段名,可能使用--technique=BEUSTQ
等参数。
原因:MySQL 提供系统表存储元数据,而 Access 不提供,需要间接方法获取(参考 SQLMap Documentation)。
7. 请解释 SQL 注入漏洞,并提供一个预防此类漏洞的策略。请简述为什么这个策略有效。
SQL 注入漏洞允许攻击者通过插入恶意 SQL 代码来执行任意 SQL 命令。
预防策略:使用参数化查询,将用户输入作为参数传递,隔离 SQL 代码和数据,防止输入影响查询结构。
有效性:参数化查询确保用户输入仅作为数据处理,不会改变 SQL 查询的结构,从而防止注入攻击(参考 OWASP SQL Injection Prevention)。
8. 请描述什么是反序列化漏洞,并例举两种防御策略。
反序列化漏洞是指在将序列化数据转换回对象时,由于未对数据进行充分验证,导致执行恶意代码或引发意外行为的安全问题。
防御策略:
-
白名单验证:仅允许反序列化预期的类。例如,在 Java 中,可以实现一个白名单,列出允许反序列化的类,拒绝其他类。
-
数据签名/加密:通过对序列化数据进行数字签名或加密,确保数据来自可信来源,并且未被篡改(参考 OWASP Deserialization)。
9. 请解释文件上传功能可能会引发哪种类型的安全漏洞,有哪些利用手段?并给出至少两种防御措施。
安全漏洞:
-
恶意文件上传
-
XXE 攻击
-
拒绝服务
-
恶意软件分发
利用手段:
-
上传 Web shell 以获取远程访问。
-
上传包含恶意内容的文件,exploits 文件解析器的漏洞。
-
使用文件上传覆盖服务器上的关键文件。
防御措施:
-
文件类型白名单:仅允许上传特定、安全的文件类型。
-
重命名文件:更改文件名和扩展名,防止文件被执行。
-
内容检查:扫描上传文件,检测恶意内容或签名。
-
将文件存储在 Web 根目录外:防止通过 URL 直接访问上传的文件。
-
设置安全权限:确保上传的文件不能被未经授权的用户执行或读取(参考 OWASP File Upload)。
10. 什么是 CSRF 攻击,它如何工作?请描述至少两种常用的防御手段。
CSRF(Cross-Site Request Forgery,跨站请求伪造)攻击是一种利用用户在目标网站上的已认证会话,诱导用户执行未经授权操作的攻击。
工作原理:攻击者创建一个恶意网页,当用户访问该网页时,浏览器会自动向目标网站发送请求,并附带用户的 cookie 等凭证。目标网站无法区分该请求是用户自愿发送的还是被诱导的,从而执行了攻击者期望的操作。
常用的防御手段:
-
CSRF 令牌:在每个表单或请求中包含一个唯一且不可预测的令牌,服务器验证该令牌是否与用户会话中的令牌匹配。
-
SameSite cookies:在 cookie 中设置 SameSite 属性为 "Strict" 或 "Lax",限制跨站请求时 cookie 的发送。
-
双重提交 cookies:将 CSRF 令牌同时存储在 cookie 和请求参数中,服务器验证两者是否一致。
-
CAPTCHA:对于敏感操作,要求用户解决 CAPTCHA,确保请求是用户自愿的。
-
重新认证:对于关键操作,要求用户重新输入密码(参考 OWASP CSRF Prevention)。
11. 在进行 Web 安全配置时,经常提到要实施“最少权限原则”。请解释该原则的含义,并且举例说明如何在 Web 服务器设置中应用这一原则。
“最少权限原则”是指在系统中,每个模块、用户或进程只应被授予执行其功能所必需的最小权限集,不多不少。
应用示例:
-
数据库用户权限:Web 应用程序使用的数据库账户应仅具有必要的权限,例如对特定表的 SELECT、INSERT、UPDATE 权限,而不具备 DROP 或 ALTER 等高危权限。
-
文件系统权限:Web 服务器进程应以一个具有有限权限的用户身份运行,例如只对 Web 文件有读权限,对上传目录有写权限。
-
进程权限:Web 服务器进程不应以 root 或管理员身份运行,以防止在被攻破时执行系统级操作。
-
网络端口:仅开放必要的端口,如 HTTP 的 80 港和 HTTPS 的 443 港,关闭其他端口以减少攻击面。
此外,在云环境中,应为服务账户分配最小必要的 IAM 角色和权限(参考 NIST Least Privilege)。
12. 如何使用 Wireshark 过滤表达式来仅显示源地址为本机,且目标端口为 80 的 HTTP 请求数据包?提供相应的过滤表达式,并解释每个部分的作用。如果想要过滤出所有 HTTP GET 请求的数据包?
过滤表达式:ip.src == [本机IP] && tcp.dstport == 80 && http
-
ip.src == [本机IP]
:过滤源 IP 地址为本机的 IP 的数据包。 -
tcp.dstport == 80
:过滤目标 TCP 端口为 80 的数据包。 -
http
:过滤包含 HTTP 协议的数据包。
请将 [本机IP]
替换为实际的本机 IP 地址。
过滤 HTTP GET 请求:http.request.method == "GET"
这个表达式会显示所有 HTTP 请求方法为 GET 的数据包(参考 Wireshark User Guide)。
评论记录:
回复评论: