UART

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मौलिक जानकारी

UART एक सीरियल प्रोटोकॉल है, जिसका मतलब है कि यह डेटा को एक बिट के रूप में घटित करता है। उल्टे, पैरलल संचार प्रोटोकॉल एक साथ कई चैनल के माध्यम से डेटा स्थानांतरित करते हैं। सामान्य सीरियल प्रोटोकॉल में RS-232, I2C, SPI, CAN, ईथरनेट, HDMI, PCI Express, और USB शामिल हैं।

सामान्यत: जब UART आईडल स्थिति में होता है, तो रेखा को उच्च रखा जाता है (एक तार्किक 1 मूल्य में)। फिर, डेटा स्थानांतरण की शुरुआत की संकेत देने के लिए, प्रेषक ने प्राप्तकर्ता को एक स्टार्ट बिट भेजा, जिसके दौरान सिग्नल को निचे रखा जाता है (एक तार्किक 0 मूल्य में)। अगले, प्रेषक ने वास्तविक संदेश वाले पांच से आठ डेटा बिट भेजे, जिसके बाद एक वैकल्पिक पैरिटी बिट और एक या दो स्टॉप बिट (जिनका तार्किक 1 मूल्य होता है) भेजे, यह विन्यास पर निर्भर करता है। प्रैरिटी बिट, त्रुटि जांच के लिए उपयोग किया जाता है, अभ्यास में इसे बहुत कम देखा जाता है। स्टॉप बिट (या बिट) संदेश का समापन सूचित करते हैं।

हम सबसे सामान्य विन्यास 8N1 कहते हैं: आठ डेटा बिट, कोई पैरिटी, और एक स्टॉप बिट। उदाहरण के लिए, अगर हमें 8N1 UART विन्यास में वर्ण C, या 0x43 एस्की में, भेजना होता है, तो हम निम्नलिखित बिट भेजेंगे: 0 (स्टार्ट बिट); 0, 1, 0, 0, 0, 0, 1, 1 (बाइनरी में 0x43 का मान), और 0 (स्टॉप बिट)।

UART के साथ संचार करने के लिए हार्डवेयर उपकरण:

  • USB-से-सीरियल एडाप्टर

  • CP2102 या PL2303 चिप्स के साथ एडाप्टर

  • Bus Pirate, Adafruit FT232H, Shikra, या Attify Badge जैसा बहुउद्देशीय उपकरण

UART पोर्ट्स की पहचान

UART में 4 पोर्ट्स होते हैं: TX(ट्रांस्मिट), RX(रिसीव), Vcc(वोल्टेज), और GND(ग्राउंड)। आपको PCB में TX और RX अक्षर लिखे हो सकते हैं। लेकिन अगर कोई संकेत नहीं है, तो आपको एक मल्टीमीटर या एक लॉजिक एनालाइजर का उपयोग करके उन्हें खुद ढूंढने की आवश्यकता हो सकती है।

एक मल्टीमीटर और उपकरण को बंद करके:

  • GND पिन की पहचान के लिए संयोग परीक्षण मोड का उपयोग करें, पीछे का लीड ग्राउंड में रखें और लाल वाले से टेस्ट करें जब तक आप मल्टीमीटर से ध्वनि नहीं सुनते हैं। कई GND पिन्स PCB पर पाए जा सकते हैं, इसलिए आपने UART का वह पिन पाया हो सकता है या नहीं।

  • VCC पोर्ट की पहचान के लिए DC वोल्टेज मोड सेट करें और इसे 20 V वोल्टेज तक सेट करें। ग्राउंड पर काला प्रोब और पिन पर लाल प्रोब रखें। डिवाइस को पावर ऑन करें। अगर मल्टीमीटर 3.3 V या 5 V का निरंतर वोल्टेज मापता है, तो आपने Vcc पिन पाया है। अगर आपको अन्य वोल्टेज मिलती है, तो अन्य पोर्ट्स के साथ पुनः प्रयास करें।

  • TX पोर्ट की पहचान के लिए DC वोल्टेज मोड अप टू 20 V वोल्टेज, काला प्रोब ग्राउंड पर, और लाल प्रोब पिन पर रखें, और डिवाइस को पावर ऑन करें। अगर आपको वोल्टेज कुछ सेकंड के लिए फ्लक्चुएट होती है और फिर Vcc मूल्य पर स्थिर होती है, तो आपने संभावित रूप से TX पोर्ट पाया है। यह इसलिए है क्योंकि पावर ऑन करते समय, यह कुछ डीबग डेटा भेजता है।

  • RX पोर्ट अन्य 3 के निकटतम होगा, इसमें सबसे कम वोल्टेज फ्लक्चुएशन और सभी UART पिन्स के सबसे कम समग्र मूल्य होगा।

