用户
搜索

[原创] 菜鸟初识XSS

  • TA的每日心情
    奋斗
    2017-10-12 17:51
  • 签到天数: 110 天

    连续签到: 1 天

    [LV.6]常住居民II

    i春秋签约作家

    i春秋吹牛党

    Rank: 7Rank: 7Rank: 7

    48

    主题

    328

    帖子

    994

    魔法币
    收听
    5
    粉丝
    3
    注册时间
    2015-11-20

    核心白帽i春秋签约作者

    发表于 2017-9-19 10:20:02 1017677
    本帖最后由 细心 于 2017-9-19 02:22 编辑

    本文原创作者:细心,本文属i春秋原创奖励计划,未经许可禁止转载!
    一、前言

    这篇文章主要是介绍反射性xss和DOMxss的一般规律,通过源码以及xss平台对其进行一个分析利用,并且最后说明一下主流浏览器现在的XSS策略的完善性,可以很不错的屏蔽一些执行语句。对普通用户进行一个保护。


    、目录


    第一节 反射性XSS分析利用

    第二节 DOMxss分析利用第三节 扩展反射性XSS窃取cookie

    第四节 主流浏览器对xss语句的屏蔽支持


    第五节 总结


    、正文

    第一节 反射性XSS分析利用
    首先什么是xss?
          xss跨站脚本攻击,英文全称是Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做“XSS”


         xss攻击,通常指“黑客”(这里是褒义,主要是从事安全研究的人员)通过“HTML注入”修改了网页,插入了“恶意”的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击(当然非法为目的获取内容之类的是“骇客”)。在一开始,这种攻击演示案列是跨域的,所以叫做“跨站脚本”。但是发展到今天因为“JavaScript”的强大以及“HTML5”等网站前端应用的复杂化,是否跨域已经不重要了。但因为历史原因所以还叫"XSS".


        xss长期以来被列为客户端web安全中的头号大敌(在owasp中排在第3位)。因为XSS破坏巨大,且产生场景复杂,难以一次性解决。所以现阶段厂商共识:针对各种不同场景产生的XSS,区分对待,并且浏览器厂商的XSS过滤规则也日渐更新提高,即便如此,复杂应用环境仍是XSS的温床。


       那么,xss如何表现那?看下面的例子。


       假设一个页面用户输入的参数直接输出到页面上(即输入等于输出):
    [PHP] 纯文本查看 复制代码
    <?php
    $input = $_GET["test"];
    echo "<div>".$input."</dir>"
    
    ?>
      
    反射xss1.png
    用代码分析输入与输出不难发现问题!


    同时查看网页源码:
    反射xss2.png

    根据上述发现我们是否可以构造JavaScript语句进行执行XSS那?


    我们进行了JavaScript语句测试:

    反射XSS3.png


    查看源代码发现html页面执行了JavaScript语句造成了xss.
    反射xss4.png


    那么我们是不是就可以利用xss平台获取信息了那?
    接入可以发现JavaScript在运行了。
    反射xss5.png

    然后我们进入xss平台接受数据。

    XSS数据平台

    XSS数据平台


    从中我们可以看出浏览器后台执行了xss平台语句,把我们的数据信息提交到了XSS平台,造成了我们数据隐私的泄露,但是大家发现却没有cookie数据那?一般我们主要就是要那个的,其实是因为没有登陆的原因,所以没有cookie。

    从中也可以看出因为反射性XSS是一次性的。所以要获取数据也是比较鸡肋的,但是伪造页面或者其他的利用配合社会工程使用,或许会有不一样的发现。(基于有些人测试或许会发现不执行XSS,为什么那这个后面说,主要涉及浏览器问题)

    第二节 DOMxss分析利用


    现在我们来看看DOMXSS是如何造成的(基于理解DOM应该去看看DOM树或者推荐“w3cschool”)

    下面放图:
    DOM1.png




    DOM2.png

    DOM3.png

    DOM4.png

    DOM5.png

    从图中参数我们不难看出基于传递过程,首先加载HTML页面同时加载JavaScript,因为JavaScript加载后没有接受数值,所以为空不执行,当我们输入以后要了数值开始执行JavaScript然后进行传参显示在HTML页面上,完成一次JavaScript,当我们再次点击显出参数值的时候,因为我们输入的是JavaScript语句,所以在浏览器中会被执行,就变成了弹框框(恶意利用者就是利用这一点开始构造)。

    基于他的XSS利用或者平台构造可以参见1,或者发挥想想,其实基于web安全的角度,开发者应该避免这种BUG。

    第三节 扩展反射性XSS窃取cookie

    一言不合直接上图:
    这里我使用的BWAPP(这是一个用于教学测试的漏洞项目,如果你不知道可以去“百度”或者私密我或许我会写一个关于BWAPP的安装吧)
    我已经登陆进来了。


    反射COOKIE1.png

    反射COOKIE2.png

    反射COOKIE3.png

    反射COOKIE4.png

    通过上图:你发现了什么?假如你是开发者应如何避免这种情况。。

    或者你会说这个是反射性的危害不是特别的大,但是我在本地账户登陆了以后去点击的。(思考一下吧)


    第四节 主流浏览器对xss语句的屏蔽支


    谷歌浏览器1.png

    360浏览器2.png

    火狐3.png

    通过上图我们发现主流浏览器对于常用XSS语句都有很好的判断,只是基于规则显示在眼前的内容不同。
    或许你会说没有大“IE”我只能告诉你我不喜欢他的界面,假如你也想知道他的规则可以自行测试。

    可是你会问:既然浏览器都屏蔽了,开发者我们还用愁XSS吗?对于这我只能说你去看看“owasp top 10 2017 版”。

    一切都是套路

    第五节 总结


    从上书内容,我们不难看出有输入输出的地方或许就有XSS,作为一个开发者应该知道如何合理编程,作为一个安全从业这更应该对这些地方熟悉,好维护“世界和平 哈哈”虽然浏览器厂商的规则在进步,但是他不是“恶意利用者的借口和放弃的门槛”。要不然的话也不会是在“owasp”居高不下。

    或许你看不懂,看不懂应该去恶补“HTML JavaScript php”,或许你看的懂感觉太简单了,其实不然这个游戏才刚刚开始,前路是漫长的曲折的过程是坎坷的。结果是喜人的或者悲哀的,只能说尽量可以维持本心,且行且珍惜。


    网络安全法出台了。


















    [命运,是自己拼出来的!/color]
    发表于 2017-9-19 11:47:59
    不错,学习一下
    使用道具 举报 回复
    很可以
    使用道具 举报 回复
    发表于 2017-9-20 09:16:41
    为什么叫跨站脚本攻击?如果没记错的话,因为插入的代码不是站长的本意,所以叫跨站。你可以上维基百科去看看
    使用道具 举报 回复
    发表于 2017-9-20 11:23:53
    本帖最后由 细心 于 2017-9-20 03:32 编辑
    socket 发表于 2017-9-20 01:16
    为什么叫跨站脚本攻击?如果没记错的话,因为插入的代码不是站长的本意,所以叫跨站。你可以上维基百科去看 ...

    既然你说维基百科,那么请您去看清楚“微软安全工程师在 2000年的定义”这段话:Microsoft security-engineers introduced the term "cross-site scripting" in January 2000.[4] The expression "cross-site scripting" originally referred to the act of loading the attacked, third-party web application from an unrelated attack-site, in a manner that executes a fragment of JavaScript prepared by the attacker in the security context of the targeted domain (taking advantage of a reflected or non-persistent XSS vulnerability). The definition gradually expanded to encompass other modes of code injection, including persistent and non-JavaScript vectors (including ActiveX, Java, VBScript, Flash, or even HTML scripts), causing some confusion to newcomers to the field of information security.[5]

    XSS vulnerabilities have been reported and exploited since the 1990s. Prominent sites affected in the past include the social-networking sites Twitter,[6] Facebook,[7] MySpace, YouTube and Orkut.[8][9] Cross-site scripting flaws have since surpassed buffer overflows to become the most common publicly reported security vulnerability,[10] with some researchers in 2007 estimating as many as 68% of websites are likely open to XSS attacks.[11]
    这个单词是“domain “是”域“而站是这个单词“standing”或许翻译与中文有误吧。。 理解哪里说的是”目标域“而不是”目标站“或者我们看的不是一个维基百科。请大佬多指教,我菜鸟!
    [命运,是自己拼出来的!/color]
    使用道具 举报 回复
    发表于 2017-9-20 23:03:21
    本帖最后由 socket 于 2017-9-20 23:28 编辑
    细心 发表于 2017-9-20 11:23
    既然你说维基百科,那么请您去看清楚“微软安全工程师在 2000年的定义”这段话:Microsoft security-engin ...

    [media=0,0]http://127.0.0.1:8080/s.php?http://tudou.com/programs/view/aaaa[/media]
    使用道具 举报 回复
    发表于 2017-9-20 23:47:28
    你这一回复呢我去看了下,确实记错了。不是在维基百科看的,应该是在别的点看到的。可能我本人也比较认同这种说法吧,毕竟不一定需要从外域加载payload,特别是有csp的时候,其次呢我真的看不懂你最后一句话要表达什么意思,还有真的想知道什么是域,什么是站,求简要科普?
    使用道具 举报 回复
    发表于 2017-9-21 10:11:20
    socket 发表于 2017-9-20 15:47
    你这一回复呢我去看了下,确实记错了。不是在维基百科看的,应该是在别的点看到的。可能我本人也比较认同这 ...

    关于“域”和“站”咋说那? 首先我们要确定的是我们看的同一个版本的“”维基百科 “我没有找见中文的,我看的是英文的?不知道你看的是那个版本的?然后才好说讨论。。要不有时候或许会有”歧义“ 吧。

    [命运,是自己拼出来的!/color]
    使用道具 举报 回复
    发表于 2017-9-21 10:12:34
    K8a0c 发表于 2017-9-19 03:47
    不错,学习一下

    谢谢您的回复,您的回复,是对我的一种肯定
    [命运,是自己拼出来的!/color]
    使用道具 举报 回复
    发表于 2017-9-21 10:13:12

    谢谢您的回复,您的回复,是对我的一种肯定,更欢迎讨论,分享知识。
    [命运,是自己拼出来的!/color]
    使用道具 举报 回复
    码打的不专业,不过学习了
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册