
UART से रूट तक: U-Boot के माध्यम से Xiaomi C200 में घुसपैठ
इस रेपो में मैं दिखाऊंगा कि कैसे मैंने UART इंटरफेस तक पहुंच प्राप्त की, बिना सामान्य एक्सपोज़्ड पिन/टेस्ट पैड के,
U-Boot और ट्रिक्स का उपयोग करके प्रारंभिक चरण में रूट एक्सेस प्राप्त किया और
अंततः फर्मवेयर डंप किया।
PCB से कुछ प्रमुख चीजें स्पष्ट हैं:
पहले मैं सीधे UART एक्सेस के लिए स्पष्ट उम्मीदवारों की ओर गया,
एक पंक्ति में 4 टेस्ट पैड हैं जो Tx, Rx, Ground और Power प्रतीत होते हैं,
लेकिन मल्टीमीटर से परीक्षण करने पर गलत रीडिंग मिली जैसा कि चित्र में दिखाया गया है।
मैंने अधिकांश अन्य टेस्ट पैड भी आज़माए और फिर भी सही रीडिंग नहीं मिली, इसलिए मुझे
रणनीति बदलनी पड़ी।
चूंकि बोर्ड पर कोई कनेक्टर नहीं बचे हैं और न ही कोई सहायक टेस्ट पैड,
मैंने स्रोत तक जाने का निर्णय लिया, प्रोसेसर पिन से जुड़कर और
उस तरह UART शेल प्राप्त किया, मैंने उस प्रोसेसर का डेटाशीट निकाला और
UART प्रोटोकॉल पिन की पहचान की

अब हमें बस बोर्ड पर ग्राउंड ढूंढना है, और कनेक्ट करना है
मैंने इस सेटअप के लिए कुछ PCBite प्रोब और USB 2 TTL एडाप्टर का उपयोग किया

अब हम picocom का उपयोग करके वांछित UART शेल प्राप्त कर सकते हैं
sudo picocom -b 115200 /dev/ttyUSB0
यदि कुछ नहीं किया गया, तो मुझे केवल बूट लॉग मिले और बूटिंग प्रक्रिया के अंत में कोई शेल नहीं मिला,
इसलिए मुझे तुरंत एंटर दबाकर U-Boot को बाधित करना पड़ा।
U-Boot शेल प्राप्त करने पर मैंने सबसे पहले एनवायरनमेंट आर्ग्स प्रिंट किए
हमारे लिए महत्वपूर्ण चीजें हैं
त्वरित रूट एक्सेस प्राप्त करने के लिए मैं setenv के साथ init कमांड को बदलने की ट्रिक का उपयोग कर सकता हूं,
ताकि मुझे linuxrc बाइनरी चलाने के बजाय एक शेल मिले, फिर मैं मेमोरी को मैन्युअल रूप से लोड कर सकता हूं
और डिवाइस को बूट कर सकता हूं (मूल रूप से bootcmd कमांड को कॉपी करना)
अब जब बूट समाप्त होगा, मैं एक प्रारंभिक शेल में पहुंच जाऊंगा जहां सिस्टम पर मूल रूप से कुछ भी नहीं चल रहा होगा,
इसलिए मैं मूल linuxrc बाइनरी को पृष्ठभूमि में चलाऊंगा और इस सिस्टम पर किसी भी खुले पोर्ट की जांच करूंगा
कोई किस्मत नहीं! कैमरा केवल अपने क्लाउड से " 47.237.75.249 " पर बात करता है, कोई खुला वेब इंटरफेस नहीं है जिससे छेड़छाड़ की जा सके।
चूंकि क्लाउड संचार बाइनरी को रिवर्स करना मेरे शोध के दायरे से बाहर है,
यही वह जगह है जहां मैंने अपना शोध समाप्त करने का फैसला किया :)
जो कोई भी फर्मवेयर के साथ खेलने में रुचि रखता है, उसके लिए एक छोटी सी अतिरिक्त जानकारी, यहां बताया गया है कि इसे कैसे प्राप्त करें।
पहले जैसा ही सेटअप UART के साथ लेकिन इस बार केवल फ्लैश से मेमोरी को RAM में प्रोब और लोड करना है, बिना उसमें बूट किए।
फिर आप RAM मेमोरी से डेटा प्रिंट कर सकते हैं और अपने टर्मिनल आउटपुट को रिकॉर्ड कर सकते हैं (इस बार minicom के साथ) एक फाइल में सेव करने के लिए, इसे पायथन से थोड़ा साफ करें और फर्मवेयर प्राप्त करें, binwalk और bootargs का मिलान करने से प्रत्येक सेक्शन का नामकरण करने में मदद मिलती है।