आप TX और RX पोर्ट्स को गलती से गलती कर सकते हैं और कुछ नहीं होगा, लेकिन अगर आप GND और VCC पोर्ट को गलती से गलती करते हैं तो आपको सर्किट को फ्राई करने का खतरा हो सकता है।

कुछ लक्ष्य उपकरणों में, निर्माता द्वारा UART पोर्ट को अक्षम कर दिया जाता है, RX या TX को अक्षम करके या दोनों को भी। उस मामले में, सर्किट बोर्ड में कनेक्शन का पता लगाने और कुछ ब्रेकआउट पॉइंट खोजने में मददगार हो सकता है। UART की कोई पहचान न की पुष्टि करने और सर्किट के टूटने की जांच करने के बारे में एक मजबूत संकेत है कि उपकरण वारंटी की जांच करें। यदि उपकरण के साथ कुछ वारंटी के साथ भेजा गया है, तो निर्माता कुछ डीबग इंटरफेस (इस मामले में, UART) छोड़ता है और इसलिए, UART को विच्छेद कर देता है और डिबगिंग के दौरान फिर से जोड़ देगा। ये ब्रेकआउट पिन सॉल्डरिंग या जंपर वायर्स के द्वारा कनेक्ट किए जा सकते हैं।

UART बौड दर की पहचान

सही बौड दर की पहचान करने का सबसे आसान तरीका है TX पिन की आउटपुट देखना और डेटा पढ़ने का प्रयास करना। अगर आपको प्राप्त डेटा पढ़ने योग्य नहीं है, तो डेटा पढ़ने योग्य होने तक अगली संभावित बौड दर पर स्विच करें। इस काम के लिए आप एक USB-से-सीरियल एडाप्टर या Bus Pirate जैसे बहुउद्द

ls /dev/

यूएआरटी इंटरफेस के साथ मौजूदा आपसी क्रियान्वयन के लिए निम्नलिखित कमांड का उपयोग करें:

picocom /dev/<adapter> --baud <baudrate>
For minicom, इस तरह का उपयोग करें कॉन्फ़िगर करने के लिए:
minicom -s

सेटिंग्स जैसे कि बौडरेट और डिवाइस नाम कॉन्फ़िगर करें Serial port setup विकल्प में।

कॉन्फ़िगरेशन के बाद, UART कंसोल प्राप्त करने के लिए minicom कमांड का उपयोग करें।

Arduino UNO R3 के माध्यम से UART (निकालने योग्य Atmel 328p चिप बोर्ड)

यदि UART सीरियल से USB एडाप्टर उपलब्ध नहीं हैं, तो Arduino UNO R3 को एक त्वरित हैक के साथ उपयोग किया जा सकता है। क्योंकि Arduino UNO R3 आम तौर पर कहीं भी उपलब्ध होता है, इससे काफी समय बचाया जा सकता है।

Arduino UNO R3 में बोर्ड पर स्वयं ही एक USB से सीरियल एडाप्टर लगा होता है। UART कनेक्शन प्राप्त करने के लिए, बस Arduino से Atmel 328p माइक्रोकंट्रोलर चिप को बोर्ड से निकाल दें। यह हैक Arduino UNO R3 वेरिएंट्स पर काम करता है जिनमें Atmel 328p बोर्ड पर नहीं सॉल्डर किया गया है (इसमें SMD संस्करण का उपयोग किया जाता है)। Arduino के RX पिन (डिजिटल पिन 0) को UART इंटरफेस के TX पिन से कनेक्ट करें और Arduino का TX पिन (डिजिटल पिन 1) को UART इंटरफेस के RX पिन से कनेक्ट करें।

अंततः, UART इंटरफेस के अनुसार बौड दर सेट करने के लिए Arduino IDE का उपयोग करना सुझावित है। मेनू में tools खंड में, Serial Console विकल्प का चयन करें और यूएआरटी इंटरफेस के अनुसार बौड दर सेट करें।

बस पायरेट

इस परिदृश्य में हम Arduino के UART संचार को स्निफ़ करने जा रहे हैं जो सीरियल मॉनिटर में प्रोग्राम के सभी प्रिंट भेज रहा है।

# Check the modes
UART>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
10. PIC
11. DIO
x. exit(without change)

# Select UART
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value

