अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में PRs सबमिट करके।
Yaml डिसीरियलाइजेशन
Yaml python पुस्तकालय भी पायथन ऑब्जेक्ट्स को सिर्फ रॉ डेटा ही नहीं, सिरीयलाइज़ करने में सक्षम है:
print(yaml.dump(str("lol")))
lol
...
print(yaml.dump(tuple("lol")))
!!python/tuple
- l
- o
- l
print(yaml.dump(range(1,10)))
!!python/object/apply:builtins.range
- 1
- 10
- 1
जांचें कि tuple एक कच्चा प्रकार का डेटा नहीं है और इसलिए इसे सिरीकरण किया गया था। और यही हुआ range के साथ भी (builtins से लिया गया)।
safe_load() या safe_load_all() SafeLoader का उपयोग करते हैं और क्लास ऑब्जेक्ट डेसीरियलाइज़ेशन का समर्थन नहीं करते। क्लास ऑब्जेक्ट डेसीरियलाइज़ेशन उदाहरण:
import yamlfrom yaml import UnsafeLoader, FullLoader, Loaderdata =b'!!python/object/apply:builtins.range [1, 10, 1]'print(yaml.load(data, Loader=UnsafeLoader))#range(1, 10)print(yaml.load(data, Loader=Loader))#range(1, 10)print(yaml.load_all(data))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=Loader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=UnsafeLoader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.load_all(data, Loader=FullLoader))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.unsafe_load(data))#range(1, 10)print(yaml.full_load_all(data))#<generator object load_all at 0x7fc4c6d8f040>print(yaml.unsafe_load_all(data))#<generator object load_all at 0x7fc4c6d8f040>#The other ways to load data will through an error as they won't even attempt to#deserialize the python object
पिछला कोड unsafe_load का उपयोग सीरीयलाइज्ड पायथन क्लास लोड करने के लिए किया गया था। यह इसलिए है क्योंकि संस्करण >= 5.1 में, यह किसी भी सीरीयलाइज्ड पायथन क्लास या क्लास एट्रिब्यूट को डीसीरियलाइज़ करने की अनुमति नहीं देता है, Loader not specified in load() or Loader=SafeLoader।
नोट करें कि हाल के संस्करणों में आप अब .load() को नहीं कह सकते हैं बिना Loader और FullLoader इस हमले के लिए अब असंरक्षित नहीं है।
RCE
कस्टम payloads को बनाने के लिए Python YAML modules जैसे PyYAML या ruamel.yaml का उपयोग किया जा सकता है। ये payloads उन systems में दोषों का शोषण कर सकते हैं जो अविश्वसनीय इनपुट को उचित सेनिटाइज़ेशन के बिना डीसीरियलाइज़ करते हैं।