[Vulnhub靶机] DriftingBlues: 4靶机渗透思路及方法(个人分享)
靶机下载地址:
https://download.vulnhub.com/driftingblues/driftingblues4_vh.ova
靶机地址:192.168.67.23
攻击机地址:192.168.67.3
1.使用?arp-scan?命令扫描网段内存活的主机,以获取靶机ip地址
arp-scan -I?指定网卡 -l
2.使用?nmap?工具扫描靶机开放端口、服务版本以及系统版本,得到开放端口21、22、80及其服务ftp、ssh、http
nmap?-sV -O?靶机地址
? ? ? ? -sV? ? ? ? 探测主机服务版本
? ? ? ? -O? ? ? ? ?识别主机操作系统
?
3.访问网站,发现页面没有有用回显,查看网页源代码,发现了一串?base64?加密值,尝试对其进行解密,讲过多次解密后获得?/imfuckingmad.txt?文件
?
?
4.访问 /imfuckingmad.txt?文件,获得了一串?Brainfuck?编码,对其进行解密,获得了一个图片地址
Brainfuck编码在线解密地址:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
?
5.访问图片地址,发现是一个二维码图片,我们利用QR_Research工具(CTF中杂项会使用到的一个扫描二维码的工具)对二维码图片进行扫描,获得一个网址https://i.imgur.com/a4JjS76.png
?
6.访问网站图片https://i.imgur.com/a4JjS76.png(起初以为和先前的题目一样需要修改hosts文件,但后面访问后发现无法成功访问,重新查看给的网址,发现网址用的https协议,原来之前理解错了意思,题目想让我们访问真正的网站。而且正常访问访问不了,需要挂代理),得到了四个用户名
1.利用得到的用户名创建一个usernames.txt文件,作为用户字典。使用?hydra?工具尝试暴力破解ssh和ftp服务,发现ssh服务没有爆破成功,成功爆破了ftp服务,得到了用户名/密码(luther/mypics)
hydra -L?usernames.txt?-P /usr/share/wordists/rockyou.txt 192.168.67.23?ssh
? ? ? ? -L?? ? ? ? ? ? ?指定用户字典的路径
? ? ? ? -P ? ? ? ? ? ? ?指定密码字典的路径
? ? ? ? ssh ? ? ? ? ? ?用于暴力破解SSH服务器
? ? ? ? ftp? ? ? ? ? ? ??用于暴力破额FTP服务器/usr/share/wordists/rockyou.txt?是kali系统自带的密码文件,默认是个压缩包需要自行解压
2.使用爆破得到的用户名/密码登录ftp服务,成功登录,并发现了sync_log文件和hubert目录,使用?get?命令将sync_log文件下载,进行查看,发现没有什么有用的信息
通过sync_log文件的命令来推断,该文件可能是sync的日志文件。sync是一个系统调用,它将所有文件系统缓冲区中的数据立即写入磁盘。这样做的目的是确保数据的持久性存储,避免因为异常情况(如系统崩溃)导致数据丢失或损坏。当我们使用sync命令时,操作系统会将内存中未写入磁盘的数据强制刷新到磁盘上,以确保数据的一致性。
3.查看分析hubert目录,发现该目录中没有任何文件,但是通过之前的查看的属主和属组跟其他文件的不一样,想起来我们的用户字典中有一个hubert用户,猜测该目录是hubert的用户目录。因为该文件的权限是所有人可读可写可执行,所以我们可以通过上传密钥文件来登录ssh
1.使用?ssh-keygen?工具生成公密钥,并将生成的密钥保存到 /root/.ssh/ 目录下
ssh-keygen -t?rsa
? ? ? ? -t? ? ? ? 指定生成的密钥类型,默认为RSA类型
2.将公钥文件的内容输出到authorized_keys文件内,利用ftp服务在hubert目录下创建.ssh目录,并将authorized_keys文件上传到该目录内
3.利用私钥进行ssh远程连接到靶机,成功访问
两种提权方式:
? ? ? ? 第一种:利用root用户会定期执行python脚本来进行提权
? ? ? ? 第二种:利用命令劫持进行提权
1.在成功登录后习惯性使用 ls 命令查看当前目录下的文件,发现一个属主和属组都是root用户的python脚本文件emergency.py。查看该文件的内容,发现该脚本利用python语言执行了系统命令
2.查看 emergency.py 脚本中执行写入'1'命令的 /tmp/backdoor_testing 文件,发现执行了多次该命令,猜测root用户会定期执行emergency.py 脚本来执行写入命令
3.在攻击机打卡nc监听
nc -lvp?监听端口号?靶机地址
? ? ? ? -l? ? ? ? ?????开启监听
? ? ? ? -v? ? ? ? ????显示详细输出
? ? ? ? -p? ? ? ? ? ? 指定监听端口
4.因为之前查看我们发现该文件的其他人不可以写入,所以我们要删除该文件,重新创建一个新的emergency.py文件,来编写文件内容进行shell反弹
5.等待root用户执行emergency.py文件,成功反弹shell,并且shell是root权限,同时可以利用python中的?pty模块?的创建交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
? ? ? ? -c ? ? ? ?在命令行中调用python代码
pty.spawn() 函数是pty模块中的一个函数,用于创建一个子进程,并将其连接到一个伪终端。通过这个伪终端,我们可以与子进程进行交互,就像在控制台上一样。
1.使用?find?命令寻找suid程序,发现一个可疑程序/usr/bin/getinfo
find / -perm -4000 2>/dev/null 或 find / -perm -u=s 2>/dev/null
? ? ? ? -perm ? ? ? ? 按照权限查找文件(4000、2000、1000分别表示SUID,SGID,SBIT权限,如777为普通文件最高权限,7000为特殊文件的最高权限)
使用find命令的时候在命令后加 2>/dev/null 将错误结果输出重定向到/dev/null中,/dev/null是一个特殊的设备文件,其实质为空设备文件,其大小是0字节,所有人都有读写权限,而其主要作用就是将接收的一切输出给它的数据并丢弃,就像垃圾桶,也被称为位桶(bit bucket)
2.执行该程序,根据执行结果发现分别运行了ip addr、cat /etc/hosts、uname -a命令
3.可以通过修改环境来进行命令劫持提权
通过修改环境变量让getinfo在调用命令调用到我们伪造的ip命令(在检索环境时会先调用最前面的环境也就是最新写入的环境),来达到提权的效果
export PATH=/tmp/:$PATH ? ? ? ? ? ? 把/tmp路径写入到系统路径中
echo $PATH? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?输出系统路径
cd /tmp
echo '/bin/bash' > ip ? ? ? ? ? ? ? ? ? ? ? 把/bin/bash写入到ip文件中(相当于创建ip并写入/bin/bash)
chmod +x ip ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?给ip文件增加执行权限
4.再次运行getinfo,成功提权至root权限