SSJI - Node.js漏洞介绍

搜索公众号:白帽子左一,领配套练手靶场,全套安全课程及工具 

一、SSJI简介

ssji,为服务器端的javascript注入,可分为sql注入和代码注入

运行于服务端的javascript常用的有node.js

node.js 是运行于服务端的javascript

把javascript变为服务器端的脚本语言

二、SSJI代码注入

SSJI代码注入原理
SSJI 代码注入是一个存在于javascript端的代码注入,存在于运行于服务端的js代码注入,当传入的参数可控且没有过滤时,就会产生漏洞,攻击者可以利用js函数执行恶意js代码

SSJI代码注入常用函数

node.js 常用的命令执行函数,由于它是运行于服务端的javascript,因此它使用的函数和javascript的相似

常用函数如下
eval() settimeout() setinterval() function()

首先看下这里的eval函数

eval
函数格式eval(string)

javascript的eval作用就是计算某个字符串,并执行其中的js代码

测试代码

var express = require("express");

var app = express();



app.get('/',function(req,res){
   

    res.send(eval(req.query.a));

console.log(req.query.a);

})



app.listen(3002);

console.log('Server runing at http://127.0.0.1:3002/');

这里的参数a通过get传参的方式传入运行,我们传入参数会被当作代码去执行

这里传入一个console.log()的查看效果,console.log的作用是在控制台查看回显

图片

看到这里能在控制台回显数据

function()
函数用法

function(string)()

这里的string就是我们传入的参数

这里的function用法类似于php里的create_function

这里用一个简单的测试代码测试下function是否可以执行代码

var express = require("express");

var app = express();



var aaa=Function("console.log('Hello world')")();



var server = app.listen(3088, function() {
   

    console.log("应用实例,访问地址为 http://127.0.0.1:3088/");

})

图片

实际测试时,当传入参数可控时,可能造成代码执行漏洞

settimeout()
函数格式
settimeout(function,time)
该函数作用是两秒后执行函数
function处为我们可控的参数

测试代码

var express = require("express");

var app = express();



setTimeout(() => {
   

  console.log("console.log('Hello world')");

}, 2000);



var server = app.listen(8888, function() {
   

    console.log("应用实例,访问地址为 http://127.0.0.1:8888/");

})

两秒后执行

函数测试效果如下

图片

当这里为一个可控的传参时,漏洞就可能触发

setInterval() 函数
函数格式(function,time)

该函数的作用是每个两秒执行一次代码

测试代码

var express = require("express");

var app = express();



setInterval(() => {
   

  console.log("console.log('Hello world')");

}, 2000);





var server = app.listen(8866, function() {
   

    console.log("
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值