【一起玩蛇】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

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

发表于

我来说两句

4 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

树莓派:最好的安排

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载。

502
来自专栏FreeBuf

Empire:PowerShell后期漏洞利用代理工具

文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! Empire是一个纯碎的PowerShell后期漏洞利用代理工具,它建立在密码学、...

2066
来自专栏张戈的专栏

解决启用WP-Super-Cache后出现的几个问题

近期,随着新版互推联盟自适应 iframe 代码的推出,调用的博友也慢慢增加了 ,这是很高兴的事情,也有博友反应调用的这个页面加载会有点慢。我来说明一下,因为这...

3306
来自专栏张戈的专栏

解决卸载WP No Category Base插件后页面出现404的问题

其实这个插件已经卸载几天了,用了歌神分享的代码版。今天改代码时候,刷新主题的几个文件,包括 functions.php,结果悲剧的事情发生了: ? 所有文章页面...

3287
来自专栏Vamei实验室

树莓派:最好的安排

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载。

1123
来自专栏晨星先生的自留地

如何快速的搭建漏洞环境到复现到PoC

2471
来自专栏Fred Liang

Python 虚拟环境方案比较

最近在写一个网站后台,由于涉及到阿里云的 SDK ,而阿里云在自己的源(https://mirrors.aliyun.com)上发布的 SDK 要新,因此在设置...

482
来自专栏嵌入式程序猿

疯传|freeRTOS在恩智浦KV46MCU上的移植

经过前面对freeRTOS源码目录结构和例程的分析,接下来我们就动手来移植freeRTOS最新版源码包到NXP的kinetis系列KV46MCU上,并实现一个简...

2717
来自专栏Java工程师日常干货

工程化专题之Maven(上)前言Thinking in Maven

在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案...

1025
来自专栏*坤的Blog

智动大闯关密码游戏记录

这个是之前玩过的一个网页闯关游戏,只是玩过,但是卡在一个关卡没有通过,希望寻求一下帮助,智动大闯关。

962

扫码关注云+社区