fortra / impacket

Impacket is a collection of Python classes for working with network protocols.
https://www.coresecurity.com
Other
13.47k stars 3.57k forks source link

SimpleSMBServer handles multiple connections, but requests run on the same thread #1379

Open tkeeler33 opened 2 years ago

tkeeler33 commented 2 years ago

Configuration

impacket version: 0.10.0 Python version: 3.8 Target OS: Linux

When using SimpleSMBServer, I see SMBSERVER handles multiple client connections via threads (socketserver.ThreadingMixIn). However, all (srvs, wkst, etc) requests get processed on the same thread. This becomes a problem - another connection request will stall while another client connection is active.

What's the best way to handle multiple requests from multiple clients?

Debug Output With Command String

smbserver.py

server_1  | Impacket v0.10.1.dev1+20220720.103933.3c6713e3 - Copyright 2022 SecureAuth Corporation
server_1  |
server_1  | [2022-08-06 22:59:55] [+] Impacket Library Installation Path: /usr/local/lib/python3.10/site-packages/impacket
server_1  | [2022-08-06 22:59:55] [*] Config file parsed
server_1  | [2022-08-06 22:59:55] [*] MainThread - Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
server_1  | [2022-08-06 22:59:55] [*] MainThread - Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
server_1  | [2022-08-06 22:59:55] [*] Config file parsed
server_1  | [2022-08-06 22:59:55] [*] Config file parsed
server_1  | [2022-08-06 22:59:55] [*] Config file parsed
server_1  | [2022-08-06 22:59:55] [*] Config file parsed
server_1  | [2022-08-06 23:00:01] [*] Thread-3 (process_request_thread) - Incoming connection (172.23.0.1,43550)
server_1  | [2022-08-06 23:00:01] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:01] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:01] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:01] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:01] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:01] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:01] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:01] [*] Thread-4 (process_request_thread) - Incoming connection (172.23.0.1,43556)
server_1  | [2022-08-06 23:00:01] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:01] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:01] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:01] [*] Thread-5 (process_request_thread) - Incoming connection (172.23.0.1,43562)
server_1  | [2022-08-06 23:00:01] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:01] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:01] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:01] [*] Thread-6 (process_request_thread) - Incoming connection (172.23.0.1,43568)
server_1  | [2022-08-06 23:00:01] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:01] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:01] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-7 (process_request_thread) - Incoming connection (172.23.0.1,43574)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-8 (process_request_thread) - Incoming connection (172.23.0.1,43580)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-9 (process_request_thread) - Incoming connection (172.23.0.1,43586)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-10 (process_request_thread) - Incoming connection (172.23.0.1,43592)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-11 (process_request_thread) - Incoming connection (172.23.0.1,43598)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:02] [*] Thread-12 (process_request_thread) - Incoming connection (172.23.0.1,43604)
server_1  | [2022-08-06 23:00:02] [*] AUTHENTICATE_MESSAGE (\,)
server_1  | [2022-08-06 23:00:02] [*] User \ authenticated successfully
server_1  | [2022-08-06 23:00:02] [*] :::00::aaaaaaaaaaaaaaaa
server_1  | [2022-08-06 23:00:04] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:04] [*] Closing down connection (172.23.0.1,43550)
server_1  | [2022-08-06 23:00:04] [*] Remaining connections ['Thread-4 (process_request_thread)', 'Thread-5 (process_request_thread)', 'Thread-6 (process_request_thread)', 'Thread-7 (process_request_thread)', 'Thread-8 (process_request_thread)', 'Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:04] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:04] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:04] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:04] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:07] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:07] [*] Closing down connection (172.23.0.1,43556)
server_1  | [2022-08-06 23:00:07] [*] Remaining connections ['Thread-5 (process_request_thread)', 'Thread-6 (process_request_thread)', 'Thread-7 (process_request_thread)', 'Thread-8 (process_request_thread)', 'Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:07] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:07] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:07] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:07] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:10] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:10] [*] Closing down connection (172.23.0.1,43562)
server_1  | [2022-08-06 23:00:10] [*] Remaining connections ['Thread-6 (process_request_thread)', 'Thread-7 (process_request_thread)', 'Thread-8 (process_request_thread)', 'Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:10] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:10] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:10] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:10] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:13] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:13] [*] Closing down connection (172.23.0.1,43568)
server_1  | [2022-08-06 23:00:13] [*] Remaining connections ['Thread-7 (process_request_thread)', 'Thread-8 (process_request_thread)', 'Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:13] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:13] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:13] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:13] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:16] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:16] [*] Closing down connection (172.23.0.1,43574)
server_1  | [2022-08-06 23:00:16] [*] Remaining connections ['Thread-8 (process_request_thread)', 'Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:16] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:16] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:16] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:16] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:19] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:19] [*] Closing down connection (172.23.0.1,43580)
server_1  | [2022-08-06 23:00:19] [*] Remaining connections ['Thread-9 (process_request_thread)', 'Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:19] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:19] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:19] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:19] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:22] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:22] [*] Closing down connection (172.23.0.1,43586)
server_1  | [2022-08-06 23:00:22] [*] Remaining connections ['Thread-10 (process_request_thread)', 'Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:22] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:22] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:22] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:22] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:25] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:25] [*] Closing down connection (172.23.0.1,43592)
server_1  | [2022-08-06 23:00:25] [*] Remaining connections ['Thread-11 (process_request_thread)', 'Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:25] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:25] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:25] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:25] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:28] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:28] [*] Closing down connection (172.23.0.1,43598)
server_1  | [2022-08-06 23:00:28] [*] Remaining connections ['Thread-12 (process_request_thread)']
server_1  | [2022-08-06 23:00:28] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:28] [*] Thread-2 - Bind request
server_1  | [2022-08-06 23:00:28] [*] Thread-2 - _processRequest request
server_1  | [2022-08-06 23:00:28] [*] Thread-2 - NetrWkstaGetInfo Level: 100
server_1  | [2022-08-06 23:00:31] [*] Disconnecting Share(1:IPC$)
server_1  | [2022-08-06 23:00:31] [*] Closing down connection (172.23.0.1,43604)
server_1  | [2022-08-06 23:00:31] [*] Remaining connections []

Additional context

I added in some additional debugging log lines to show the thread. I have the clients sleeping for 3 seconds before a disconnect to demonstrate the delay from other clients.

NtAlexio2 commented 2 years ago

Because of SMB2Commands methods are static (@staticmethod). The solution is instantiate them per-thread.

@0xdeaddood I can rewrite the file in object-oriented style. Let me know if it helps.