2010-12-02 6 views
21

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

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

जावा क्लास लाइब्रेरी (जावा के किसी भी स्वाद के लिए) में सभी सिंक फ़ंक्शन क्या हैं? मैं ऐसे कार्यों की तलाश में हूं जो भेद्यता या software weakness पेश करते हैं। मैं विशेष रूप से रिमोट कोड निष्पादन भेद्यता में रूचि रखता हूं। क्या वहां पूरी कक्षाएं/पुस्तकालय हैं जिनमें गड़बड़ है कि एक हैकर प्रभावित करना चाहेगा? लोग आकस्मिक रूप से खतरनाक जावा कोड कैसे बनाते हैं?

+3

* सभी * सिंक फ़ंक्शन?यह सूची अनंत है, क्योंकि कोई मनमाने ढंग से ऐसे कई कार्यों को परिभाषित कर सकता है। – meriton

+0

@meriton क्या आपने PHP के लिए बनाई गई सूची देखी थी? – rook

+2

मेरा मानना ​​है कि वह जावा लाइब्रेरी कोड का जिक्र नहीं कर रहा है, बेसमेंट लाइब्रेरी – Woot4Moo

उत्तर

8

कोड निष्पादन कमजोरियों:

  1. निजी प्रतिबिंब है, लेकिन ऐसा नहीं होता दागी डेटा एक खतरनाक रास्ते में वहाँ पाने के लिए
  2. मूल निवासी इंटरॉप कोड है जो यह काफी
  3. पैरामीटर है मान्य नहीं करता डी-सीरियलाइजर्स। शायद सबसे खतरनाक है क्योंकि आप अविश्वसनीय डेटा से डी-क्रमबद्ध करना चाहते हैं। कुछ धारावाहिक अपेक्षाकृत सुरक्षित हैं और केवल सार्वजनिक कन्स्ट्रक्टर/सेटर का उपयोग करते हैं, लेकिन अन्य निजी फ़ील्ड तक पहुंचते हैं। और यदि कोई प्रकार की श्वेत-सूची नहीं है तो यह उन पर मनमानी प्रकारों और कॉल सेटर्स को तुरंत चालू कर सकती है।
  4. आईओ का कोई भी रूप, विशेष रूप से
  5. पुस्तकालयों की गतिशील लोडिंग। विशेष रूप से सापेक्ष पथ का उपयोग कर। मजदूर निर्देशिका के बजाय निष्पादन निर्देशिका के लिए विशेष सापेक्ष में

(यह .net के बारे में है, लेकिन मैं जावा बहुत समान होने की उम्मीद)

डाटा इंजेक्शन

तो फिर वहाँ है कार्यों के इंजेक्शन परिवार जो आम तौर पर तारों पर काम नहीं कर रहे हैं लेकिन विशेष पुस्तकालय कार्यों का उपयोग करके रोका जा सकता है। वे आम तौर पर मनमाना कोड इंजेक्शन का कारण नहीं बनते हैं।

  1. एचटीएमएल injectiong/XSS
  2. एसक्यूएल इंजेक्शन (मोटे तौर पर एक दृश्य इंजन है कि उत्पादन और सफाई से भाग निकले और अलग करने अन-भाग निकले तार ऑटो निकल जाता है (शायद अलग अलग प्रकार का उपयोग करके) से रोका) (तैयार बयान से रोका)
  3. फ़ाइल-पथ इंजेक्शन
+0

+1 deserialzation और फ़ाइल I/O –

7

मुझे यकीन है कि इस सूची के रूप में मैं खोजने असली कारनामे में खुदाई बढ़ेगा हूँ:

  1. Spring classloader

  2. निगल लिया अपवाद - के रूप में उल्लेख किया गया है निगलने अपवाद सीधे एक शोषण नहीं हो सकती है, लेकिन यह शोषण की गैर-खोज करने के लिए नेतृत्व कर सकते हैं।

  3. String[] commands = {args[0]};
    Runtime.getRuntime().exec(commands);

    मुझे पता है यह एक काफी तुच्छ आइटम है, लेकिन करने के लिए इसी तरह के कोड चलाने ऊपर आप कुछ इस तरह पारित करने के लिए अनुमति दे सकते हैं कि: * nix पर अगर विंडोज पर या ;rm -rf /&& del /

