作家
登录

利用脚本注入漏洞攻击ReactJS应用程序

作者: 来源: 2017-08-10 09:49:02 阅读 我要评论

  •   type, 
  •   [props], 
  •   [...children] 
  • 这个函数可以接收留个参数:

    如不雅应用法度榜样应用了eval()来动态履行一个由你控制的注入字符串,那你就异常荣幸了。在这种情况下,你就可以随便选择你须要注入的代码了:

    1.type参数:该参数可所以一个标签名(例如'div'或'span'),或一个component类。然则在React Native中只许可component类。

    2.props参数:该参数包含一个传递给新元素的属性列表。

    3.children参数:该参数包含新元素的子节点。

    如不雅你可以或许控制个中任何一个参数的话,那么这个参数就会变成进击向量。

    注入子节点

    早2015年3月份,Daniel LeCheminant申报了一个存在于HackerOne的存储型跨站脚本马脚(XSS)。这个马脚的成因如下:HackerOne的Web应用会将用户所供给的随便率性对象算作children参数传递给React.createElement()函数。根据我们的推想,存在马脚的代码可能跟下方给出的代码比较类似:

    1. * Retrieve a user-supplied, stored value from the server and parsed it as JSON for whatever reason. 
    2. attacker_supplied_value = JSON.parse(some_user_input) 
    3. */ 
    4. render() {  
    5.  return <span>{attacker_supplied_value}</span>

    这段JSX代码将会被转译成如下所示的JavaScript代码:   

    1. React.createElement("span", null, attacker_supplied_value}; 

    如不雅个中的attacker_supplied_value是一个字符串的话(正常情况),代码将会生成一个正常的span元素。然则在当前版本的ReactJS中,createElement()函数还会接收以children参数情势传递的通俗对象。Daniel经由过程一个JSON编码的对象应用了这个马脚,他在这个对象中包含了dangerouslySetInnerHTML属性,这将许可他向React出现的输出效不雅中注入原始的HTML代码。最终的PoC代码:

    相干的马脚缓解筹划可以在React.js的GitHub主页上找到,感兴趣的同窗可以参考。在2015年11月份,Sebastian Markbåge提交了一个修复筹划:为React元素惹人了$$typeof: Symbol.for('react.element')属性。因为无法年腋荷琐注入对象引用全局JavaScript符号,所以Daniel设计的马脚应用技巧(注入child元素)就无法再应用了。

    控制元素类型

    固然我们不克不及再将通俗对象来算作ReactJS元素来应用了,然则组件注入并非弗成能实现,因为createElement()函数还可以接收type参数中的字符串数据。我们假设开辟者采取了如下所示的代码:

    1. // Dynamically create an element from a string stored in the backend. 
    2. element_name = stored_value
    3. React.createElement(element_name, null); 

    如不雅stored_value是一个由进击者控制的字符串,那我们就可以创建随便率性的React组件了。然则此时创建的是一个通俗的无属性HTML元素,而这种器械对于进击者来说是没有任何感化的。是以,我们必须要可以或许控制新创建元素的属性才可以。

    请大年夜家先看看下面给出的┞封段代码:

    1. // Parse attacker-supplied JSON for some reason and pass 
    2. // the resulting object as props. 
    3. // Don't do this at home unless you are a trained expert! 
    4. attacker_props = JSON.parse(stored_value) 
    5. React.createElement("span", attacker_props}; 

    如许一来,我们就可以向新元素中注入随便率性属性了。我们可以应用下面给出的Payload来设置dangerouslySetInnerHTML属性:

    1. {"dangerouslySetInnerHTML" : { "__html": "<img src=xonerror=’alert(localStorage.access_token)’

        推荐阅读

        WannaCry勒索病毒:全球网络攻击的幕后黑客取走比特币赎金

      此次的WannaCry病毒在蒲月份时袭击了世界各地,所用的文件加密恶意软件应用泄漏的NSA马脚进击Windows体系。据统计,WannaCry病毒感染了跨越30万台电脑,在美洲、欧洲、俄罗斯和中国令很多>>>详细阅读


      本文标题:利用脚本注入漏洞攻击ReactJS应用程序

      地址:http://www.17bianji.com/lsqh/36639.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)