@@ -44,6 +44,7 @@ func StageListenerCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
44
44
listenerURL := ctx .Flags .String ("url" )
45
45
aesEncryptKey := ctx .Flags .String ("aes-encrypt-key" )
46
46
aesEncryptIv := ctx .Flags .String ("aes-encrypt-iv" )
47
+ rc4EncryptKey := ctx .Flags .String ("rc4-encrypt-key" )
47
48
prependSize := ctx .Flags .Bool ("prepend-size" )
48
49
compress := strings .ToLower (ctx .Flags .String ("compress" ))
49
50
@@ -70,6 +71,21 @@ func StageListenerCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
70
71
return
71
72
}
72
73
74
+ if rc4EncryptKey != "" && aesEncryptKey != "" {
75
+ con .PrintErrorf ("Cannot use both RC4 and AES encryption\n " )
76
+ return
77
+ }
78
+
79
+ rc4Encrypt := false
80
+ if rc4EncryptKey != "" {
81
+ // RC4 keysize can be between 1 to 256 bytes
82
+ if len (rc4EncryptKey ) < 1 || len (rc4EncryptKey ) > 256 {
83
+ con .PrintErrorf ("Incorrect length of RC4 Key\n " )
84
+ return
85
+ }
86
+ rc4Encrypt = true
87
+ }
88
+
73
89
aesEncrypt := false
74
90
if aesEncryptKey != "" {
75
91
// check if aes encryption key is correct length
@@ -121,6 +137,10 @@ func StageListenerCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
121
137
stage2 = util .PreludeEncrypt (stage2 , []byte (aesEncryptKey ), []byte (aesEncryptIv ))
122
138
}
123
139
140
+ if rc4Encrypt {
141
+ stage2 = util .RC4EncryptUnsafe (stage2 , []byte (rc4EncryptKey ))
142
+ }
143
+
124
144
switch stagingURL .Scheme {
125
145
case "http" :
126
146
if prependSize {
@@ -203,6 +223,10 @@ func StageListenerCmd(ctx *grumble.Context, con *console.SliverConsoleClient) {
203
223
con .PrintInfof ("AES KEY: %v\n " , aesEncryptKey )
204
224
con .PrintInfof ("AES IV: %v\n " , aesEncryptIv )
205
225
}
226
+
227
+ if rc4Encrypt {
228
+ con .PrintInfof ("RC4 KEY: %v\n " , rc4EncryptKey )
229
+ }
206
230
}
207
231
208
232
func prependPayloadSize (payload []byte ) []byte {
0 commit comments