【一起玩蛇】Nodejs代码审计中的器

在最近的工作中,需要对新开发的Nodejs系统进行代码安全review,于是便有了这篇文章。关于Nodejs的安全问题,可能涉及到SSJS注入(服务端JavaScript注入)和身份认证,以及Http头相关的安全设置等安全隐患。为了提高效率,找到了一款python写的代码审计工具NodeJsScan,这里也将主要介绍Nodejs代码审计的一些安全参考及部署、使用过程。在此之前,还是想先分享一些技术之外的东西,不如先来品尝一下开胃菜吧。

1、一起读书


“无论在什么情况下,我都决意要保持喜悦与快乐,因为我经验中学到,我们的快乐或痛苦,很大一部分取决于我们的性情,而不是环境。”

——玛莎.华盛顿

人生随着我们展现:我们生命中的每一件事,绝对都是我们给出去的思想和感觉的结果。一个人好比是一个容器(身体+精神),应该让不好的东西流出,让好的东西流入,因为可用容积是有限的话,好的多了,坏的自然就会变少。

——我的阅读摘抄与思考.《独处,我学会了哲思》

2、工具部署


NodeJsScan是 Ajin Abraham 开发的一款静态代码分析工具。它使用了大量的正则表达式规则来扫描可能的漏洞代码和不安全的配置,同时允许用户扩展自己的功能。

2.1 项目地址

访问并下载

https://github.com/ajinabraham/NodeJsScan

2.2 部署postgresql

参考地址

https://www.cnblogs.com/winkey4986/p/5360551.html

Postgrelsql下载地址

http://get.enterprisedb.com/postgresql/postgresql-9.2.4-1-windows-x64-binaries.zip

下载后解压至D盘,并创建新文件夹data

使用脚本设置环境变量,编辑批处理文件sql.vbs

on error resume nextset sysenv=CreateObject("WScript.Shell").Environment("system") '系统环境变量的数组对象Path = CreateObject("Scripting.FileSystemObject").GetFolder(".").Path'添加变量sysenv("PGHOME")=" D:\postgresql-9.2.4-1-windows-x64-binaries\pgsql"sysenv("PGHOST")="localhost"sysenv("Path")=sysenv("PGHOME")+"\bin;"+sysenv("Path")sysenv("PGLIB")=sysenv("PGHOME")+"\lib"sysenv("PGDATA")=sysenv("PGHOME")+"\data" wscript.echo "PostgreSQL环境变量安装成功!不需要重新启动计算机啊!"

运行vbs脚本

进入bin文件夹,初始化数据库

.\initdb.exe -D D:\postgresql-9.2.4-1-windows-x64-binaries\pgsql\data

指定DB超级用户的用户名为cook,密码为xxooyy

.\initdb.exe -E UTF-8 --local=chs -U cook -W-E :指定DB的超级用户的用户名cook--locale:关于区域设置(chinese-simplified-china)-U :默认编码格式chs-W :为超级用户指定密码的提示

需要指定数据所在目录,回到最开始

.\initdb.exe -D D:\postgresql-9.2.4-1-windows-x64-binaries\pgsql\data -E UTF-8 --locale=chs -U cook -W

清空目录下文件,重新建立

输入设置的密码xxooyy之后,继续正常运行

启动数据库

D:\postgresql-9.2.4-1-windows-x64-binaries\pgsql\bin\"pg_ctl -D "D:/postgresql-9.2.4-1-windows-x64-binaries/pgsql/data" -l logfile start -U cook -P xxooyy使用pgAdmin4连接是否成功

使用pgAdmin4连接成功

2.3 安装依赖

解压并进入NodeJsScan-master文件夹,使用pip install进行相关依赖的安装

2.4 创建数据库

先使用Admin4创建数据库nodejsscan

其次修改/core/settings.py文件,配置Flask-SQLAlchemy访问数据库URL

在执行createdb.py创建数据库

PS C:\Users\admin\Desktop\NodeJsScan-master> python .\createdb.py

2.5 运行程序

PS C:\Users\admin\Desktop\NodeJsScan-master> python .\app.py

访问http://0.0.0.0:9090不出现系统页面,访问http://localhost:9090/出现页面

3、代码扫描


上传以zip形式压缩的NodeJs代码即可扫描

上传完成后在页面上表现不明显,但是在PowerShell中可以看到在解压

当静态扫描完成后,页面将显示出有风险的项目

点击详情可以查看到具体漏洞描述、对应文件对应行数以及可以直接打开源代码

安全正确配置Express BodyParser处理上传文件可能造成大量服务器资源被占用,若在项目中未使用到可以删除该部分代码中的bodyParser()。

4、总结回顾


在此示例中,NodeJsScan扫描出bodyParser()与多个http头部安全属性设置的安全风险,其部署过程也相对简单,如果内部有Nodejs写的相关系统,不防一试。但是对于其他的漏洞类型,比如硬编码密码,该工具并没有任何反应,需要手工来弥补。更多的Nodejs测试项可以参考:Node.js 安全清单(https://linux.cn/article-6417-1.html)。

如果你有更好的相关资料与工具、心得,不防来留言交流~

原文发布于微信公众号 - 我的安全视界观(CANI_Security)

原文发表时间:2018-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pulsar-V

PHP微信开发入门(二)

微信服务器消息推送 微信的消息推送方式是客户操作微信发生一系列事件,然后腾讯微信服务器发送一个XML数据POST请求把事件描述发送到你填写的服务器URL上,你的...

2986
来自专栏坚毅的PHP

进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还...

3543
来自专栏FreeBuf

Flash XSS检测脚本的简单实现

前言 这里主要是讲如何快速扫描到有问题的flash文件,用于批量,有时候很笨的方法也会有奇效,下面记录一下在实现过程中的一些思路和遇到的一些坑。 ? 第三方插件...

2415
来自专栏何俊林

Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现

前言:上篇中介绍OMX事件回调,从今天开始,走入Codec部分之OpenMAX框架里。看下今天的Agenda如下: 一张图回顾音视频同步 一张图看清OpenMA...

22910
来自专栏腾讯Bugly的专栏

内存泄露从入门到精通三部曲之排查方法篇

1 最原始的内存泄露测试 重复多次操作关键的可疑的路径,从内存监控工具中观察内存曲线,是否存在不断上升的趋势且不会在程序返回时明显回落。 这种方式可以发现最基本...

37314
来自专栏Golang语言社区

进程、线程、轻量级进程、协程和go中的Goroutine

进程、线程、轻量级进程、协程和go中的Goroutine 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿电话面试被问到go的协程,曾经的军伟...

4326
来自专栏开发与安全

套接字socket 的地址族和类型、工作原理、创建过程

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为...

23511
来自专栏大内老A

《WCF技术剖析》博文系列汇总[持续更新中]

近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析(卷1)》的写作,一直无暇管理自己的Blog。在《WCF技术剖析(卷1)》写作期间,对WCF又有了新的感...

1678
来自专栏烂笔头

在Python应用中使用MongoDB

目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个...

3914
来自专栏枕边书

解决问题,别扩展问题

最近有个需求需要统计一个方法的耗时,这个方法前后各打出一条日志,类似于 [INFO] 20180913 19:24:01.442 method start/en...

541

扫码关注云+社区