Update sliver submodule to v1.7.3

This commit is contained in:
moloch--
2026-02-28 10:14:25 -08:00
parent a06063f424
commit 82e55c4919
8 changed files with 1171 additions and 11 deletions
+9 -2
View File
@@ -17,6 +17,7 @@ import type {
Beacons,
Jobs,
Beacon,
GenerateSpoofMetadataReq,
ImplantConfig,
ImplantProfile,
Loot,
@@ -447,8 +448,8 @@ export class SliverClient {
const creds = createSliverRpcCredentials(this.config);
this.channel = createChannel(this.rpcHost(), creds, {
"grpc.max_send_message_length": 2 * GiB,
"grpc.max_receive_message_length": 2 * GiB,
"grpc.max_send_message_length": (2 * GiB) -1,
"grpc.max_receive_message_length": (2 * GiB) -1,
});
this.rpcClient = createClient(SliverRPCDefinition, this.channel);
@@ -615,6 +616,12 @@ export class SliverClient {
return res.File;
}
generateSpoofMetadata(req: GenerateSpoofMetadataReq, timeoutSeconds = DEFAULT_TIMEOUT_SECONDS): Promise<void> {
return withTimeoutSignal(timeoutSeconds, async (signal) => {
await this.rpc.generateSpoofMetadata(req, { signal });
});
}
async regenerate(implantName: string, timeoutSeconds = DEFAULT_TIMEOUT_SECONDS) {
const res = await withTimeoutSignal(timeoutSeconds, (signal) =>
this.rpc.regenerate({ ImplantName: implantName }, { signal }),
+1086 -3
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// versions:
// protoc-gen-ts_proto v2.11.2
// protoc v3.15.8
// protoc v6.33.4
// source: commonpb/common.proto
/* eslint-disable */
+1 -1
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// versions:
// protoc-gen-ts_proto v2.11.2
// protoc v3.15.8
// protoc v6.33.4
// source: dnspb/dns.proto
/* eslint-disable */
+18 -1
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// versions:
// protoc-gen-ts_proto v2.11.2
// protoc v3.15.8
// protoc v6.33.4
// source: rpcpb/services.proto
/* eslint-disable */
@@ -46,6 +46,7 @@ import {
ExternalImplantConfig,
Generate,
GenerateReq,
GenerateSpoofMetadataReq,
GenerateStageReq,
GetSystemReq,
Host,
@@ -637,6 +638,14 @@ export const SliverRPCDefinition = {
responseStream: false,
options: {},
},
generateSpoofMetadata: {
name: "GenerateSpoofMetadata",
requestType: GenerateSpoofMetadataReq,
requestStream: false,
responseType: Empty,
responseStream: false,
options: {},
},
generateExternal: {
name: "GenerateExternal",
requestType: ExternalGenerateReq,
@@ -1799,6 +1808,10 @@ export interface SliverRPCServiceImplementation<CallContextExt = {}> {
hostIOCRm(request: IOC, context: CallContext & CallContextExt): Promise<DeepPartial<Empty>>;
/** ** Implants *** */
generate(request: GenerateReq, context: CallContext & CallContextExt): Promise<DeepPartial<Generate>>;
generateSpoofMetadata(
request: GenerateSpoofMetadataReq,
context: CallContext & CallContextExt,
): Promise<DeepPartial<Empty>>;
generateExternal(
request: ExternalGenerateReq,
context: CallContext & CallContextExt,
@@ -2152,6 +2165,10 @@ export interface SliverRPCClient<CallOptionsExt = {}> {
hostIOCRm(request: DeepPartial<IOC>, options?: CallOptions & CallOptionsExt): Promise<Empty>;
/** ** Implants *** */
generate(request: DeepPartial<GenerateReq>, options?: CallOptions & CallOptionsExt): Promise<Generate>;
generateSpoofMetadata(
request: DeepPartial<GenerateSpoofMetadataReq>,
options?: CallOptions & CallOptionsExt,
): Promise<Empty>;
generateExternal(
request: DeepPartial<ExternalGenerateReq>,
options?: CallOptions & CallOptionsExt,
+19 -2
View File
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// versions:
// protoc-gen-ts_proto v2.11.2
// protoc v3.15.8
// protoc v6.33.4
// source: sliverpb/sliver.proto
/* eslint-disable */
@@ -1102,6 +1102,7 @@ export interface ReconfigureReq {
ReconnectInterval: string;
BeaconInterval: string;
BeaconJitter: string;
C2URI: string;
Request?: Request | undefined;
}
@@ -16153,7 +16154,7 @@ export const WGTCPForwarders: MessageFns<WGTCPForwarders> = {
};
function createBaseReconfigureReq(): ReconfigureReq {
return { ReconnectInterval: "0", BeaconInterval: "0", BeaconJitter: "0", Request: undefined };
return { ReconnectInterval: "0", BeaconInterval: "0", BeaconJitter: "0", C2URI: "", Request: undefined };
}
export const ReconfigureReq: MessageFns<ReconfigureReq> = {
@@ -16167,6 +16168,9 @@ export const ReconfigureReq: MessageFns<ReconfigureReq> = {
if (message.BeaconJitter !== "0") {
writer.uint32(24).int64(message.BeaconJitter);
}
if (message.C2URI !== "") {
writer.uint32(34).string(message.C2URI);
}
if (message.Request !== undefined) {
Request.encode(message.Request, writer.uint32(74).fork()).join();
}
@@ -16204,6 +16208,14 @@ export const ReconfigureReq: MessageFns<ReconfigureReq> = {
message.BeaconJitter = reader.int64().toString();
continue;
}
case 4: {
if (tag !== 34) {
break;
}
message.C2URI = reader.string();
continue;
}
case 9: {
if (tag !== 74) {
break;
@@ -16226,6 +16238,7 @@ export const ReconfigureReq: MessageFns<ReconfigureReq> = {
ReconnectInterval: isSet(object.ReconnectInterval) ? globalThis.String(object.ReconnectInterval) : "0",
BeaconInterval: isSet(object.BeaconInterval) ? globalThis.String(object.BeaconInterval) : "0",
BeaconJitter: isSet(object.BeaconJitter) ? globalThis.String(object.BeaconJitter) : "0",
C2URI: isSet(object.C2URI) ? globalThis.String(object.C2URI) : "",
Request: isSet(object.Request) ? Request.fromJSON(object.Request) : undefined,
};
},
@@ -16241,6 +16254,9 @@ export const ReconfigureReq: MessageFns<ReconfigureReq> = {
if (message.BeaconJitter !== "0") {
obj.BeaconJitter = message.BeaconJitter;
}
if (message.C2URI !== "") {
obj.C2URI = message.C2URI;
}
if (message.Request !== undefined) {
obj.Request = Request.toJSON(message.Request);
}
@@ -16255,6 +16271,7 @@ export const ReconfigureReq: MessageFns<ReconfigureReq> = {
message.ReconnectInterval = object.ReconnectInterval ?? "0";
message.BeaconInterval = object.BeaconInterval ?? "0";
message.BeaconJitter = object.BeaconJitter ?? "0";
message.C2URI = object.C2URI ?? "";
message.Request = (object.Request !== undefined && object.Request !== null)
? Request.fromPartial(object.Request)
: undefined;
@@ -304,6 +304,12 @@ exports[`RPC definition includes all methods (snapshot) 1`] = `
"requestStream": false,
"responseStream": false,
},
{
"key": "generateSpoofMetadata",
"name": "GenerateSpoofMetadata",
"requestStream": false,
"responseStream": false,
},
{
"key": "generateStage",
"name": "GenerateStage",
+31 -1
View File
@@ -2,7 +2,18 @@ import { Subject } from "rxjs";
import { SliverClient, InteractiveBeacon } from "../client";
import type { SliverClientConfig } from "../config";
import { BeaconTask, type Event, ListenerJob, Operators, Sessions, Session, KillJob, Loot, WebContent } from "../pb/clientpb/client";
import {
BeaconTask,
type Event,
type GenerateSpoofMetadataReq,
ListenerJob,
Operators,
Sessions,
Session,
KillJob,
Loot,
WebContent,
} from "../pb/clientpb/client";
import { Empty } from "../pb/commonpb/common";
import { Ls } from "../pb/sliverpb/sliver";
@@ -111,6 +122,25 @@ test("SliverClient.websiteUpdateContent() forwards to rpc.websiteUpdateContent()
);
});
test("SliverClient.generateSpoofMetadata() forwards to rpc.generateSpoofMetadata()", async () => {
const generateSpoofMetadata = jest.fn(async () => Empty.create({}));
const client = new SliverClient(dummyConfig());
(client as any).rpcClient = { generateSpoofMetadata };
const req: GenerateSpoofMetadataReq = {
ImplantBuildID: "build-1",
ImplantName: "implant-1",
ResourceID: "42",
};
await client.generateSpoofMetadata(req, 5);
expect(generateSpoofMetadata).toHaveBeenCalledWith(
req,
expect.objectContaining({ signal: expect.any(AbortSignal) }),
);
});
test("InteractiveBeacon.lsTask().wait() decodes beacon task results", async () => {
const taskId = "task-1";
const beaconId = "beacon-1";