# Select the speed the communication is occurring on (you BF all this until you find readable things)
# Or you could later use the macro (4) to try to find the speed
(1)>5
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE

# From now on pulse enter for default
(1)>
Stop bits:
1. 1 *default
2. 2
(1)>
Receive polarity:
1. Idle 1 *default
2. Idle 0
(1)>
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)

(1)>
Clutch disengaged!!!
To finish setup, start up the power supplies with command 'W'
Ready

# Start
UART>W
POWER SUPPLIES ON
Clutch engaged!!!

# Use macro (2) to read the data of the bus (live monitor)
UART>(2)
Raw UART input
Any key to exit
Escritura inicial completada:
AAA Hi Dreg! AAA
waiting a few secs to repeat....

UART कंसोल के साथ फर्मवेयर को डंप करना

UART कंसोल एक महान तरीका प्रदान करता है जिससे रनटाइम वातावरण में अंदर के फर्मवेयर के साथ काम करने का। लेकिन जब UART कंसोल एक्सेस केवल पढ़ने के लिए होता है, तो यह कई प्रतिबंध ला सकता है। कई एम्बेडेड डिवाइस में, फर्मवेयर EEPROM में स्टोर किया जाता है और वोलेटाइल मेमोरी वाले प्रोसेसर में निष्पादित किया जाता है। इसलिए, फर्मवेयर को पढ़ने के लिए मूल फर्मवेयर निर्माण के दौरान EEPROM में होता है और किसी नए फ़ाइल को वोलेटाइल मेमोरी के कारण खो जाएगा। इसलिए, एम्बेडेड फर्मवेयर के साथ काम करते समय फर्मवेयर को डंप करना मूल्यवान प्रयास है।

इसे करने के लिए कई तरीके हैं और SPI खंड विभिन्न उपकरणों से EEPROM से सीधे फर्मवेयर निकालने के तरीके को कवर करता है। हालांकि, पहले UART के साथ फर्मवेयर को डंप करने की कोशिश करना सुनिश्चित किया जाता है क्योंकि फिजिकल उपकरणों और बाहरी इंटरैक्शन के साथ फर्मवेयर को डंप करना जोखिमपूर्ण हो सकता है।

UART कंसोल से फर्मवेयर को डंप करने के लिए पहले बूटलोडर्स तक पहुंचना आवश्यक है। कई लोकप्रिय वेंडर्स uboot (यूनिवर्सल बूटलोडर) का उपयोग अपने बूटलोडर के रूप में करते हैं ताकि लिनक्स लोड कर सकें। इसलिए, uboot तक पहुंचना आवश्यक है।

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

इसे करने से uboot को लोड करने में बाधा आएगी और एक मेनू प्रदान करेगी। uboot के कमांडों को समझने और उन्हें सूचीत करने के लिए मदद मेनू का उपयोग करना सुझाव दिया जाता है। यह help कमांड हो सकता है। क्योंकि विभिन्न वेंडर्स विभिन्न कॉन्फ़िगरेशन का उपयोग करते हैं, इनमें से प्रत्येक को अलग-अलग समझना आवश्यक है।

सामान्यत: फर्मवेयर को डंप करने का कमांड होता है:

md

जो "मेमोरी डंप" के लिए खड़ा है। यह स्क्रीन पर मेमोरी (EEPROM सामग्री) डंप करेगा। सिरियल कंसोल आउटपुट को लॉग करना सुझाया जाता है प्रक्रिया शुरू करने से पहले मेमोरी डंप को कैप्चर करने के लिए।

अंत में, लॉग फ़ाइल से सभी अनावश्यक डेटा को हटा दें और फ़ाइल को filename.rom के रूप में स्टोर करें और उसके सामग्री को निकालने के लिए binwalk का उपयोग करें:

binwalk -e <filename.rom>

यह हेक्स फ़ाइल में पाए गए सिग्नेचर्स के अनुसार EEPROM में संभावित सामग्री की सूची देगा।

हालांकि, यह जरूरी है कि यह हमेशा स्थिति नहीं हो कि uboot अनलॉक हो, भले ही यह उपयोग में हो। अगर Enter Key कुछ नहीं करता है, तो Space Key जैसी विभिन्न कुंजियों की जांच करें। यदि बूटलोडर लॉक है और बाधा नहीं होती है, तो यह विधि काम नहीं करेगी। यदि डिवाइस के लिए uboot बूटलोडर है या नहीं जांचने के लिए, डिवाइस के बूट करते समय UART कंसोल पर आउटपुट जांचें। यह बूट करते समय uboot का उल्लेख कर सकता है।

Last updated