
ELF बाइनरीज़ को पैच करने, मेल खाते लिंकर्स प्राप्त करने, libc को अनस्ट्रिप करने और pwntools सॉल्व स्क्रिप्ट जेनरेट करके बाइनरी एक्सप्लॉइटेशन चुनौतियों की सेटअप को स्वचालित करता है।
pwninitबाइनरी एक्सप्लॉइट चुनौतियों को शुरू करने के स्वचालन का एक उपकरण
ld-linux.so.*) डाउनलोड करें जो प्रदान की गई libc को बिना segfault किए लोड कर सकेpatchelf के साथ बाइनरी को पैच करें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 को स्थायी बनानाअपने ~/.bashrc में एक alias जोड़कर आप pwninit को अपने कस्टम टेम्पलेट को स्वचालित रूप से लोड करने के लिए बना सकते हैं।
alias pwninit='pwninit --template-path ~/.config/pwninit-template.py --template-bin-name e'
AUR से pwninit या pwninit-bin इंस्टॉल करें।
आप रिलीज़ पेज से स्टैटिकली-लिंक्ड 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()