
cve-2017-5487 wp rest api 취약점
: वर्डप्रेस 4.7.1 से पहले के संस्करणों में, wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php में REST API कार्यान्वयन में प्रकाशक सूची को प्रतिबंधित नहीं करने के कारण, दूरस्थ हमलावर wp-json/wp/v2/users अनुरोध के माध्यम से महत्वपूर्ण जानकारी प्राप्त कर सकता है।
( संदर्भ : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
यदि आप समझ नहीं पाए, तो पहले पृष्ठभूमि ज्ञान के बारे में जानें और फिर अभ्यास के माध्यम से समझें।
यदि आपको लगता है कि पृष्ठभूमि ज्ञान की आवश्यकता नहीं है, तो [3] से देखें।
: सरल शब्दों में, "क्या और कैसे करना है" को परिभाषित करने वाला API REST API कहलाता है।
: अधिक विस्तार से, REST API वह है जो HTTP URI द्वारा परिभाषित संसाधनों को HTTP Method और Payload का उपयोग करके कैसे संचालित किया जाए, यह परिभाषित करता है।
: REST = REpresentational State Transter का संक्षिप्त रूप
2.1 HTTP URI द्वारा परिभाषित संसाधन
: संसाधन का अर्थ है प्रसंस्करण का लक्ष्य
उदा. JSON, XML दस्तावेज़, jpg जैसे छवि फ़ाइल, mp4 जैसे वीडियो फ़ाइल, आदि..
: URI का अर्थ Uniform Resource Identifier है, जो एक एकीकृत संसाधन पहचानकर्ता है। हम सामान्यतः जो URL देखते हैं वह भी URI का एक भाग है, जो किसी संसाधन की पहचान करने को संदर्भित करता है।
उदा. यदि http://rootable.tistory.com/user/test के माध्यम से test नामक उपयोगकर्ता के बारे में जानकारी प्राप्त की जा सकती है, तो यह भी एक URI है।
2.2 HTTP Method
: ये विधियाँ संसाधन के प्रकार की परवाह किए बिना समान रूप से काम करती हैं।
: REST API में उपयोग की जाने वाली विधियाँ POST, GET, PUT, PATCH, DELETE आदि हैं। ध्यान देने योग्य बात यह है कि ये हमारे सामान्य विचार से भिन्न हैं। उदाहरण के लिए, POST को हम सर्वर से डेटा या दस्तावेज़ का अनुरोध करने की विधि मानते हैं, लेकिन REST API में यह निर्माण (create) का कार्य करती है।
HTTP Method
CRUD संचालन
POST
create
GET
read
PUT
update / replace
PATCH
update / modify
DELETE
delete
उदा. http://rootable.tistory.com के users में doni नामक उपयोगकर्ता जोड़ने के लिए REST API
POST http://rootable.tistroy.com/users/doni
उदा. उपयोगकर्ता निर्माण करते समय यदि व्यवसाय, आयु, लिंग आदि विभिन्न विशेषताओं की आवश्यकता हो, तो Body भाग में XML या JSON जैसी विभिन्न अभिव्यक्ति भाषाओं को निर्दिष्ट करके पंजीकृत करें
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
: REST API को पूर्व-परिभाषित API कहा गया है जो बताता है कि संसाधनों के साथ क्या करना है। तो वर्डप्रेस में परिभाषित REST API क्या हैं?
नीचे दी गई तालिका देखें।
संसाधन आधार मार्ग Posts /wp/v2/posts Post Revisions /wp/v2/revisions Categories /wp/v2/categories Tags /wp/v2/tags Pages /wp/v2/pages Comments /wp/v2/comments Taxonomies /wp/v2/taxonomies Media /wp/v2/media Users /wp/v2/users Post Types /wp/v2/types Post Statuses /wp/v2/statuses Settings /wp/v2/settings
कई REST API परिभाषित हैं। यहाँ हम देख सकते हैं कि इस CVE में /wp/v2/users शामिल है, जिसके बारे में हम जानेंगे।
4.1. लेखक के बारे में जानकारी प्राप्त करना
नीचे EXPLOIT DB से प्राप्त कोड है। ( https://www.exploit-db.com/exploits/41497/ )
जैसा कि कोड से स्पष्ट है, यह केवल परिणाम को साफ-सुथरा प्रस्तुत करता है। इस एक्सप्लॉइट कोड का उपयोग किए बिना भी सीधे पहुँचकर जानकारी प्राप्त की जा सकती है, इसलिए FU भेद्यता तक जाने की आवश्यकता नहीं है।
#!usr/bin/php
इसे वर्डप्रेस स्थापित स्थान पर PHP कोड के रूप में सहेज कर चलाने पर नीचे दिखाए अनुसार परिणाम मिलता है।
???
सीधे पहुँचने पर यह नीचे दिखाए अनुसार दिखता है। (यदि ठीक से न दिखे तो क्लिक करें)
???
इससे हम लेख लिखने वाले उपयोगकर्ता का ID, name आदि जानकारी प्राप्त कर सकते हैं।
नोट: मैंने सोचा था कि सभी पंजीकृत उपयोगकर्ता दिखेंगे, लेकिन परीक्षण में केवल लेखक के खाते दिखे। CVE विवरण में 'author' शब्द है, जो संभवतः लेखक को संदर्भित करता है।
4.2 फ़ाइल अपलोड पथ प्राप्त करना
वर्डप्रेस के REST API में /wp/v2/posts है। इस तक पहुँचने पर पोस्ट की गई जानकारी दिखती है, जिसमें से चिह्नित भाग की तरह फ़ाइल अपलोड पथ प्राप्त किया जा सकता है। यदि FU भेद्यता पाई जाती है, तो यह बहुत सहायक हो सकता है।
???
संस्करण 4.7 में भी सेटिंग देखना या पोस्ट संपादित करना संभव नहीं लगता,
???
???
संदर्भ)
REST API विवरण : http://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=220986337770
यूनिकोड अनुवाद : http://koreanstudies.com/unicode-converter.html
डाउनग्रेड (करते समय प्रगति नहीं होने पर पुनः स्थापित किया, इसलिए नया स्थापित न करने की सलाह दी जाती है)