
Automatise la configuration de challenges d'exploitation binaire en patchant les binaires ELF, en récupérant les linkers correspondants, en restaurant les symboles de la libc et en générant des scripts de résolution pwntools.
pwninitUn outil pour automatiser le démarrage de défis d'exploitation binaire
ld-linux.so.*) capable de charger la libc fournie sans segfaultpatchelf pour utiliser
le RPATH et l'interpréteur corrects pour la libc fournieExécutez pwninit
Exécutez pwninit dans un répertoire contenant les fichiers concernés et il détectera lesquels sont le binaire, la libc et le linker. Si la détection est incorrecte, vous pouvez spécifier les emplacements avec --bin, --libc et --ld.
solve.py personnaliséSi vous n'aimez pas le modèle par défaut, vous pouvez utiliser le vôtre. Spécifiez simplement --template-path <path>. Consultez template.py pour le format du modèle. Les noms des liaisons exe, libc et ld peuvent être personnalisés avec --template-bin-name, --template-libc-name et --template-ld-name.
solve.py personnaliséVous pouvez faire en sorte que pwninit charge automatiquement votre modèle personnalisé en ajoutant un alias à votre ~/.bashrc.
alias pwninit='pwninit --template-path ~/.config/pwninit-template.py --template-bin-name e'
Installez pwninit ou
pwninit-bin depuis l'AUR.
Vous pouvez télécharger les binaires musl liés statiquement depuis la page des versions.
Exécutez
cargo install pwninit
Ceci place le binaire dans ~/.cargo/bin.
Notez que openssl, liblzma et pkg-config sont requis pour la compilation.
$ ls
hunter libc.so.6 readme
$ pwninit
bin: ./hunter
libc: ./libc.so.6
setting ./hunter executable
fetching linker
https://launchpad.net/ubuntu/+archive/primary/+files//libc6_2.23-0ubuntu10_i386.deb
unstripping libc
https://launchpad.net/ubuntu/+archive/primary/+files//libc6-dbg_2.23-0ubuntu10_i386.deb
setting ./ld-2.23.so executable
copying ./hunter to ./hunter_patched
running patchelf on ./hunter_patched
writing solve.py stub
$ ls
hunter hunter_patched ld-2.23.so libc.so.6 readme solve.py
solve.py :
#!/usr/bin/env python3
from pwn import *
exe = ELF("./hunter_patched")
libc = ELF("./libc.so.6")
ld = ELF("./ld-2.23.so")
context.binary = exe
def conn():
if args.LOCAL:
r = process([exe.path])
if args.GDB:
gdb.attach(r)
else:
r = remote("addr", 1337)
return r
def main():
r = conn()
# good luck pwning :)
r.interactive()
if __name__ == "__main__":
main()