理论知识
01 前端基础知识
1.1 HTML基础
- 定义:HTML(超文本标记语言)用于描述网页结构。
- 标准结构:
内嵌脚本:
<script>JavaScript代码</script>
1.4 JavaScript弹窗函数
函数 | 描述 |
---|---|
alert("文本") |
仅显示“确定”按钮的提示框 |
confirm("文本") |
带“确定”和“取消”的提示框 |
prompt("文本") |
可输入文本的对话框 |
1.5 JavaScript事件
- 事件三要素:
- 事件源(如
<a>
、<div>
标签) - 事件(如单击、双击)
- 事件处理程序(如
onclick
触发的函数)
- 事件源(如
- 示例:
<img src="x" onerror="JS代码" /> <!-- 图片加载失败时执行JS -->
1.6 JavaScript伪协议
- 通过
javascript:
协议直接在URL中执行JS代码:javascript:var now = new Date(); "<h1>The time is:</h1>" + now;
- 利用示例:
<img src=javascript:alert("xss")>
02 XSS跨站脚本攻击
2.1 XSS定义
- 全称:Cross-Site Scripting(为避免与CSS混淆,缩写为XSS)。
- 原理:攻击者将恶意脚本注入到网页中,其他用户访问时触发执行。
2.2 XSS危害
类型 | 影响 |
---|---|
劫持会话 | 窃取用户Cookie |
钓鱼攻击 | 伪造登录页面 |
篡改页面 | 插入恶意内容 |
传播蠕虫 | 自动扩散攻击 |
挖矿/广告 | 消耗用户资源 |
2.3 XSS类型
类型 | 特点 | 数据流向 |
---|---|---|
反射型 | 恶意代码通过URL参数注入,用户点击触发 | URL → 浏览器 |
存储型 | 恶意代码存入数据库,用户访问页面时触发 | 数据库 → 页面 |
DOM型 | 前端JS直接操作DOM导致漏洞 | URL → 浏览器(不经过服务器) |
03 XSS漏洞利用
3.1 BeEF框架
- 功能:通过XSS漏洞劫持浏览器,执行内嵌命令(如窃取Cookie、钓鱼)。
- 攻击流程:
- 在漏洞页面插入Payload(如
<script src="恶意JS"></script>
)。 - 诱导管理员访问含Payload的页面。
- 通过BeEF控制台获取管理员Cookie并登录后台。
- 在漏洞页面插入Payload(如
04 XSS漏洞防御
4.1 XSS Filter
- 过滤用户输入中的敏感字符(如
< > ' " & # javascript
)。
4.2 输入/输出过滤
- 输入验证:检查长度、格式(如邮箱、IP地址)、合法字符。
- 输出编码:将特殊字符转为HTML实体(如
<
→<
)。
4.3 CSP(内容安全策略)
- 作用:通过白名单限制可加载的资源(如脚本、图片)。
- 示例:
Content-Security-Policy: default-src 'self' *.trusted.com
05 XSS绕过技术
方法 | 示例 |
---|---|
大小写绕过 | <ScRiPt>alert(1)</ScRiPt> |
黑名单绕过 | 使用<img src=x onerror=alert(1)> |
事件触发 | <button onclick=alert(1)>点击</button> |
编码绕过 | 使用十六进制/Unicode编码(如javascript: → \x6A\x61\x76\x61... ) |
练习资源
- XSS挑战平台:
- http://xss-ctf.xiejiahe.com/
- http://test.ctf8.com/
相关操作
DOM型
XSS(DOM) | |
xss_d/?default=English123 | ![]() |
xss_d/?default=English 123<script>alert(1)</script> |
![]() |
网站源码 | |
view source | ![]() |
xss_d/?default=English123"</option><script>alert(1)</script> | ![]() |
反射型
反射型 | ![]() |
<script>alert(1)</script> | |
查看源码 |
存储型
评论一直存在 | ![]() |
更改限制 <input name="txtName" type="text" size="30" maxlength="30"> |
![]() |
<script>alert(2)</script> <script>alert(1)</script> |
|
每次访问这个页面都会重新加载代码并弹窗 | |
当有人访问就会被攻击 使用Easy XSS保存常用语句 |
![]() |