logo资料库

XSS漏洞挖掘及利用教程.docx

第1页 / 共73页
第2页 / 共73页
第3页 / 共73页
第4页 / 共73页
第5页 / 共73页
第6页 / 共73页
第7页 / 共73页
第8页 / 共73页
资料共73页,剩余部分请下载后查看
第一节什么都没过滤的入门情况
第二节输出在之间的情况
第三节输出在HTML属性里的情况
第四节宽字节复仇记[QQ邮箱基本通用]
第五节反斜线复仇记
第六节换行符复仇记
第七节宽字节、反斜线与换行符一起复仇记
第八节DOMXSS[显示输出]
第九节DomXss入门[隐式输出]
第十节DomXss进阶[邂逅eval]
第十一节DomXss进阶[善变iframe]
第十二节DomXss进阶[路径con]
第十三节DomXss实例[DiscuzX2.5]
第十四节FlashXss入门[navigateToURL]
第十五节FlashXss进阶[ExternalInterface.call第一个参数]
第十六节FlashXss进阶[ExternalInterface.call第二个参数]
第十七节XSS过滤器绕过[通用绕过]
第十八节XSS过滤器绕过[猥琐绕过]
第十九节存储型XSS入门[什么都没过滤的情况]
第二十节存储型XSS入门[套现绕过富文本]
第二十一节存储进阶[猜测规则,利用FlashaddCallback构造XSS]
第一节什么都没过滤的入门情况 作者:心伤的瘦子 来自: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 的模型通常是: