Burp प्रमाणपत्र इंस्टॉल करें
Reading time: 10 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
ADB के माध्यम से सिस्टम-वाइड proxy
एक ग्लोबल HTTP proxy कॉन्फ़िगर करें ताकि सभी ऐप्स का ट्रैफ़िक आपके interceptor (Burp/mitmproxy) के माध्यम से होकर गुज़रें:
# Set proxy (device/emulator must reach your host IP)
adb shell settings put global http_proxy 192.168.1.2:8080
# Clear proxy
adb shell settings put global http_proxy :0
Tip: Burp में अपने listener को 0.0.0.0 पर बाइंड करें ताकि LAN पर डिवाइस कनेक्ट कर सकें (Proxy -> Options -> Proxy Listeners).
वर्चुअल मशीन पर
सबसे पहले आपको Burp से Der certificate डाउनलोड करने की आवश्यकता है। आप यह Proxy --> Options --> Import / Export CA certificate में कर सकते हैं
.png)
Export the certificate in Der format और आइए इसे एक ऐसे फॉर्म में बदलते हैं जिसे Android समझ सके। ध्यान दें कि burp certificate को Android मशीन में AVD में configure करने के लिए आपको इस मशीन को run with -writable-system विकल्प के साथ चलाना होगा.\ उदाहरण के लिए आप इसे इस तरह चला सकते हैं:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
फिर, burps certificate कॉन्फ़िगर करें:
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
mv burp_cacert.pem $CERTHASHNAME #Correct name
adb root && sleep 2 && adb remount #Allow to write on /syste
adb push $CERTHASHNAME /sdcard/ #Upload certificate
adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correct location
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine
जब मशीन rebooting पूरा कर लेगी तो Burp certificate उस पर लागू हो जाएगा!
Magisc का उपयोग
यदि आपने Magisc से अपना डिवाइस rooted किया है (शायद एक emulator), और आप पिछले steps को Burp cert इंस्टॉल करने के लिए follow नहीं कर पाए क्योंकि filesystem is read-only है और आप उसे writable के रूप में remount नहीं कर पा रहे हैं, तो एक और तरीका है।
Explained in this video you need to:
- Install a CA certificate: बस drag&drop करके DER Burp certificate की extension को
.crtमें बदल कर मोबाइल के Downloads फोल्डर में रखें औरInstall a certificate->CA certificateपर जाएँ
.png)
- जाँच करें कि certificate सही तरीके से स्टोर हुआ है:
Trusted credentials->USERपर जाकर
.png)
- Make it System trusted: Magisc module MagiskTrustUserCerts (.zip file) डाउनलोड करें, उसे फोन में drag&drop करें, फोन में Magics app खोलकर
Modulesसेक्शन पर जाएँ,Install from storageपर क्लिक करें,.zipmodule चुनें और install होने के बाद फोन reboot करें:
.png)
- रिबूट के बाद
Trusted credentials->SYSTEMपर जाकर देखें कि Postswigger cert वहाँ मौजूद है
.png)
Magisc module बनाना सीखें
Android 14 के बाद
Android 14 की हालिया रिलीज़ में system-trusted Certificate Authority (CA) certificates के हैंडलिंग में एक महत्वपूर्ण बदलाव आया है। पहले ये certificates /system/etc/security/cacerts/ में रखे जाते थे, जिन्हें root privileges वाले यूज़र्स द्वारा एक्सेस और मॉडिफाई किया जा सकता था और ये बदलाव सिस्टम-व्यापी तुरंत लागू होते थे। हालांकि, Android 14 के साथ स्टोरेज लोकेशन को /apex/com.android.conscrypt/cacerts में स्थानांतरित कर दिया गया है, जो /apex पथ के भीतर आता है और मूलतः immutable है।
/apex के cacerts path को writable के रूप में remount करने का प्रयास विफल रहता है क्योंकि सिस्टम ऐसी ऑपरेशन्स की अनुमति नहीं देता। यहां तक कि directory को unmount करने या उसे tmpfs के साथ overlay करने के प्रयास भी immutability को दरकिनार नहीं कर पाते; applications फ़ाइल सिस्टम स्तर पर किए गए बदलावों के बावजूद मूल certificate डेटा तक पहुँचती रहती हैं। यह मजबूती इसलिए है क्योंकि /apex माउंट को PRIVATE propagation के साथ कॉन्फ़िगर किया गया है, जिससे /apex डायरेक्टरी के भीतर किए गए कोई भी संशोधन अन्य प्रोसेसों को प्रभावित नहीं करते।
Android की initialization init process द्वारा होती है, जो operating system शुरू होने पर Zygote process को भी initiate करता है। यह process नए mount namespace के साथ application processes लॉन्च करने के लिए जिम्मेदार है, जिसमें एक private /apex mount शामिल होता है, जिससे इस डायरेक्टरी में किए गए बदलाव अन्य प्रोसेसों से अलग-थलग रहते हैं।
फिर भी, उन लोगों के लिए एक workaround मौजूद है जिन्हें /apex डायरेक्टरी के भीतर system-trusted CA certificates को मॉडिफाई करने की आवश्यकता है। इसमें /apex की PRIVATE propagation को हटाने के लिए मैन्युअल रूप से remount करना शामिल है, जिससे वह writable बन सके। प्रक्रिया में /apex/com.android.conscrypt की सामग्री को किसी अन्य लोकेशन पर कॉपी करना, फिर /apex/com.android.conscrypt डायरेक्टरी को unmount करके read-only constraint को हटाना, और फिर सामग्री को मूल स्थान पर restore करना शामिल है। यह तरीका system crashes से बचने के लिए तेज़ कार्रवाई की मांग करता है। इन बदलावों को system-व्यापी प्रभावी करने के लिए system_server को restart करने की सिफारिश की जाती है, जो सभी applications को प्रभावी रूप से restart कर सिस्टम को consistent स्थिति में लाता है।
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
mkdir -p -m 700 /data/local/tmp/tmp-ca-copy
# Copy out the existing certificates
cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/
# Create the in-memory mount on top of the system certs folder
mount -t tmpfs tmpfs /system/etc/security/cacerts
# Copy the existing certs back into the tmpfs, so we keep trusting them
mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/
# Copy our new cert in, so we trust that too
mv $CERTIFICATE_PATH /system/etc/security/cacerts/
# Update the perms & selinux context labels
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
# Deal with the APEX overrides, which need injecting into each namespace:
# First we get the Zygote process(es), which launch each app
ZYGOTE_PID=$(pidof zygote || true)
ZYGOTE64_PID=$(pidof zygote64 || true)
# N.b. some devices appear to have both!
# Apps inherit the Zygote's mounts at startup, so we inject here to ensure
# all newly started apps will see these certs straight away:
for Z_PID in "$ZYGOTE_PID" "$ZYGOTE64_PID"; do
if [ -n "$Z_PID" ]; then
nsenter --mount=/proc/$Z_PID/ns/mnt -- \
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
fi
done
# Then we inject the mount into all already running apps, so they
# too see these CA certs immediately:
# Get the PID of every process whose parent is one of the Zygotes:
APP_PIDS=$(
echo "$ZYGOTE_PID $ZYGOTE64_PID" | \
xargs -n1 ps -o 'PID' -P | \
grep -v PID
)
# Inject into the mount namespace of each of those apps:
for PID in $APP_PIDS; do
nsenter --mount=/proc/$PID/ns/mnt -- \
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts &
done
wait # Launched in parallel - wait for completion here
echo "System certificate injected"
Bind-mounting through NSEnter
- एक लिखने योग्य निर्देशिका सेट करना: प्रारंभ में, एक लिखने योग्य निर्देशिका बनाई जाती है, मौजूदा non-APEX सिस्टम प्रमाणपत्र निर्देशिका पर
tmpfsको माउंट करके। यह निम्नलिखित कमांड के साथ किया जाता है:
mount -t tmpfs tmpfs /system/etc/security/cacerts
- Preparing CA Certificates: Writable directory की सेटअप के बाद, जिन CA certificates का उपयोग करना है उन्हें इस डायरेक्टरी में कॉपी करना चाहिए। इसमें default certificates को
/apex/com.android.conscrypt/cacerts/से कॉपी करना शामिल हो सकता है। इन certificates के permissions और SELinux labels को उचित रूप से समायोजित करना आवश्यक है। - Bind Mounting for Zygote:
nsenterका उपयोग करके, Zygote के mount namespace में प्रवेश किया जाता है। Zygote, जो Android applications लॉन्च करने वाली प्रक्रिया है, के लिए यह कदम आवश्यक है ताकि आगे से शुरू होने वाली सभी एप्लिकेशन नए कॉन्फ़िगर किए गए CA प्रमाणपत्रों का उपयोग करें। उपयोग किया जाने वाला कमांड है:
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
यह सुनिश्चित करता है कि शुरू किया गया हर नया ऐप अपडेट किए गए CA प्रमाणपत्र सेटअप का पालन करेगा।
- चल रहे ऐप्स पर परिवर्तन लागू करना: पहले से चल रहे ऐप्स पर परिवर्तन लागू करने के लिए,
nsenterका पुनः उपयोग करके प्रत्येक ऐप के namespace में व्यक्तिगत रूप से प्रवेश किया जाता है और समान bind mount किया जाता है। आवश्यक कमांड है:
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
- Alternative Approach - Soft Reboot: एक वैकल्पिक तरीका
initprocess (PID 1) पर bind mount करने और उसके बाद ऑपरेटिंग सिस्टम कोstop && startकमांड्स से soft reboot करने को शामिल करता है। यह तरीका सभी namespaces में बदलाव फैलाएगा, जिससे प्रत्येक चल रहे app को अलग से संबोधित करने की आवश्यकता नहीं पड़ेगी। हालांकि, reboot करने की असुविधा के कारण यह तरीका आम तौर पर कम पसंद किया जाता है।
संदर्भ
- Android 14: Install a system CA certificate on a rooted device
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
HackTricks