एक डिबग करने योग्य एप्लिकेशन का शोषण
Reading time: 5 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
रूट और डिबग करने योग्य जांचों को बायपास करना
इस पोस्ट का यह खंड https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 से एक सारांश है।
एक Android ऐप को डिबग करने योग्य बनाने और जांचों को बायपास करने के चरण
ऐप को डिबग करने योग्य बनाना
सामग्री https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 पर आधारित है।
- APK को डिकंपाइल करें:
- APK को डिकंपाइल करने के लिए APK-GUI टूल का उपयोग करें।
- android-manifest फ़ाइल में
android:debuggable=true
डालें ताकि डिबगिंग मोड सक्षम हो सके। - संशोधित एप्लिकेशन को फिर से संकलित करें, साइन करें और ज़िपलाइन करें।
- संशोधित एप्लिकेशन स्थापित करें:
- कमांड का उपयोग करें:
adb install <application_name>
।
- पैकेज नाम प्राप्त करें:
- तीसरे पक्ष के एप्लिकेशनों की सूची बनाने और पैकेज नाम खोजने के लिए
adb shell pm list packages –3
चलाएँ।
- ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:
- कमांड:
adb shell am setup-debug-app –w <package_name>
। - नोट: इस कमांड को हर बार एप्लिकेशन शुरू करने से पहले चलाना चाहिए ताकि यह डिबगर की प्रतीक्षा करे।
- स्थिरता के लिए,
adb shell am setup-debug-app –w -–persistent <package_name>
का उपयोग करें। - सभी फ्लैग हटाने के लिए,
adb shell am clear-debug-app <package_name>
का उपयोग करें।
- Android Studio में डिबगिंग के लिए तैयार करें:
- Android Studio में File -> Open Profile or APK पर जाएँ।
- पुनः संकलित APK खोलें।
- मुख्य जावा फ़ाइलों में ब्रेकपॉइंट सेट करें:
MainActivity.java
(विशेष रूप सेonCreate
विधि में),b.java
, औरContextWrapper.java
में ब्रेकपॉइंट रखें।
जांचों को बायपास करना
ऐप कुछ बिंदुओं पर यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप की जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
डिबग करने योग्य जांच के लिए:
- फ्लैग सेटिंग्स को संशोधित करें:
- डिबगर कंसोल के वेरिएबल सेक्शन में जाएँ:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
। - नोट:
flags = 814267974
का बाइनरी प्रतिनिधित्व11000011100111011110
है, जो इंगित करता है कि "Flag_debuggable" सक्रिय है।
ये चरण सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन संभव हो सके।
चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
एक भेद्यता का शोषण
एक कमजोर एप्लिकेशन का प्रदर्शन किया गया जिसमें एक बटन और एक टेक्स्टव्यू था। प्रारंभ में, एप्लिकेशन "Crack Me" प्रदर्शित करता है। लक्ष्य रनटाइम पर "Try Again" से "Hacked" संदेश को बदलना है, बिना स्रोत कोड को संशोधित किए।
भेद्यता की जांच करना
- एप्लिकेशन को
apktool
का उपयोग करके डिकंपाइल किया गया ताकिAndroidManifest.xml
फ़ाइल तक पहुँच प्राप्त की जा सके। - AndroidManifest.xml में
android_debuggable="true"
की उपस्थिति यह संकेत करती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है। - यह ध्यान देने योग्य है कि
apktool
का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।
सेटअप तैयार करना
- प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और
adb jdwp
का उपयोग करके सुनने वाले डलविक वीएम पोर्ट की पहचान करना शामिल था। - JDWP (Java Debug Wire Protocol) एक एप्लिकेशन को VM में चलाने के लिए डिबगिंग की अनुमति देता है, एक अद्वितीय पोर्ट को उजागर करके।
- दूरस्थ डिबगिंग के लिए पोर्ट फॉरवर्डिंग आवश्यक थी, इसके बाद JDB को लक्षित एप्लिकेशन से जोड़ा गया।
रनटाइम पर कोड इंजेक्ट करना
- शोषण ब्रेकपॉइंट सेट करके और एप्लिकेशन के प्रवाह को नियंत्रित करके किया गया।
- एप्लिकेशन की संरचना को उजागर करने के लिए
classes
औरmethods <class_name>
जैसे कमांड का उपयोग किया गया। onClick
विधि पर एक ब्रेकपॉइंट सेट किया गया, और इसके निष्पादन को नियंत्रित किया गया।- स्थानीय वेरिएबल्स का निरीक्षण और संशोधन करने के लिए
locals
,next
, औरset
कमांड का उपयोग किया गया, विशेष रूप से "Try Again" संदेश को "Hacked" में बदलने के लिए। - संशोधित कोड को
run
कमांड का उपयोग करके निष्पादित किया गया, सफलतापूर्वक एप्लिकेशन के आउटपुट को वास्तविक समय में बदल दिया गया।
इस उदाहरण ने दिखाया कि कैसे एक डिबग करने योग्य एप्लिकेशन के व्यवहार को हेरफेर किया जा सकता है, जिससे अधिक जटिल शोषण की संभावनाएँ उजागर होती हैं जैसे कि एप्लिकेशन के संदर्भ में डिवाइस पर शेल एक्सेस प्राप्त करना।
संदर्भ
- https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।