热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Faxhell:一个利用Fax服务和DLL劫持技术实现的BindShell

FaxhellFaxhell,又名“FaxShell”,它是一个利用利用Fax服务和DLL劫持技术实现的BindShell,Faxhell本身就是一个针对BindShell的概念验



Faxhell


Faxhell,又名“Fax Shell”,它是一个利用利用Fax服务和DLL劫持技术实现的Bind Shell,Faxhell本身就是一个针对Bind Shell的概念验证PoC,其中的DLL劫持基于Ualapi.dll实现。


如何使用


首先,我们需要构建Ualapi.dll文件,并将其存放至“c:\windows\system32”路径下。接下来,开启系统的Fax服务,该服务启动后将会加载我们的DLL文件,并调用“UalStart”导出函数。


此时,“UalStart”会将线程池内的工作项加入一个队列之中,并开启一个针对“RpcSs”的控制器,然后寻找一个SYSTEM令牌。找到之后,代码便会复制其内容并伪装成该令牌。


接下来,它将会使用本地终端地址创建一个socket会话,并将其绑定至端口9299,然后使用线程池的IO Completion端口异步等待传入的链接。


配置好上述内容之后,我们需要使用熟悉的客户端(例如nc(at).exe 9299)来连接绑定端口9299的socket会话。然后输入“let me in”并按下回车键。如果你编写了自定义代码,可以尝试发送字符串“let me in\n”。


I/O Completion包将会唤醒线程池回调,而回调请求将会开启Cmd.exe进程,并使用SYSTEM权限运行DcomLaunch服务。此时,就会将其输入和输出处理器绑定到新创建的socket会话上了。


终端防护响应/反病毒绕过



  • 使用一个不常见或很少人知道的服务,或者使用EDR厂商不会监控或标记为“可疑”的服务。

  • 使用Windows线程池API来配置,增加栈内存的读取难度,通过多个线程来均衡工作负载,避免出现可疑情况的提示。

  • 伪造令牌的有效期非常短,必须让工作线程以SYSTEM权限运行,只有在每次API调用完成之后,才恢复网络服务,这样可以降低被扫描器捕捉到的机率。

  • 使用不常见的socket API,让导入的表没有那么可疑,并躲避EDR检测、LOCTL钩子和LSP。

  • 在DcomLaunch服务下创建Bind Shell,这个服务已经是一个拥有SYSTEM权限的服务了,因此我们的行为看起来会更加自然,避免出现可疑的进程树。

  • 利用Windows漏洞,让socket看起来属于Fax服务,而并非EcomLaunch或exe。如果我们终止Fax服务,那么socket将会属于System。



注意事项


根据前文的介绍,想必大家应该已经了解了Faxhell的工作机制和使用方法了。但是,这并不意味着Faxhell是一个可以直接丢进目标系统执行,并且无法被检测和察觉的恶意攻击武器。


首先,Faxhell只是一个Bind Shell,大多数防火墙都可以阻止其活动。打开防火墙规则,或使用一个反向Bind Shell,或者使用类似80和443这样的常见端口来实现数据通信会更加有效。


其次,比如说Spooler这样的常见服务同样也能够加载我们的Ualapi.dll。


第三,我们提供的这个Faxhell PoC可能会造成内存泄漏。


参考文档


1、 https://windows-internals.com/faxing-your-way-to-system/


项目地址


Faxhell:【 GitHub传送门




推荐阅读
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • BZOJ1233 干草堆单调队列优化DP
    本文介绍了一个关于干草堆摆放的问题,通过使用单调队列来优化DP算法,求解最多可以叠几层干草堆。具体的解题思路和转移方程在文章中进行了详细说明,并给出了相应的代码示例。 ... [详细]
author-avatar
fuzhipai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有