2012-05-14 18 views
6

हमारे पास जावा आईआरसी एप्लीकेशन है जहां उपयोगकर्ताओं को मनमाने ढंग से PHP निष्पादित करने और परिणाम प्राप्त करने की अनुमति है। कुछ इस प्रकार के लिए प्रयोग किया जाता है का एक उदाहरण है:PHP जेलिंग मनमाने ढंग से कोड

btc: <php>$btc = json_decode(file_get_contents('https://btc-e.com/api/2/1/ticker'), true); $ticker = $btc['ticker']; echo "Current BTC Ticker: High: $".$ticker['high']." Low: $".$ticker['low']." Average: $" . $ticker['avg']; 

हम यह भी एक अजगर सेटअप है, लेकिन हम पीएचपी चाहते क्योंकि पीएचपी कहीं भी कोड में नई-पंक्तियों की आवश्यकता नहीं है।

<php>echo readfile("/etc/passwd"); 
: (चूंकि यह आईआरसी है, हम इसे नई पंक्तियां जब तक हम एक वेब-लोडेड .py फ़ाइल exec नहीं दे सकता)

मुद्दा ऐसे में के रूप में प्रणाली, का फायदा उठाने की कोशिश कर रहा से रोकने के लिए कैसे है

जो सभी को देखने के लिए passwd फ़ाइल को स्पष्ट रूप से पढ़ा जाएगा।
हम भी इस समस्या हो रही है, हम readfile() ब्लॉक करने की कोशिश के बाद:

<php>$rf = readfile; echo $rf("/etc/passwd"); 

हम इस प्रणाली को हासिल करने के बारे में कैसे जाना चाहिए? (पूर्ण कोड गिटूब पर है, किसी भी रुचि के लिए: https://github.com/clone1018/Shocky)

एक तरफ, वास्तविक वास्तविक जानकारी का खुलासा नहीं किया जा रहा है, क्योंकि पूरी चीज वीएम में है, इसलिए यह "टाइमबॉम्ब" या कुछ भी नहीं है । हम अभी भी इसे लॉक करना चाहते हैं।

+7

के नवीनतम संस्करणों से हटा दिया गया है/हटाया गया है आपके वेब सर्वर को '/ etc/passwd' पढ़ने का अधिकार क्यों है? स्टार्टर्स के लिए अपने वेब उपयोगकर्ता को लॉक करें। – afuzzyllama

+1

@afuzzyllama का वेब उपयोगकर्ता के साथ कुछ लेना देना नहीं है; '/ etc/passwd' अधिकांश लिनक्स वितरण पर डिफ़ॉल्ट रूप से दुनिया को पठनीय है।कुछ प्रोग्रामों को कार्य करने के लिए उस फ़ाइल तक पहुंच की आवश्यकता होती है, और इसमें कोई भी पासवर्ड नहीं है। –

+0

@Ryan P - "वेब उपयोगकर्ता" से मेरा मतलब है कि उपयोगकर्ता अपाचे चला रहा है, न कि वेबसाइट पर उपयोगकर्ता। – afuzzyllama

उत्तर

4

ऐसा लगता है कि एक कोलंडर में एक छेद प्लगिंग की तरह लगता है। फाइल सिस्टम सुरक्षा ओएस द्वारा संभाली जानी चाहिए, आवेदन नहीं। और जहां तक ​​/etc/passwd चला जाता है, ओएस पहले से ही इसे सुरक्षित कर रहा है। मेरी /etc/passwd

यहाँ की पहली पंक्ति है - हाँ, मैं इसे सार्वजनिक रूप से पोस्ट करने के लिए जा रहा हूँ:

root:x:0:0:root:/root:/bin/bash 

आमतौर पर, पासवर्ड वास्तव में /etc/passwd में संग्रहीत नहीं हैं। उपयोगकर्ता की जानकारी है, लेकिन पासवर्ड को x के साथ प्रतिस्थापित किया गया है, वास्तविक पासवर्ड केवल रूट उपयोगकर्ता के लिए उपलब्ध है।

हालांकि, आपको कुछ डिग्री तक PHP को लॉक करना चाहिए। open_basedir सहित ini_set के साथ रनटाइम के दौरान आप कई PHP विकल्प बदल सकते हैं। http://www.php.net/manual/en/ini.core.php#ini.open-basedir

+0

स्वीकार करना क्योंकि यह ऐसा कुछ है जिसे हमने नहीं किया है। – Riking

+0

** @ रयान पी: ** यह अभी भी रूट समस्या को ठीक नहीं कर रहा है, अगर हम ऐसा करते हैं, तो वे अभी भी '$ a = 'शामिल कर सकते हैं'; $ ए ('sql.php'); 'या इसी तरह। ** @ afuzzyllama: ** यह रूट समस्या से भी बच रहा है,/etc/passwd सिर्फ एक उदाहरण था। भले ही उपयोगकर्ता एक चिंतित एनवी में था, फिर भी वे उस जेल में अन्य फाइलों तक पहुंच पाएंगे, हम उसे नहीं चाहते हैं। – clone1018

+0

यदि आप किसी फ़ाइल के साथ निर्देशिका में 'open_basedir' सेट करते हैं, तो आप चल रहे स्क्रिप्ट के अलावा कुछ भी नहीं खोल सकते हैं। फ़ाइल खोलने के लिए प्रयुक्त विधि अप्रासंगिक है; यह 'शामिल' को भी प्रभावित करता है। –

-4

आप केवल फ़ाइल शायद पढ़ने प्रतिबंधित करना चाहते हैं यदि यह आप के लिए php < 5.4 के एक पुराने संस्करण का उपयोग कर रहे हैं, तो मदद कर सकते हैं http://www.php.net/manual/en/ini.core.php#ini.open-basedir

आप php सुरक्षित मोड

http://php.net/manual/en/ini.sect.safe-mode.php

उपयोग करने पर विचार कर सकते हैं

PHP

safe_mode_exec_dir 
disable_functions = readfile,system 
प्रतिबंधित करने के लिए सुरक्षित मोड के लिए निम्न वर्र्स सेट करें

और कई अन्य

इसके अलावा उपयोगकर्ता किसी भी फ़ाइल को पढ़ने में सक्षम नहीं होगा जिसके लिए यूआईडी अलग है, उदा।/Etc/पासवर्ड। सलाह दी जानी चाहिए कि सुरक्षित मोड को PHP

+1

आपको किसी को भी बहिष्कृत कार्यक्षमता का उपयोग करने का सुझाव नहीं देना चाहिए, खासकर जब इसे वर्तमान संस्करण में हटा दिया गया हो। –

+0

बू ने पुराने बुद्धिमान व्यक्ति से कहा: -पी। इस मामले में इस विशेष उपयोग के मामले में सुरक्षित मोड पुराने शर्त वाले व्यक्ति से एक उत्तर के मुकाबले कमजोर पड़ने पर भी बेहतर शर्त प्रतीत होता है (जो दूरस्थ रूप से प्रश्नों के समाधान पर छूने की कोशिश नहीं करता है लेकिन फिर भी +2)। – APZ

+0

किसी समस्या का समाधान और किसी प्रश्न का उत्तर एक ही बात नहीं है। मैं अंधाधुंध सवालों के जवाब देने की बजाय समस्याओं का समाधान करने की कोशिश करता हूं, क्योंकि पूर्व अक्सर बाद वाले लोगों के लिए बेहतर होता है। –

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