Using call gadgets to break the call stack signature used by Elastic on proxying a module load. Provided as a Crystal Palace shared library. Format inspired by @rasta-mouse's LibTP.
WARNING
-
Compile the project:
make. The output is two Crystal Palace shared libraries:libtploadlib_vanilla.x64.zip(not using the gadget, for demonstration of the detection) andlibtploadlib_gadget.x64.zip(using the gadget). -
Compile the example COFF (that will just load
wininet.dllusing the shared library and print its address):cd example_print && make. The output will be a COFF fileexample_print.x64.o. -
Link the whole thing using Crystal Palace to make PIC shellcode. Use the tradecraft garden's Simple PIC spec file, modifying it to merge in the
libtploadlibzip wanted (mergelib "path/to/libtploadlib_XXX.x64.zip"):path/to/crystalpalace/link simplepic_modified/loader.spec example_print/example_print.x64.o out.bin. -
For this PoC: download dsdmo.dll in version
10.0.26100.1882and place it atC:\dsdmo_10.0.26100.1882.dll. -
Run the shellcode using any loader.