सबसे बड़ी जिस तरह से लोग खतरनाक बनाते हैं जावा कोड आलसी हो रहा है। जैसा कि आपने इसे चलाने से पहले उपयोगकर्ता इनपुट को साफ़ नहीं किया है।

+0

+1 के लिए +1 है, मैं असली शोषण खोजने पर भी खुदाई करता हूं :) – rook

+2

@Rook मेरे पास एक है अपाचे टॉमकैट, लेकिन जब तक विक्रेता इसे हल नहीं करता तब तक मैं इसे यहां पोस्ट नहीं करूंगा। – Woot4Moo

27

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

ClassLoaders वर्गों (= मनमाना जावा कोड निष्पादन) को परिभाषित:

java.lang.ClassLoader.defineClass 
java.net.URLClassLoader 

= कोड निष्पादन

जावा बीन्स आत्मनिरीक्षण एक अविश्वसनीय स्रोत से लोड हो रहा है वर्गों में ClassLoaders हटाने सकता (example vuln - cve-2010-1622)

java.beans.Instrospector.getBeanInfo 

= कोड निष्पादन

फ़ाइल पहुँच

java.io.File (constructor) 
java.io.File.delete 
java.io.File.renameTo 
java.io.File.listFiles 
java.io.File.list 

= हटाने/नाम बदलने फाइलें, निर्देशिका लिस्टिंग

फ़ाइल धारा/पाठक वर्गों

java.io.FileInputStream 
java.io.FileOutputStream 
java.io.FileReader 
java.io.FileWriter 
java.io.RandomAccessFile 

= फ़ाइल पढ़ने/लिखने का उपयोग

जावा सिस्टम गुण

System.setProperty 
System.getProperties 
System.getProperty 

= कुछ सिस्टम गुण में कुछ जानकारी है कि लगभग संवेदनशील है शामिल हो सकता है, और कुछ प्रणाली विशेषताओं को परिवर्तित, महत्वपूर्ण सामान के निष्पादन, मैं उदाहरण नहीं है हो सकता है, हालांकि

लोड हो रहा है देशी पुस्तकालयों

System.load 
System.loadLibrary 

= मनमानी कोड निष्पादन

निष्पादित ऑपरेटिंग सिस्टम निष्पादनयोग्य

Runtime.exec 
ProcessBuilder (constructor) 

जनरेट कर रहा है देशी प्रणाली के इनपुट ईवेंट

java.awt.Robot.keyPress/keyRelease 
java.awt.Robot.mouseMove/mousePress/mouseRelease 

(हो सकता है कि अब तक प्राप्त किए गए के बाद से एक सर्वर भी एक ग्राफिकल वातावरण नहीं हो सकता)

जावा प्रतिबिंब - मनमाने ढंग से पहुंच (यहां तक ​​कि निजी) के खेतों और तरीकों

java.lang.Class.getDeclaredMethod 
java.lang.Class.getDeclaredField 
java.lang.reflection.Method.invoke 
java.lang.reflection.Field.set 
java.lang.reflection.Field.get 

=, अंतिम कोड निष्पादन के लिए संवेदनशील जानकारी प्रकट = मनमाना कोड निष्पादन परिस्थितियों

जावा स्क्रिप्टिंग इंजन

javax.script.ScriptEngine.eval 

पर निर्भर करता है से

+0

+ 1x4 भयानक पोस्ट – rook

+0

@Rook: धन्यवाद! मुझे लगता है कि सवाल उत्कृष्ट है। मैंने इस सटीक कोण से जावा सुरक्षा पर कभी भी ध्यान नहीं दिया है। –

+0

+1 - महान काम और शोषक तरीकों का वास्तव में संपूर्ण सेट :) – vstoyanov

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