Əsas məzmuna keç
1 sonuçtan 1 ile 1 arası

SQL injection

  1. #1
    Member
    Üyelik tarihi
    Sep 2018
    Mesajlar
    94

    SQL injection

    DƏRS HAQQINDA


    Sql açığı ilə mysqldəki məlumatları çəkmək,silmək editləmək və s. əməliyyatlar həyata keçirtmək olar. Sql açıqlarının yaranmasının səbəbləri mysqlə daxil olan və ya mysqldən çıxan məlumatların yoxlanmadan süzgəcdən keçirilmədən əmrləri həyata keçirildiyi üçün baş verir


    SQL AÇIĞI NƏDİR


    Sql açığı ilə mysqldəki məlumatları çəkmək,silmək editləmək və s. əməliyyatlar həyata keçirtmək olar.
    Sql açıqlarının yaranmasının səbəbləri mysqlə daxil olan və ya mysqldən çıxan məlumatların yoxlanmadan süzgəcdən keçirilmədən əmrləri həyata keçirildiyi üçün baş verir
    Adi bir Sql açıqlı PHP scriptə nəzər yetirək

    Burda açığın yaranması yuxarıda qeyd etdiyimiz kimi heç bir yoxlanışın olmaması üçündür bəs necə bilək ki scriptimizdə açıq var ya yoxdur?
    Bunun üçün mysqlə sorğu göndərən methoda `,',`a kimi exploitlərlə müraciət etməliyik
    Bu zaman Ekranda mysql əmri əks olunarsa PHP kodlarımızda açıq var deməkdir

    Bu açığı daha dəqiq öyrənmək üçün sql açığından istifadə edərək mysqldən məlumatları çəkək bu barədə digər dərsimizdə məlumat alacayıq




    SQL AÇIĞINDAN İSTİFADƏ


    Sql açığından istifadə etmək üçün ilk öncə mysqldəki cloumların sayını tapmaq lazımdır bunun üçün ?id=1 olan urlnin sonuna order by xxx yazmalıyıq xxx in yerinə rəqəm yazmalıyıq bu rəqəm təxmini olmalıdır Nümunə : 3 bu zaman ?id=1+order+by+3 yazırıq 3 yazanda yenidən səhv verir bizə lazım olan isə səhv verməməsidir

    İndi isə order+by+2 yazaq

    gördüyümüz kimi mysqldə 2 cloumn olduğu üçün səhv vermədi İndi isə hansı cloumun səhifədə görsəndiyinə baxaq bunun üçün union+select+1,2 yazmalıyıq və mysqlə gedən məlumatın qarşısına "-" işarəsini qoymaq lazımdır
    2-ci cloumun ekrana çıxışı olduğu üçün 2 ekrana əks olundu
    indi isə mysqldən tabloları çəkək bunun üçün union+select+1,group_concat(table_name)+from+infor mation_schema.tables+where+table_schema=database() kodundan istifadə edəcəyik
    databasedə olan mm ve user tablolari çəkildi indi isə burdan bizə lazım olan user tablosundaki məlumatlardır group_concat(column_name)+from+information_schema. columns+where+table_schema=database() bu kodla datadakı bütün cloumnları çəkmək olur Şəkil 7.gif İndi isə user ve parolu çəkək onun üçün ?id=-1+union+select+1,user+from+user kimi qeyd etməliyik Şəkil 8.gif
    Qeyd kodlari yazdiqda -1 (dəyər) kimi olmalidir









    SQL AÇIĞINI BAĞLAMAQ


    Sql açığını bağlamaq üçün mysqldən gələn və mysqlə gedən məlumatları zərərli kodlardan təmizləmək lazımdır. Bu zaman program verilənləri kod kimi deyil mətn kimi oxuyacaq .
    Bu iş üçün PHP dilində mysql_real_escape_string( pdo = quote() ),intval,htmlspecialchars,trim (boşluğu aradan qaldırmaq üçün) kimi funksiyalar mövcuddur
    Nümünə : $a=$_GET['id']; Bu dəyişkəni belə yazmaq lazımdır. $a=htmlspecialchars(trim($_GET['id']));
    Qeyd : bundan başqa where id=".$i." kimi sorğuları where id='".$id."' kimi yazmaq daha uyğundur
    Bunu etdikdən sonra dəyişkən stringə çevriləcək və mysql üçün heç bir təhlükə yaratmayacaq _ Əgər sizin dəyişkəndə yalnız rəqəmlər olacaqsa $a=intval($_GET['id']); yazmaq kifayət edər yuxarıdakı kodu hər dəyişkəndə etdikdə uzun ola bilər buna görə funksiya yazaq

    //mysql sorğusudursa function antisql($antihucum){

    return htmlspecialchars(trim(mysql_real_escape_string($an tihucum)));

    } //mysql sorğusu deyilsə function antimethod($antihucum){

    return htmlspecialchars(trim(strip_tags($antihucum)));

    }
    bu zaman sadəcə $a=antisql($a); yazmağımız kifayətdir kodu yoxlayaq


    Gördüyümüz kimi heç bir xeta yoxdur açıq bağlandı.

Yer imleri

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •  

Search Engine Optimization by vBSEO 3.6.1 ©2011, Crawlability, Inc.