
أتمتة إعداد تحديات استغلال الثنائيات عن طريق تصحيح ملفات ELF الثنائية، وجلب الروابط (linkers) المطابقة، وإزالة التجريد من libc، وإنشاء سكربتات الحل الخاصة بـ pwntools.
pwninitأداة لأتمتة بدء تحديات استغلال الثنائيات
ld-linux.so.*) يمكنه تحميل libc المقدَّم دون التسبب بأخطاء تجزئةpatchelf لاستخدام
RPATH والمفسِّر الصحيحين لـ libc المقدَّمشغّل pwninit
شغّل pwninit في مجلد يحتوي على الملفات المعنية وسيكتشف أيُّها الثنائي وlibc والرابط. إذا كان الاكتشاف خاطئًا، يمكنك تحديد المواقع باستخدام --bin و--libc و--ld.
solve.py مخصصإذا لم يعجبك القالب الافتراضي، يمكنك استخدام قالبك الخاص. فقط حدد --template-path <path>. راجع template.py لمعرفة تنسيق القالب. يمكن تخصيص أسماء الارتباطات exe وlibc وld باستخدام --template-bin-name و--template-libc-name و--template-ld-name.
solve.py المخصص دائمًايمكنك جعل pwninit يحمّل قالبك المخصص تلقائيًا بإضافة اسم مستعار إلى ملف ~/.bashrc.
alias pwninit='pwninit --template-path ~/.config/pwninit-template.py --template-bin-name e'
ثبّت pwninit أو
pwninit-bin من AUR.
يمكنك تنزيل ثنائيات musl المرتبطة بشكل ثابت من صفحة الإصدارات.
شغّل
cargo install pwninit
يضع هذا الثنائي في ~/.cargo/bin.
لاحظ أن openssl وliblzma وpkg-config مطلوبة للبناء.
$ 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()