Home

nopac在MAQ=0时的利用

0x00 前言 ​ 最近还看到有人发关于CVE-2021-42278和CVE-2021-42287的分析利用文章,也就是nopac这个漏洞,漏洞都补完了怎么含在说啊;对于利用来看这些文章都提及到了MAQ为0的情况,对于这个情况的利用也都介绍了但是不太全面,我之前的文章也是简单提了一嘴,在早些在星球内也拓展过利用思路。 ​ 所以干脆今天就来帮大家总结一下MAQ=0时的利用方式,小菊花妈妈课堂开课啦! 0x01 原理 ​ MAQ,MS-DS-Machine-Account-Quota,此属性为允许用户在域中创建的计算机帐户数。 ​ 许多域内为了缓解一些委派、Relay攻击都将此属性设置为0,那么代表着攻击者没办法在没有已控制机器账户的情况下去申请票据了,所以可以缓解一下此类攻...

Read more

自定义跳转函数的unhook方法

0x00 前言 ​ 本文介绍一种比较有意思的unhook手法,来源于小伙伴发的一个GitHub的POC:https://github.com/trickster0/LdrLoadDll-Unhooking,本文讲参照此POC来一步步解读这个方法。 ​ 目前大家常用的经典手法大都是直接系统调用(Syscall)或是找到ntdll的地址并重新映射磁盘中的.text段,去获得一个干净的dll去寻找函数地址的方式。 ​ 下面介绍这种方式相当于我们自己去组装一个“跳转函数”,巧妙地规避了一些Hook,具有一定的参考以及学习价值。 0x01 流程分析 首先,构造Nt函数参数的结构体 UNICODE_STRING ldrldll; OBJECT_ATTRIBUTES obje...

Read more

解析CVE-2021-42278和CVE-2021-42287

0x00 背景 ​ 在11月份时,微软发布了几个针对Windows AD域的安全补丁,最受大家关注的以及本文主要讨论的这两个漏洞编号为:CVE-2021-42278和CVE-2021-42287,可以看到影响版本如下: ​ 实质上,在@cube0x0发布此攻击的武器化工具:nopac后,这两个漏洞才真正进入大家视野。在12月12日我也发布文章说明了漏洞的简单原理以及利用方式。 ​ 一些公众号、星球等,近期发布的文章称“国内所有的文章所说的原理都是错误的”,遂又引起了自己的关注。 ​ CVE-2021-42278涉及的原理方面应该没有什么可以讨论的,而CVE-2021-42287,这个漏洞是争议比较大的地方,此文从CVE-2021-42287这个有争议的漏洞出发,以Kerbe...

Read more

记一次实战红队行动「下」

上篇完结后,我们已经控制了几台域内的个人PC,算是进入了域内,此篇文章为「下」篇,描述了如何通过各种域内信息搜集和攻击手法结合钓鱼来相对隐蔽的拿下整个域。 域内信息搜集 ​ 现在已经在不触发EDR的前提下,做好了Bypass UAC以及权限维持的工作。并且把当前机器的资料也都下载回来了。那么目前的情况是我们已控机器在域内,意味着我们是至少有一组域凭据的。 ​ 可以直接先通过mimikatz等工具抓取本机的密码,但是考虑到各家EDR都对lsass.exe做了重兵把守,没有很大把握不触发告警的话,我们还是别轻易“打草惊蛇”,那么不从lsass.exe入手,从哪拿这组域凭据呢? ​ 我们采取的方法是先使用浏览器凭据导出工具,导出其已经保存的浏览器凭据,从中提取出了某个内网系统的账户密...

Read more

「sAMAccountName spoofing」一个账户沦陷域控学习

这两天一直跟着大家研究log4j2,又能给我们这些脚本小子吃3年饭了。(JB小子狂喜) 0x00 背景 漏洞编号为:CVE-2021-42278和CVE-2021-42287,可以看到影响还是非常广的 CVE-2021-42278,机器账户的名字一般来说应该以$结尾,但AD没有对域内机器账户名做验证。 CVE-2021-42287,与上述漏洞配合使用,创建与DC机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在TGS_REP阶段,这个账户不存在的时候,DC会使用自己的密钥加密TGS Ticket,提供一个属于该账户的PAC,然后我们就得到了一个高权限ST。 有人也叫这个漏洞为:sAMAcc...

Read more

ForkDump进行内存转储

使用远程进程分叉,可以用来转储 LSASS 分叉进程的内存来逃避监控或阻止访问 LSASS 进程的AV,可能会绕过一些杀毒进行内存DUMP。 twitter上的有人提到,可以用PROCESS_CREATE_PROCESS权限就可以克隆目标进程去读取任何东西。 主要用到了OpenProcess和NtCreateProcessEx,就是类似于fork一个进程,然后我们去正常的MiniDumpWriteDump就可以获取目标进程的内存数据 ​ 要打开一个进程进行操作,我们通常先获取目标进程的句柄。通常使用OpenProcess()来获取 HANDLE OpenProcess( [in] DWORD dwDesiredAccess, [in] BOOL bInheritH...

Read more

ASP.NET Core 核心特性学习笔记「下」

今天花时间看完了ASP.NET Core中剩下两块相对重要的内容,还剩下异常处理、配置和日志,就不写了,就看看代码和写代码能用到的。 下面这两块比较复杂内容也比较多,给我看麻了,需要结合动手写写才能理解。 依赖注入 依赖注入(Dependency injection,DI)是一种实现对象及其合作者或依赖项之间松散耦合的技术。 ASP.NET Core框架内部集成了自身的依赖注入容器,在ASP.NET Core中,所有被放入依赖注入容器的类型或组件成为服务。分为两类,第一种是框架服务,是ASP.NET Core框架的组成部分;另一种是应用服务,所有由用户放到容器中的服务都属于这一类。 在程序中使用服务需要向容器添加服务,然后通过构造函数以注入的方式注入所需要的类。若要添加服务,...

Read more

记一次.NET程序的数据库密码解密

简单的.NET程序的数据库解密流程的练习 PS: MAC反编译.NET的DLL可以直接在VSCODE下载插件ILSPY,然后打开VSCODE的命令行输入>Decompile,即可选择DLL反编译。 程序一 进入正题,打开webshell管理工具,连接小伙伴给的shell,切换至根目录查看到存在文件ClientService.svc 这里面有两个重要的参数:`Service`和`CodeBehind`。 Service是属性值是WCF的服务实现类的完全限定名。 CodeBehind是服务实现类所在的文件名。 在运行的时候,宿主程序从svc文件中的Service属性得到WCF服务的完全限定名,然后从配置文件中找到同名...

Read more