专栏首页鸿鹄实验室利用DPAPI加密shellcode

利用DPAPI加密shellcode

DPAPI是啥?这里就不多说了,用处呢?主要就是用来解微软系的凭据啥的。

但微软给出了DPAPI的开发文档,我们也可以用它来加解密数据。

可以去看之前的文章:获取已控机器本地保存的RDP密码

加密函数:

https://docs.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata

DPAPI_IMP BOOL CryptProtectData(
  DATA_BLOB                 *pDataIn,
  LPCWSTR                   szDataDescr,
  DATA_BLOB                 *pOptionalEntropy,
  PVOID                     pvReserved,
  CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  DWORD                     dwFlags,
  DATA_BLOB                 *pDataOut
);

解密函数:

https://docs.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata

DPAPI_IMP BOOL CryptUnprotectData(
  DATA_BLOB                 *pDataIn,
  LPWSTR                    *ppszDataDescr,
  DATA_BLOB                 *pOptionalEntropy,
  PVOID                     pvReserved,
  CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  DWORD                     dwFlags,
  DATA_BLOB                 *pDataOut
);

其中的DATA_BLOB和CRYPTPROTECT_PROMPTSTRUCT 为内置的结构体:

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/aa381414(v=vs.85)

typedef struct _CRYPTOAPI_BLOB {
  DWORD cbData;
  BYTE  *pbData;
} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB, CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB, CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB, CERT_NAME_BLOB, CERT_RDN_VALUE_BLOB, *PCERT_NAME_BLOB, *PCERT_RDN_VALUE_BLOB, CERT_BLOB, *PCERT_BLOB, CRL_BLOB, *PCRL_BLOB, DATA_BLOB, *PDATA_BLOB, CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB, CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB, CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB, CRYPT_DER_BLOB, PCRYPT_DER_BLOB, CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;

cbData为大小、pbData为数据。

https://docs.microsoft.com/en-us/windows/win32/api/dpapi/ns-dpapi-cryptprotect_promptstruct

typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
  DWORD   cbSize;
  DWORD   dwPromptFlags;
  HWND    hwndApp;
  LPCWSTR szPrompt;
} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;

至于调用就比较简单了,先声明一个此类的结构体,然后调用加密函数来加密它

得到加密后的值。

关于参数值,可以直接将鼠标移动过来,自己看含义。

然后就是调用解密函数对其解密,然后VirtualAlloc、RtlMoveMemory、CreateThread、WaitForSingleObject加载即可。

当然C#中也有相关的库可以实现对应操作:

using System.Security.Cryptography;
byte[] entropy = { };
byte[] encryptedText = ProtectedData.Protect(buf, null, DataProtectionScope.LocalMachine);

由于其dpapi为本地dpapi,其他机器都解不了,所以有一定的反沙箱效果,缺点就是只能先在目标机器上获取一下加密的值才能做后续操作。效果还算可以啦:

当然啦,官方给出了的DPAPI也不是只能加密字符的,内存也是可以的,也就是变相的绕过一些杀软的内存扫描啦。

更多精彩推荐,请关注我们

请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!

