2010-11-17 14 views
23

यह प्रश्न Exploitable PHP Functions के समान है।एक्सप्लॉयबल पायथन फ़ंक्शन

दंडित डेटा उपयोगकर्ता से आता है, या अधिक विशेष रूप से एक हमलावर। जब एक दांतेदार चर एक सिंक समारोह तक पहुंच जाता है, तो आपके पास भेद्यता होती है। उदाहरण के लिए एक एसक्यूएल क्वेरी निष्पादित करने वाला एक फ़ंक्शन एक सिंक होता है, और जीईटी/पोस्ट वैरिएबल टेंट के स्रोत होते हैं।

पायथन में सभी सिंक फ़ंक्शन क्या हैं? मैं ऐसे कार्यों की तलाश में हूं जो भेद्यता या software weakness पेश करते हैं। मैं विशेष रूप से रिमोट कोड निष्पादन भेद्यता में रूचि रखता हूं। क्या वहां पूरी कक्षाएं/मॉड्यूल हैं जो कार्यात्मक रूप से खतरनाक हैं? क्या आपके पास दिलचस्प पायथन भेद्यता के कोई उदाहरण हैं?

os.system 
os.spawn* 
os.popen* 
popen2.* 
commands.* 

वहाँ भी exec जो अजगर कोड निष्पादित करेंगे और eval जो एक अभिव्यक्ति "का मूल्यांकन" होगा और करने के लिए इस्तेमाल किया जा सकता है:

+6

इसे एक समुदाय विकी बनाने के बारे में कैसे? –

+0

@ स्वेन मार्नच यह कैसे बेहतर करेगा? मैंने पहले ऐसा नहीं किया है। – rook

+0

यह (क्या होगा?) पाइथन को किसी भी महान डिग्री तक सुरक्षित करना बहुत मुश्किल है; भाषा बस इसके लिए बहुत लचीला है। यदि आप एक सुरक्षित पायथन पर्यावरण बनाने की कोशिश कर रहे हैं, तो आपके पास एक बहुत बड़ा काम है। – katrielalex

उत्तर

6

subprocess मॉड्यूल बुरा कार्यात्मक जो क्रियान्वित आदेशों/प्रक्रियाओं के इन तरीकों से बहिष्कृत कर दिया गया होता है चर का उपयोग करें।

14

eval और exec क्लासिक हैं। हालांकि, open और file भी दुरुपयोग किया जा सकता है:

open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000) 

तो फिर वहाँ os, sys, subprocess, और dircache मॉड्यूल हैं। फ़ाइल सिस्टम को छूने वाली बहुत कुछ भी या डेटा को निष्पादन योग्य कोड (जैसे os.system) में बदलने के लिए इस्तेमाल किया जा सकता है।

एस एस लॉट ने टिप्पणियों में बताया, फाइल सिस्टम को लिखना और मनमाने ढंग से बाहरी कार्यक्रमों को निष्पादित करना पायथन-विशिष्ट नहीं है। हालांकि, वे सुरक्षा लेखा परीक्षकों के विचार के लायक हैं। इनमें से अधिकतर कार्यों को सुरक्षा के लिए बहुत अधिक चिंता के बिना सुरक्षित रूप से उपयोग किया जा सकता है। दूसरी ओर, eval और exec, बड़े बड़े लाल झंडे हैं। उन्हें सुरक्षित रूप से उपयोग करने के लिए सावधानीपूर्वक देखभाल की आवश्यकता है। pickle प्रलेखन से

+2

'/ proc/kcore' खोलने के लिए विशेषाधिकारों की आवश्यकता होती है जो अधिकांश प्रक्रियाओं में नहीं होती है। यह एक अलग तरह का शोषण है क्योंकि इसे विशेषाधिकारों की आवश्यकता है और केवल शर्मीली कोडिंग नहीं है। –

+2

