2022-05-19
/本篇文章大部分翻译并复现自 Will Schroeder(@harmj0y)和 Lee Christensen(@tifkin_) 在 2021 年的 BlackHat 大会上所发布的白皮书 《Certified Pre-Owned - Abusing Active Directory Certificate Services》,其中详细介绍了关于 Active Directory Certificate Services 的滥用方法,关于 Active Directory 证书服务的攻击方法第一次系统性的进入我们的视野。
2022-05-18
/我们要想在32位下实现进程保护很简单,通过SSDT hook重写函数即可实现,但是在64位系统下因为引入了PG
和DSE
的原因,导致SSDT hook
实现起来处处受限。但微软同样为了系统安全,增加了一个对象回调函数的接口,利用该回调可以实现对对象请求的过滤保护自身的进程,目前大部分64位下的安全软件保护机制都是基于该方法,我们深入进行探究
2022-05-11
/一般的shellcode加载到内存都是通过LoadLibrary
和GetProcAddress
来获取函数进行shellcode加载,亦或是通过VirtualAllocEx
远程申请一块空间来放入shellcode的地址进行加载。为了隐蔽,攻击者通常会通过PEB找到InLoadOrderModuleList
链表,自己去定位LoadLibrary
函数从而规避杀软对导入表的监控。攻击者先把shellcode加密,在写入时解密存放到内存空间,使用基于文件检测的方法,是无能为力的,那么这种无落地的方式,最终都会在内存中一览无余。
2022-05-05
/我们知道在x64里面,从3环进入0环会调用syscall
,那么如果是32位的程序就需要首先转换为x64模式再通过syscall
进入0环,这里就会涉及到一系列64位寄存器的操作,我们通过探究其实现原理来达到隐藏数据和反调试的效果。
2022-04-27
/首先,我们来整体了解一下实际用户请求访问域内某个服务时会经过哪些步骤:
1、用户将AS-REQ数据包发送给KDC(Key Distribution Centre,密钥分发中心,此处为域控),进行身份认证。
2、KDC验证用户的凭据,如果凭据有效,则返回TGT(Ticket-Granting Ticket,票据授予票据)。
3、如果用户想通过身份认证,访问某个服务(如CIFS),那么他需要发起(Ticket Granting Service,票据授予服务)请求,请求中包含TGT以及所请求服务的SPN(Service Principal Name,服务主体名称)。
4、如果TGT有效并且没有过期,TGS会创建用于目标服务的一个服务票据。服务票据使用服务账户的凭据进行加密。
5、用户收到包含加密服务票据的TGS响应数据包。
6、最后,服务票据会转发给目标服务,然后使用服务账户的凭据进行解密。
2022-04-26
/常规的shellcode注入一般是通过VirtualAllocEx
,WriteProcessMemory
和 CreateRemoteThread
来实现的,但是这种方式是被安全软件重点监控的,同时微软提供的ETW接口也是可以轻易检测出上述方式进行代码注入的痕迹。本文的核心是讲解怎么利用具备 RWX-S 权限且自身有签名的白DLL进行一种比较隐蔽的shellcode注入,
并讲解具体的代码实现以及在写代码实现的过程中遇到的坑。本方法是由文章提出的:https://billdemirkapi.me/sharing-is-caring-abusing-shared-sections-for-code-injection/ ,详情可以参考此文章。
2022-04-22
/将自己学习的PE文件结构进行总结形成文章这件事情,一直躺在我的Notion TodoList里,但是一直是未完成的状态哈哈,拖了那么久也该让它状态变成已完成了。
2022-04-18
/我们知道杀软在API函数的监控上一般有两种手段,一种是在3环直接通过挂钩到自己的函数判断是否调用了这个API,另外一种方式就是在0环去往SSDT表的路径上挂钩来判断进0环后的操作。那么我们如果不想杀软监控我们的行为,之前提过的内核重载是一种绕过的方式,但是内核重载的动静太大,这里我们就通过直接重写3环到0环的API,通过重写KiFastCallEntry
来自己调用内核的函数,以达到规避杀软的效果。
2022-03-16
/2022-03-01
/机器账户在许多技术中可以用于提权或横向移动,如使用机器账户的委派进行dcsyn了上述作用,使用机器账户也可进行维权操作。我们可以将任意计算机账户添加到高权限组(例如Domain Admin、Domain Controllers、Enterprise Admins) 或对计算机账户的userAccountControl属性进行修改。使用这两种方式,我们可以通过机器账户在域内进行身份认证(因为密码已知)并进行提权操作,例如Dcsync拖取域内hash。