A server running
Microsoft’s IIS will send you a web page if you make a request to that server by telling it what
you want (for example, you might tell www.momscookies.com that you want the hypertext
file /oatmeal/raisin.html by typing http://www.momscookies.com/oatmeal/raisin.html).
The
string you send is stored in one buffer, which does not overflow because it was
properly
bounds-checked. Each character is
an ASCII character which takes one byte to store.
If
you requested some other http service, though, this buffer might be reformatted
into UNICODE (used for
international character sets, 1 character = 2 bytes) and stored in another buffer.
It
was this other buffer that overflowed because there was no bounds checking to
make sure the UNICODE buffer was
twice as big as the ASCII buffer.
While it is not easy to
exploit this kind of buffer overflow, it proved to not be impossible. The buffer overflow allowed
the attack code, which was included in the request string, to be executed.