@ एसएलॉट: निश्चित रूप से, लेकिन यह सिर्फ एक (नाटकीय) उदाहरण था। हो सकता है कि एक हमलावर वेब सर्वर उपयोगकर्ता के रूप में चलने की अपेक्षा करता है और इसके बजाय '/ var/www/index.html' खोलता है। अच्छी सुरक्षा स्तरित है। हम अपने सभी उपयोगकर्ताओं के प्रशासकों को यह सुनिश्चित करने की उम्मीद नहीं कर सकते कि सबकुछ हर समय इष्टतम अनुमतियों के साथ चलता है, इसलिए यह थोड़ा अतिरिक्त ध्यान देने और इस तरह की चीज़ों की तलाश करने लायक है। – nmichaels

+0

"अच्छी सुरक्षा स्तरित है"। यह पूरी तरह से बिंदु नहीं है। 'Eval' और' exec' पाइथन शोषण हैं जो सुरक्षा पर भरोसा नहीं करते हैं। दूसरा शोषण अलग-अलग है - यह पाइथन के लिए अप्रासंगिक है, क्योंकि सभी भाषाओं में यह है। यह ओएस विशेषाधिकार प्रबंधन का हिस्सा है। यदि आप इसे सूचीबद्ध करने जा रहे हैं, तो आपको उन सभी ओएस शोषणों को सूचीबद्ध करना होगा जिनके पास पायथन के साथ कुछ भी नहीं है। मुझे लगता है कि आपको अपने जवाब में इसे एक अलग तरह के शोषण के रूप में अलग करना चाहिए जो केवल पायथन का उपयोग करने के लिए होता है। –

14

सही:

Warning 

The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source. 
+1

मसालेदार डेटा सबसे खराब है, क्योंकि यह संरचित या स्वच्छ करने के लिए पर्याप्त पठनीय नहीं है, और मनमाने ढंग से कोड निष्पादित किया जा सकता है ** ** अनपिकलिंग। उदाहरण के लिए, डीबीयूएस (या कुछ अन्य ओपन-आईएसपी आईपीसी तंत्र) पर मसालेदार डेटा संरचनाएं भेजना एक विशाल सुरक्षा छेद हो सकता है, लेकिन यह किसी भी व्यक्ति को पाइथन या डीबीयूएस के लिए जरूरी नहीं है। एक बेहतर तरीका JSON या XML का उपयोग करके एक स्पष्ट धारावाहिक विधि लिखना है, और जो भी प्रोटोकॉल आप उपयोग कर रहे हैं उसे भेजें। – detly

3

input समारोह है, जो दिए गए स्ट्रिंग मूल्यांकन करता है और परिणाम देता है, कुछ सीमाएं होती हैं, लेकिन अभी भी दोहन हो सकता है।

+0

पुष्टि कर सकता है कि यह शोषक है। '__import __ ('os')। सिस्टम ('ls')' stdin में उपर्युक्त स्ट्रिंग में फ़ीडिंग, परिणाम में खोल में 'ls' कमांड के निष्पादन में परिणाम। – gtux

9

इस तरह की चीज की तलाश करते समय मैं पागल हो जाता हूं। और इसलिए क्योंकि मैं मेटाप्रोग्रामिंग का बहुत कुछ करता हूं।

  • सबसे पक्ष प्रभाव आदेश (जो अन्य पदों को कवर)
    • फ़ाइल हेरफेर (open, tarfile, zipfile, ...)
    • नेटवर्क कॉल (urllib2, socket, ...)
    • डेटा क्रमबद्धता/दृढ़ता (pickle, shelve, ...)
    • प्रक्रिया/थ्रेड प्रबंधन (subprocess, os.fork, os.kill, ...)
  • builtins
    • getattr
    • setattr
    • delattr
    • eval
    • exec
    • execfile
    • __import__

और शायद दूसरों मैं भूल रहा। मैं उन कार्यों के माध्यम से उपयोगकर्ता इनपुट से भी सावधान हूं जहां मैं sys.path, sys.modules, आदि को संशोधित कर रहा हूं

संबंधित मुद्दे