


The httpd itself doesn’t do much: you can only read local files (without traversal) or login.

all new heaps are aligned on 0x10000 that could come in handy for partial overwrites, however I didn’t actually use it in my exploit 😛.unlike mmap on (non-grsec) Linux, all heaps are mapped in memory at with random offsets therefore leaking a heap address doesn’t mean we immediately can leak other heaps or libraries.Index Address Name Debugging options enabled Private heaps have their own LFH and thus we also start with no LFH enabled, so we can avoid the LFH randomization altogether as long as we don’t create too many objects of the same size.Īfter opening several threads we can observe that we get the following heaps: 0:006> !heap On the other hand, you loose whatever pointers you could have leaked from the main heap. This means that every request has a clean heap and cannot interfere with other requests’ heaps (yet), making it far easier to have deterministic allocations since you don’t have to worry about whatever occurs on the main heap or in other threads. The server limits the number of concurrent requests to 5, and each request runs in a dedicated thread, which creates a private heap with HeapCreate(0, 0, 0) and finally destroys it with HeapDestroy(hHeap) when the request terminates.

Then you could send as many requests to the httpd as you like as long as the instance didn’t crash and if you kept the dispatcher socket open. Since multi-threaded servers have obvious isolation issues for a CTF challenge, you had to first connect to a dispatcher service which would spawn an instance for you on a dedicated port, that only your IP was allowed to access.
#RDX DRIVE HACK WINDOWS#
This challenge is running on Windows Server 2019, Version 1809 (OS Build 17763.253). Following last week-end’s Insomni’hack teaser and popular demand, here is a detailed write-up for my winhttpd challenge, that implemented a custom multi-threaded httpd and was running on the latest version of Windows 10:
