io12 / pwninit

pwninit - automate starting binary exploit challenges
MIT License
869 stars 58 forks source link

c++ executables exploitation support #295

Open rockrid3r opened 1 year ago

rockrid3r commented 1 year ago

C++ executables usually require libstdc++ shared object file. Having version mismatch btw libc and libstdc++ will usually cause an error on startup:

$ LD_PRELOAD=./libc.so.6 ./ld-2.35.so ./exe
./libc.so.6: version `GLIBC_2.36' not found (required by /lib/x86_64-linux-gnu/libstdc++.so.6)

While libc usually is provided by chal's author, the libstdc++ usually is not. Using local in-system libstdc++ (in /usr/lib...) often causes version mismatch, which produces the error above. The task is to find the corresponding libstdc++ for given libc and download it.

Right now pwninit does not searches for libstdc++ when dealing with c++ chals. Gonna add this feature

The example is roppenheimer chal from recent ductf-2023

rockrid3r commented 1 year ago

The libstdc++ is not synchronously released with each libc.so version (indeed they are provided in different packages). I couldn't find any relation between libstdc++ and libc.so version, so probably it does not matter.

So the goal here is to find the version of libstdc++ such that executable just starts well (without error as above).

The only dependency might be the minimum version of libc. The task is to find such libstdc++ that provided libc.so fits in the minimum range.

From exploitation perspective it does not matter. All haxxxing is done with libc.so. (Please let me know if i'm wrong). libstdc++ is just another shared-object file.

To sum up:

k4lizen commented 7 months ago

Am encountering this issuse currently so I would be glad to see this feature added!