mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-06-09 12:03:41 +02:00

During the call which establishes a TCP client channel, the call to `connect` can sometimes fail if the settings that are used are incorrect (such as an invalid port number). When this call fails the result was being set to `GetLastError()`, which isn't correct. On Windows it should be `WSAGetLastError()` and on POSIX the `errno` value should be used instead. This wasnt causing issues on Windows but on POSIX it was causing problems because the `GetLastError()` call was returning zero, which was returned to the function that invokes `create_tcp_client_channel()`. Given that `ERROR_SUCCESS` == 0, the caller believed the function had completed successfully and hence relied on context being set up correctly. This was resulting crashes because this obviously wasn't the case. I also added a code chance which makes meterpreter attempt to bind to `0.0.0.0` if binding to the specified address fails.