Exploiting Tools
Last updated
Last updated
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
आप वैकल्पिक रूप से GE का यह फोर्कF का उपयोग कर सकते हैं जिसमें अधिक दिलचस्प निर्देश शामिल हैं।
जब आप डिबगिंग कर रहे होते हैं, तो GDB के पास बाइनरी द्वारा निष्पादित होने पर उपयोग किए गए पते की तुलना में थोड़ा अलग पते होंगे। आप GDB को समान पते रखने के लिए कर सकते हैं:
unset env LINES
unset env COLUMNS
set env _=<path>
बाइनरी का पूर्ण पथ डालें
समान पूर्ण मार्ग का उपयोग करके बाइनरी का शोषण करें
PWD
और OLDPWD
GDB का उपयोग करते समय और बाइनरी का शोषण करते समय समान होना चाहिए
जब आपके पास एक स्थैतिक रूप से लिंक की गई बाइनरी होती है, तो सभी फ़ंक्शन बाइनरी से संबंधित होंगे (और बाहरी पुस्तकालयों से नहीं)। इस मामले में, उपयोगकर्ता इनपुट मांगने के लिए बाइनरी द्वारा अनुसरण किए जाने वाले प्रवाह की पहचान करना कठिन होगा।
आप इस प्रवाह की पहचान आसानी से कर सकते हैं gdb के साथ बाइनरी को चलाकर जब तक कि आप इनपुट के लिए नहीं पूछे जाते। फिर, इसे CTRL+C के साथ रोकें और bt
(बैकट्रेस) कमांड का उपयोग करें ताकि आप कॉल किए गए फ़ंक्शनों को देख सकें:
gdbserver --multi 0.0.0.0:23947
(IDA में आपको Linux मशीन में executable का पूर्ण पथ भरना होगा और Windows मशीन में)
Ghidra स्थानीय चर की स्थिति के बारे में जानकारी के लिए बफर ओवरफ्लो के लिए ऑफसेट खोजने में बहुत उपयोगी है।
उदाहरण के लिए, नीचे दिए गए उदाहरण में, local_bc
में एक बफर प्रवाह यह संकेत करता है कि आपको 0xbc
का ऑफसेट चाहिए। इसके अलावा, यदि local_10
एक कैनरी कुकी है, तो यह संकेत करता है कि इसे local_bc
से ओवरराइट करने के लिए 0xac
का ऑफसेट है।
&#xNAN;Rयाद रखें कि पहले 0x08 से जहां RIP सहेजा गया है, वह RBP का है।
Get every opcode executed in the program.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> सुरक्षा के बिना संकलित करें &#xNAN;-o --> आउटपुट &#xNAN;-g --> कोड सहेजें (GDB इसे देख सकेगा) echo 0 > /proc/sys/kernel/randomize_va_space --> लिनक्स में ASLR को निष्क्रिय करने के लिए
एक शेलकोड संकलित करने के लिए: nasm -f elf assembly.asm --> एक ".o" लौटाता है ld assembly.o -o shellcodeout --> निष्पादन योग्य
-d --> निष्पादन योग्य अनुभागों को असेंबल करें (संविधानित शेलकोड के ऑपकोड देखें, ROP Gadgets खोजें, फ़ंक्शन का पता लगाएं...) &#xNAN;-Mintel --> Intel सिंटैक्स &#xNAN;-t --> प्रतीकों की तालिका &#xNAN;-D --> सभी को असेंबल करें (स्थिर चर का पता) &#xNAN;-s -j .dtors --> dtors अनुभाग &#xNAN;-s -j .got --> got अनुभाग -D -s -j .plt --> plt अनुभाग डीकंपाइल &#xNAN;-TR --> रिलोकेशन ojdump -t --dynamic-relo ./exec | grep puts --> GOT में संशोधन के लिए "puts" का पता objdump -D ./exec | grep "VAR_NAME" --> एक स्थिर चर का पता (ये DATA अनुभाग में संग्रहीत होते हैं)।
अपने प्रोग्राम को शुरू करने से पहले ulimit -c unlimited
चलाएं
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
चलाएं
sudo gdb --core=<path/core> --quiet
ldd executable | grep libc.so.6 --> पता (यदि ASLR है, तो यह हर बार बदलता है) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> यह देखने के लिए लूप कि क्या पता बहुत बदलता है readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> "system" का ऑफसेट strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> "/bin/sh" का ऑफसेट
strace executable --> निष्पादन योग्य द्वारा कॉल की गई फ़ंक्शन rabin2 -i ejecutable --> सभी फ़ंक्शनों का पता
IDA फ़ोल्डर के अंदर आप बाइनरी पा सकते हैं जिन्हें लिनक्स के अंदर एक बाइनरी को डिबग करने के लिए उपयोग किया जा सकता है। ऐसा करने के लिए बाइनरी linux_server
या linux_server64
को लिनक्स सर्वर के अंदर ले जाएं और उस फ़ोल्डर के अंदर चलाएं जिसमें बाइनरी है:
फिर, डिबगर को कॉन्फ़िगर करें: Debugger (linux remote) --> Proccess options...:
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)