本文分享自微信公众号 - 鸿鹄实验室(gh_a2210090ba3f),作者:鸿鹄实验室a

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-10-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 内网渗透 | DPAPI机制学习

    绝大多数应用程序都有数据加密保护的需求,存储和保护私密信息最安全的方式就是每次需要加密或解密时都从用户那里得到密码,使用后再丢弃。这种方式每次处理信息时都需要用...

    HACK学习
  • 内网渗透|获取远程桌面连接记录与RDP凭据

    Windows 远程桌面是用于管理 Windows 服务器的最广泛使用的工具之一。管理员喜欢使用远程桌面,攻击者也喜欢使用(狗头)。在之前的文章中我们已经介绍了...

    HACK学习
  • 浏览器的自动填充功能真的安全吗?我看未必!

    在今天这个“芯片当道”的时代,信用卡数据被盗事件的发生概率也一直在上升,因为攻击者可以利用各种各样的方法来窃取信用卡数据,而一块小小的芯片并不能保证信用卡在网络...

    FB客服
  • 红蓝对抗之Windows内网渗透

    无论是渗透测试,还是红蓝对抗,目的都是暴露风险,促进提升安全水平。企业往往在外网布置重兵把守,而内网防护相对来说千疮百孔,所以渗透高手往往通过攻击员工电脑、外网...

    腾讯安全应急响应中心
  • 获取已控机器本地保存的RDP密码

    本文就给大家聊一下关于获取已控机器本地保存的RDP密码的一些原理、思路、以及具体的实现方法。

    鸿鹄实验室
  • 凭据收集总结

    本来按计划应该学习横向移动,但是发现一个问题,如何横向?这就是我记录这一章的目的,提升权限之后获取凭证,利用已获取的凭证扩大战果才是正确的姿势,学习的主要资料是...

    重生信息安全
  • 红队笔记 - 后渗透

    LSASS 被配置为作为受保护进程 (PPL) 运行,您可以使用 PowerShell 进行查询。

    Khan安全团队
  • 御见安全态势感知:“哈里男孩”水坑攻击“脚本小子”

    水坑攻击是一种常见的高级攻击方法。电脑管家安全感知系统最近捕获到一例,分析如下。

    豆豆的包包
  • 从Windows 10 SSH-Agent中提取SSH私钥

    在这个周末我安装了Windows 10 Spring Update,最令我期待的就是它的内置OpenSSH工具,这意味着Windows管理员不再需要使用Putt...

    FB客服
  • 获取当前系统所有用户的谷歌浏览器密码

    全称Data Protection Application Programming Interface

    Ms08067安全实验室
  • 内网渗透中如何离线解密 RDP 保存的密码

    在内网渗透的过程中可能会遇到目标管理员有远程登陆的记录,有些管理员会有保存密码的习惯,这个时候我们想要扩大横向范围,密码搜集是最重要的。

    渗透攻击红队
  • 内网渗透 | 获取远程主机保存的RDP凭据密码

    注意:cmdkey /list命令务必在Session会话下执行,system下执行无结果。

    HACK学习
  • 免杀 - shellcode简单混淆BypassAv

    在进行渗透测试过程中,往往会遇到主机有杀软,导致我们的木马被查杀,那么我们就得想办法绕过杀软进行上线Cobalt strike 或者 Metasploiit

    重生信息安全
  • 关于分段免杀执行的思考

    我们在写shellcode时候,做分段免杀执行时,如何做到边解码然后执行再调用解码,解码后再执行?就是分段执行而且解密的密钥是不一样的,对于这个问题,我们应该想...

    FB客服
  • 红队技巧-利用uuid加载shellcode

    近期国外的Tweet上面的Check Point Research发布了一篇有趣的推文:

    Gamma实验室
  • 红队技巧-利用uuid加载shellcode

    近期国外的Tweet上面的Check Point Research发布了一篇有趣的推文:

    潇湘信安
  • 免杀Tips--利用GUID来加载shellcode

    前几天,很多的公众号都复现了来自Lazarus组织的加载器的实现方法,UUID法,具体链接可以查看:https://research.nccgroup.com...

    鸿鹄实验室
  • 远控免杀专题-shellcode免杀实践

    目前网上有很多的自动生成免杀shellcode的工具,但是要知道杀毒软件检测某个免杀工具也是非常容易的,因为这些流行工具的指纹很容易被杀软公司搜集到然后加入特征...

    洛米唯熊
  • windows凭证转储(一)

    声明:公众号大部分文章来自团队核心成员和知识星球成员,少部分文章经过原作者授权和其它公众号白名单转载。未经授权,严禁转载,如需转载,请联系开白!

    贝塔安全实验室

扫码关注云+社区

领取腾讯云代金券