SQL Injection Эмзэг байдлыг шалгах

SQL Injection attacks нь динамик контент үүсгэхийн тулд өгөгдлийн баазад тулгуурласан вэб програмуудад маш их эрсдэл учруулдаг. Энэ төрлийн довтолгоонд хакерууд вэбсайтыг ашиглан өөрийн SQL командыг мэдээллийн сангаас гаргаж авахыг оролдох оролдлого хийдэг. Жишээ нь өгөгдлийн сан дахь SQL injection халдлага өгүүллийг үзнэ үү. Энэ нийтлэлд бид SQL Injection халдлагад өртөмтгий эсэхийг тодорхойлохын тулд вэб програмаа тестлэх хэд хэдэн арга замыг бид хараарай.

SQL автоматжуулалтыг скан хийх

Нэгэн магадгүй автоматжуулсан вэб програмын эмзэг байдлын сканнер, тухайлбал HP's WebInspect, IBM's AppScan эсвэл Cenzic's Hailstorm гэх мэт. Эдгээр хэрэгслүүдийг бүгдийг нь SQL Injection эмзэг байдлын үүднээс вэб програмыг шинжлэхэд хялбар, автомат аргаар санал болгодог. Гэсэн хэдий ч тэд үнэтэй, нэг суудал тутамд $ 25,000 хүртэл ажилладаг.

Гарын авлагын SQL Injection Tests

Ядуу програмын хөгжүүлэгч юу хийх вэ? Вэб браузераас илүү юу ч хэрэггүй SQL Injection эмзэглэлд зориулсан вэб програмуудыг үнэлэхийн тулд та зарим нэг үндсэн тестийг ажиллуулж болно. Нэгдүгээрт, болгоомжлох үгс: Миний тайлбарлаж буй тестүүд SQL синтезийн үндсэн алдааг хайдаг. Тэд дэвшилтэт технологийг олж илрүүлэхгүй бөгөөд ашиглахад хэцүү байдаг. Хэрэв та үүнийг төлж чадвал автоматаар скан хийгчтэй очиж болно. Гэсэн хэдий ч, хэрэв та үнийн шошго барьж чадахгүй бол гарын авлагын шинжилгээ бол маш сайн эхний алхам юм.

Хэрэглээний эмзэг байдгийг үнэлэх хамгийн хялбар арга бол таримал тариагүй довтолгоонуудтай тулгарах бөгөөд ингэснээр таны өгөгдлийн санд хохирол учруулахгүй ч таны асуудлыг засах шаардлагатай нотолгоог өгөх болно. Жишээлбэл, та мэдээллийн сан доторх хүнийг хайж энгийн вэбсайт програмтай бөгөөд холбоо барих мэдээллийг өгдөг. Энэ хуудсанд дараах URL форматыг ашиглаж болно:

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

Энэ хуудсанд өгөгдлийн баазын хайлтыг дараах байдлаар төстэй хайлт хийдэг гэж үзье.

SELECT утас FROM лавлах WHERE lastname = 'chapple' ба firstname = 'mike'

Үүнийг туршина уу. Дээрх таамаглал дээр бид SQL тарилгын халдлагад зориулсан URL руу энгийн өөрчлөлт хийж болно:

Нууц үг

Хэрэв веб програм SQL injection-ээс зөв хамгаалагдсангүй бол энэ нь уг хуурамч өгөгдөлийн эсрэг SQL өгөгдлийн эсрэг дараах мэдэгдэлтэй залгагддаг. Үүнд:

SELECT утас FROM лавлах WHERE lastname = 'chapple' ба firstname = 'mike' AND (хуурамч тооноос (*) сонгоно уу)> 0 OR '1' = '1'

Дээрх синтакс нь анхны URL-ээс арай өөр гэдгийг та анзаарах болно. Би үсгэн кодчлогдсон хувьсагчийг ASCII-тэй адилаар хөрвүүлэх эрх чөлөөтэй болсон. Жишээ нь,% 3d нь '=' тэмдэгтийн URL-кодчилол юм. Мөн үүнтэй ижил төстэй мөрүүдийг нэмж оруулав.

Үр дүнг үнэлэх

Дээр жагсаасан URL-тай вэбсайтыг ачааллах гэж оролдох үед энэ тест ирдэг. Хэрэв веб програм сайн ажиллаж байвал хайлтыг өгөгдөлд оруулахаасаа өмнө нэг өгүүлбэрийг хасна. Энэ нь зүгээр л нэг SQL агуулсан анхны нэртэй хэн нэгэнд хачин хайхрамжийг бий болгоно! Та доорхтой төстэй програмаас алдааны мэдэгдлийг харах болно:

Алдаа: Майк + AND + нэртэй олдсон хэрэглэгч байхгүй (сонгох + тоо (*) + хуурамч +) +% 3e0 + OR + 1% 3d1 chapple!

Нөгөө талаас, хэрэв програм SQL-ийн тарилгад эмзэг байвал өгөгдлийн сан руу өгөгдлийг шууд дамжуулж өгдөг бөгөөд ингэснээр хоёр боломжийн аль нэгийг бий болгоно. Нэгдүгээрт, хэрэв таны сервер дэлгэрэнгүй алдааны мэдэгдлүүдийг идэвхжүүлсэн бол (та үүнийг хийх ёсгүй!), Та иймэрхүү зүйлийг харах болно:

ODBC драйверууд Microsoft OLE DB Provider '80040e37' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Объектын нэр нь хуурамч байна. /directory.asp, мөр 13

Нөгөө талаас, хэрэв таны вэб сервер дэлгэрэнгүй алдааны мэдэгдлүүдийг харуулдаггүй бол та илүү түгээмэл алдаа гарна, тухайлбал:

Дотоод серверийн алдаа Серверт дотоод алдаа эсвэл буруу тохиргоо хийгдсэн бөгөөд таны хүсэлтийг биелүүлэх боломжгүй байна. Алдаа гаргаж болох алдаа, алдаа гарсан байж болзошгүй зүйлийг мэдэгдэхийн тулд серверийн администратортой холбогдоно уу. Энэ алдааны талаарх дэлгэрэнгүй мэдээллийг серверийн алдааны бүртгэлд ашиглаж болно.

Хэрэв та дээрх хоёр алдааны аль нэгийг хүлээн авбал таны програм SQL injection халдлагад эмзэг байна! SQL Injection довтолгооны эсрэг програмаа хамгаалахын тулд авч болох зарим алхамууд: