សាកល្បងសម្រាប់ភាពងាយរងគ្រោះការចាក់ SQL

ការវាយប្រហារ SQL Injection បង្កើតហានិភ័យយ៉ាងខ្លាំងចំពោះកម្មវិធីបណ្ដាញដែលអាស្រ័យលើកម្មវិធីខាងក្រោយ មូលដ្ឋានទិន្នន័យ ដើម្បីបង្កើតមាតិកាថាមវន្ត។ នៅក្នុងប្រភេទនៃការវាយប្រហារនេះពួក Hacker រៀបចំកម្មវិធីគេហទំព័រមួយដើម្បីប៉ុនប៉ងបញ្ចូលពាក្យបញ្ជា SQL ផ្ទាល់របស់ពួកគេទៅជាឯកសារដែលចេញដោយមូលដ្ឋានទិន្នន័យ។ ឧទាហរណ៍មើលអត្ថបទ SQL Injection Attacks លើមូលដ្ឋានទិន្នន័យ។ នៅក្នុងអត្ថបទនេះយើងពិនិត្យមើលវិធីជាច្រើនដែលអ្នកអាចសាកល្បងកម្មវិធីបណ្តាញរបស់អ្នកដើម្បីកំណត់ថាតើពួកគេងាយរងគ្រោះនឹងការវាយប្រហារ SQL Injection ដែរឬទេ។

វិភាគការចាក់បញ្ចូល SQL ដោយស្វ័យប្រវត្តិ

លទ្ធភាពមួយគឺការប្រើម៉ាស៊ីនស្កេនមេរោគងាយរងគ្រោះលើបណ្ដាញដូចជា WebInspect របស់ក្រុមហ៊ុន HP AppScan របស់ក្រុមហ៊ុន IBM ឬក្រុមហ៊ុន Hailstorm របស់ Cenzic ។ ឧបករណ៍ទាំងនេះផ្តល់នូវភាពងាយស្រួល, វិធីដោយស្វ័យប្រវត្តិដើម្បីវិភាគកម្មវិធីបណ្ដាញរបស់អ្នកសម្រាប់ភាពងាយរងគ្រោះ SQL Injection ដែលមានសក្តានុពល។ ទោះជាយ៉ាងណាពួកគេមានតម្លៃថ្លៃណាស់, ការរត់នៅរហូតដល់ទៅ $ 25,000 ក្នុងមួយអាសនៈ។

ការធ្វើតេស្តចាក់សោ SQL ដោយខ្លួនឯង

តើអ្នកអភិវឌ្ឍន៍កម្មវិធីមិនសូវត្រូវធ្វើអ្វី? អ្នកអាចដំណើរការការធ្វើតេស្តមូលដ្ឋានមួយចំនួនដើម្បីវាយតម្លៃកម្មវិធីគេហទំព័ររបស់អ្នកសម្រាប់ភាពងាយរងគ្រោះ SQL Injection ដោយមិនប្រើអ្វីច្រើនជាង Browser ។ ជាដំបូងពាក្យព្រមាន: ការធ្វើតេស្តដែលខ្ញុំពណ៌នាតែរកមើលកំហុស SQL Injection ជាមូលដ្ឋានប៉ុណ្ណោះ។ ពួកគេនឹងមិនរកឃើញបច្ចេកទេសកម្រិតខ្ពស់និងមានភាពធុញទ្រាន់ក្នុងការប្រើប្រាស់។ ប្រសិនបើអ្នកមានលទ្ធភាពទិញវាសូមទៅជាមួយម៉ាស៊ីនស្កេនស្វ័យប្រវត្តិ។ ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើអ្នកមិនអាចដោះស្រាយតម្លៃនោះការធ្វើតេស្តដោយខ្លួនឯងគឺជាជំហានដំបូងដ៏អស្ចារ្យ។

មធ្យោបាយងាយស្រួលបំផុតដើម្បីវាយតម្លៃថាតើកម្មវិធីមួយងាយរងគ្រោះគឺដើម្បីពិសោធន៍ការវាយប្រហារដោយគ្មានហេតុផលដែលនឹងមិនធ្វើឱ្យខូចដល់មូលដ្ឋានទិន្នន័យរបស់អ្នកប្រសិនបើពួកគេទទួលបានជោគជ័យទេប៉ុន្តែនឹងផ្តល់ឱ្យអ្នកនូវភស្តុតាងដែលអ្នកត្រូវកែតម្រូវបញ្ហា។ ឧទាហរណ៍ឧបមាថាអ្នកមានកម្មវិធីបណ្ដាញសាមញ្ញដែលមើលទៅបុគ្គលម្នាក់នៅក្នុងមូលដ្ឋានទិន្នន័យមួយហើយជាលទ្ធផលផ្ដល់ព័ត៌មានទំនាក់ទំនង។ ទំព័រនោះអាចប្រើទ្រង់ទ្រាយ URL ខាងក្រោម:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

យើងអាចសន្មតថាទំព័រនេះដំណើរការការស្វែងរកមូលដ្ឋានទិន្នន័យ ដោយប្រើសំណួរ ស្រដៀងនឹង សំណួរ ខាងក្រោម:

ជ្រើសរើសទូរស័ព្ទពីថតឯកសារ WHERE lastname = 'chapple' និង firstname = 'mike'

ចូរសាកល្បងបទពិសោធនេះបន្តិច។ ជាមួយនឹងការសន្និដ្ឋានរបស់យើងខាងលើយើងអាចធ្វើការផ្លាស់ប្តូរធម្មតាទៅ URL ដែលធ្វើតេស្តសម្រាប់ការវាយប្រហារ SQL injection:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

