前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一起玩蛇】Nodejs代码审计中的器

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

作者头像
aerfa
发布2018-06-12 10:34:09
3.1K4
发布2018-06-12 10:34:09
举报

在最近的工作中,需要对新开发的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)。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我的安全视界观 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、工具部署
    • 2.1 项目地址
      • 2.2 部署postgresql
        • 2.3 安装依赖
          • 2.4 创建数据库
            • 2.5 运行程序
            • 3、代码扫描
            • 4、总结回顾
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档