MS Access SQL Injection
ऑनलाइन प्लेग्राउंड
डेटाबेस सीमाएँ
स्ट्रिंग कंकेटनेशन
स्ट्रिंग कंकेटनेशन & (%26)
और + (%2b)
चरित्रों के साथ संभव है।
टिप्पणियाँ
MS एक्सेस में कोई टिप्पणियाँ नहीं होती हैं, लेकिन एक NULL चार के साथ क्वेरी का अंत हटाना संभव है:
यदि यह काम नहीं कर रहा है तो आप हमेशा क्वेरी की सिंटेक्स को ठीक कर सकते हैं:
Stacked Queries
वे समर्थित नहीं हैं।
LIMIT
LIMIT
ऑपरेटर लागू नहीं है। हालांकि, TOP
ऑपरेटर का उपयोग करके SELECT क्वेरी के परिणामों को पहले N सारणी की पंक्तियों तक सीमित करना संभव है। TOP
एक पूर्णांक को तर्क के रूप में स्वीकार करता है, जो वापस लौटाए जाने वाली पंक्तियों की संख्या को प्रतिनिधित करता है।
जैसे TOP का उपयोग कर सकते हैं LAST
जो अंत से पंक्तियों को प्राप्त करेगा।
संघ जांच/सब-प्रश्न
एक SQLi में आप आम तौर पर किसी नए प्रश्न को कैसे निष्क्रिय करें ताकि अन्य तालिकाओं से जानकारी निकाली जा सके। MS Access हमेशा सब-प्रश्नों या अतिरिक्त प्रश्नों में FROM
का संकेत देने की आवश्यकता होती है।
इसलिए, यदि आप UNION SELECT
या UNION ALL SELECT
या एक SELECT
को कोई स्थिति में ब्रैकेट के बीच निष्पादित करना चाहते हैं, तो आपको हमेशा एक मान्य तालिका नाम के साथ FROM
का संकेत देना होगा।
इसलिए, आपको एक मान्य तालिका नाम को जानने की आवश्यकता है।
बराबर + उपस्थिति
यह आपको वर्तमान सारणी के मानों को बाहर निकालने की अनुमति देगा बिना तालिका के नाम को जानने की आवश्यकता के।
MS Access अजीब सिंटैक्स जैसे '1'=2='3'='asd'=false
की अनुमति देता है। जैसा कि सामान्यत: SQL इन्जेक्शन WHERE
शर्त के अंदर होगा हम उसका दुरुपयोग कर सकते हैं।
कल्पित करें कि आपके पास एक MS Access डेटाबेस में SQLi है और आपको पता है (या अनुमान लगाया है) कि एक कॉलम का नाम उपयोगकर्ता नाम है, और यही फ़ील्ड आप बाहर निकालना चाहते हैं। आप बराबर तकनीक का उपयोग करके वेब ऐप्लिकेशन के विभिन्न प्रतिक्रियाएँ जांच सकते हैं जब यह तकनीक उपयोग किया जाता है और संभावित रूप से Mid
फ़ंक्शन का उपयोग करके उपस्थिति इन्जेक्शन के साथ सामग्री को बाहर निकाल सकते हैं।
यदि आप तालिका का नाम और कॉलम जानते हैं तो आप Mid
, LAST
और TOP
के बीच का संयोजन करके बूलियन SQLi के माध्यम से सभी जानकारी लीक कर सकते हैं:
टेबल नामों को ब्रूटफोर्स करना
चेनिंग इक्वल्स तकनीक का उपयोग करके आप कुछ इस प्रकार से टेबल नामों को ब्रूटफोर्स कर सकते हैं:
आप एक और पारंपरिक तरीका भी उपयोग कर सकते हैं:
Feel free to check this in the online playground.
Sqlmap common table names: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
There is another list in http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
स्तंभों के नामों को ब्रूट-फोर्सिंग
आप चेनिंग बराबर ट्रिक के साथ मौजूदा स्तंभों के नामों को ब्रूट-फोर्स कर सकते हैं:
या एक समूह द्वारा:
या आप इस तरह से एक विभिन्न तालिका के स्तंभों को ब्रूट-फोर्स कर सकते हैं:
डेटा डंप करना
हम पहले ही बराबरी चेनिंग तकनीक की चर्चा कर चुके हैं वर्तमान और अन्य तालिकाओं से डेटा डंप करने के लिए। लेकिन इसके अलावा भी और तरीके हैं:
एक झलक में, क्वेरी एक "अगर-तो" विधान का उपयोग करती है ताकि सफलता के मामले में "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')
वर्ण का एस्की मूल्य प्राप्त करेंCHR(65)
एस्की मूल्य से स्ट्रिंग प्राप्त करेंIIF(1=1,'a','b')
अगर तोCOUNT(*)
आइटमों की संख्या गणना करें
सारणीय तालिकाएँ
यहाँ से आप तालिकाओं के नाम प्राप्त करने के लिए एक क्वेरी देख सकते हैं:
Last updated