ប្រសិនបើកម្មវិធីបណ្ដាញមិនត្រូវបានការពារឱ្យបានត្រឹមត្រូវប្រឆាំងនឹងការចាក់ SQL វាគ្រាន់តែដោតឈ្មោះនេះក្លែងក្លាយក្នុងសេចក្តីថ្លែងការណ៍ SQL ដែលវាប្រតិបត្តិប្រឆាំងនឹងមូលដ្ឋានទិន្នន័យដែលនាំឱ្យមាន:

ជ្រើសរើសលេខទូរសព្ទពីថត WHERE lastname = 'chapple' និង firstname = 'mike' AND (រាប់រាប់ពី (*) ពីក្លែងក្លាយ)> 0 ឬ '1' = '1'

អ្នកនឹងកត់សម្គាល់ឃើញថាវាក្យសម្ព័ន្ធខាងលើមានភាពខុសគ្នាតិចតួចជាងនៅក្នុង URL ដើម។ ខ្ញុំបានយកសេរីភាពនៃការបំលែងអថេរដែលបានអ៊ិនកូដ URL សម្រាប់សមមូល ASCII របស់ពួកគេដើម្បីធ្វើឱ្យវាងាយស្រួលធ្វើតាមគំរូ។ ឧទាហរណ៍% 3d ជាការអ៊ិនកូដ URL សម្រាប់តួអក្សរ '=' ។ ខ្ញុំក៏បានបន្ថែមការចុះបន្ទាត់ខ្លះសម្រាប់គោលបំណងស្រដៀងគ្នា។

ការវាយតម្លៃលទ្ធផល

ការធ្វើតេស្តនេះបានភ្ជាប់មកនៅពេលដែលអ្នកព្យាយាមផ្ទុកគេហទំព័រដោយប្រើ URL ដែលបានរាយខាងលើ។ ប្រសិនបើកម្មវិធីបណ្ដាញមានឥរិយាបថល្អនោះវានឹងដកចេញសញ្ញាសម្រង់ពីការបញ្ចូលមុនពេលបញ្ជូនសំណួរទៅមូលដ្ឋានទិន្នន័យ។ នេះនឹងជាធម្មតាលទ្ធផលនៅក្នុងការរកមើលចំលែកសម្រាប់នរណាម្នាក់ដែលមានឈ្មោះដំបូងដែលរួមបញ្ចូលទាំង bunch នៃ SQL មួយ! អ្នកនឹងឃើញសារកំហុសមួយពីកម្មវិធីដែលស្រដៀងនឹងមួយខាងក្រោម:

កំហុស: គ្មានអ្នកប្រើដែលរកឃើញមានឈ្មោះមីជី + និង + (ជ្រើស + រាប់ (*) + ពី + ក្លែងក្លាយ) +% 3e0 + OR + 1% 3d1 Chapple!

ម្យ៉ាងវិញទៀតប្រសិនបើកម្មវិធីងាយរងគ្រោះនឹង SQL injection វានឹងបញ្ជូនសេចក្តីថ្លែងការណ៍ដោយផ្ទាល់ទៅមូលដ្ឋានទិន្នន័យដែលជាលទ្ធភាពមួយក្នុងចំណោមលទ្ធភាពពីរ។ ដំបូងប្រសិនបើម៉ាស៊ីនបម្រើរបស់អ្នកមានសារកំហុសលម្អិតបានបើក (ដែលអ្នកមិនគួរ!), អ្នកនឹងឃើញអ្វីមួយដូចនេះ:

អ្នកផ្គត់ផ្គង់ OLE DB ក្រុមហ៊ុន Microsoft សម្រាប់កំហុសកម្មវិធីបញ្ជា ODBC '80040e37' [Microsoft] [ODBC កម្មវិធីបញ្ជាម៉ាស៊ីនបម្រើ SQL] [SQL Server] ឈ្មោះវត្ថុមិនត្រឹមត្រូវ 'ក្លែងក្លាយ' ។ / directory.asp ជួរ 13

ម្យ៉ាងវិញទៀតប្រសិនបើម៉ាស៊ីនបម្រើបណ្ដាញរបស់អ្នកមិនបង្ហាញសារកំហុសលម្អិតអ្នកនឹងទទួលបានកំហុសទូទៅដូចជា:

ម៉ាស៊ីនបម្រើកំហុសខាងក្នុងម៉ាស៊ីន មេមានកំហុសឆ្គងខាងក្នុងឬការកំណត់មិនត្រឹមត្រូវហើយមិនអាចបំពេញសំណើររបស់អ្នកបានទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងម៉ាស៊ីនមេដើម្បីប្រាប់អំពីពេលវេលាដែលកំហុសបានកើតឡើងនិងអំពីអ្វីដែលអ្នកអាចធ្វើដែលអាចបណ្តាលឱ្យមានកំហុស។ ព័ត៌មានបន្ថែមអំពីកំហុសនេះអាចមាននៅក្នុងកំណត់ហេតុកំហុសម៉ាស៊ីនមេ។

ប្រសិនបើអ្នកទទួលបានកំហុសមួយក្នុងចំណោមកំហុសទាំងពីរខាងលើកម្មវិធីរបស់អ្នកគឺងាយរងការវាយប្រហារ SQL injection! ជំហានមួយចំនួនដែលអ្នកអាចអនុវត្តដើម្បីការពារកម្មវិធីរបស់អ្នកប្រឆាំងនឹង SQL Injection attacks រួមមាន: