第38天:Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯审计
1、安全开发-NodeJS-开发环境&功能实现
2、安全开发-NodeJS-安全漏洞&案例分析
3、安全开发-NodeJS-特有漏洞&代码审计
一、环境搭建-NodeJS-解析安装&库安装
文档参考(nodeJS菜鸟教程):
https://www.runoob.com/nodejs/nodejs-tutorial.html
补充nodejs相关知识->提高认识理解:
可以把nodeJS当作一个运行环境,基于Google的V8引擎,专门运行javascript;
传统js语言,源代码可以在前端浏览器查阅,基于网站apache,通过浏览器解析显示出网站界面;
而nodeJS是运行在服务端,源代码前端查阅不到,不需要apache,只需安装、配置nodeJS中相应的库,就能解析代码,从而显示网站页面;在这里浏览器发挥的作用就变小了;
1、Nodejs安装
https://nodejs.org/en
2、三方库安装
①express
Express是一个简洁而灵活的node.js Web应用框架;通过这个框架,不需要apache,也能显示网站;
②body-parser
node.js中间件,用于处理 JSON, Raw, Text和URL编码的数据。
③cookie-parser
这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
④multer
node.js中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。
⑤mysql
Node.js来连接MySQL专用库,并对数据库进行操作。
安装命令:
npm i express
npm i body-parser
npm i cookie-parser
npm i multer
npm i mysql
二、功能实现-NodeJS-数据库&文件&执行
1、基本功能实现
①Express开发
a、访问file.js文件,只有代码,没有解析显示&关闭apache,文件访问不到->如何让其解析显示在网页
b、在没有apache的情况下,导入express库->搭建网站
先启动网站
通过8081端口->浏览器访问网站
c、添加路由->读取文件的命令执行->但是不会在浏览器页面显示
d、res.sen()->在浏览器显示读取到的内容
2、任意文件读取
3、目录遍历
4、数据库操作
①数据库基本连接查询操作
②配置成网站
③sql注入
3、命令执行(RCE)
三、NodeJS安全
1、SQL注入&文件操作
2、RCE执行&原型链污染
原型链污染
如果攻击者控制并修改了一个对象的原型,(__proto__)
那么将可以影响所有和这个对象来自同一个类、父祖类的对象,下图的对象foo,zoo就是来自同一个类,所以用(__proto__)修改foo的原型->导致zoob被修改
3、NodeJS黑盒无代码分析(主要关注点->可控变量是否可以通过参数构造payload)
实战测试NodeJS安全:
判断:参考前期的信息收集
黑盒:通过对各种功能和参数进行payload测试
白盒:通过对代码中写法安全进行审计分析
四、案例应用
1、CTF方向
参考:https://f1veseven.github.io/2022/04/03/ctf-nodejs-zhi-yi-xie-xiao-zhi-shi/
2、代码审计yapi:(省略:比较复杂->目前能力不足)
审计参考:https://mp.weixin.qq.com/s/mKOlTQclji-oEB5x_bMEMg
部署:https://hellosean1025.github.io/yapi/devops/index.html
Docker:
https://github.com/MyHerux/code-note/blob/master/Program/%E5%B7%A5%E5%85%B7%E7%AF%87/Yapi/%E4%BD%BF%E7%94%A8DockerCompose%E6%9E%84%E5%BB%BA%E9%83%A8%E7%BD%B2Yapi.md
3、代码审计:https://mp.weixin.qq.com/s/fe_Kp7fOUiMXLWTY1KxSqg