მოგესალმები ფორუმის სტუმარო

იმისათვის რომ შეძლოთ ფორუმთან სრული წვდომა ამისათვის თქვენ უნდა იყოთ რეგისტრირებული

ფორუმზე ბევრი საინტერესო,გასართობი, პორტალია

შემოგვიერთდით და ერთად შევქმნათ ქართველებმა სასიამოვნო გარემო

საიტის გატეხვა, საიტის უსაფრთხოება

კატეგორია 'MySQL' started by siamski, თებ 7, 2018.

  1. siamski

    siamski Active Member ® აღსანიშნავი წევრი ადმინისტრატორი მოდერატორი ფორუმელი
    • Chopper გამარჯვებული

    პოსტები:
    298
    ქართული მედია:
    4
    მედია ალბომი:
    2
    მიღწევა:
    58
    ქულები:
    28
    hacked.jpg

    SQL ინექციისგან დაცვა PHP-ში
    ცოტაოდენი რამ მიწერია
    ამ პოსტში და იმედია გასაგებად...




    დღესდღეობით ეს პრობლემა ყველაზე აქტუალურია კიბერსამყაროში, განსაკუთრებით კი ქართულ ინტერნეტ სივრცეში.. არსებობს საიტის გატეხვის მრავალი ხერხი და გზა, თუმცა ყველაფრიდან არის გამოსავალი.. თუ კარგად შეისწავლით იმ პროგრამირების ენას, რომელშიც წერთ საიტს, ისეთ შეცდომებს არ დაუშვებთ კოდის წერის დროს რამაც შესაძლოა თქვენი საიტის უსაფრთხოება კითხვის ნიშნის ქვეშ დააყენოს..

    განვიხილავ რამდენიმე ტიპის შეტევას და შემდეგი პოსტები აუცილებლად შეეხება ამ შეტევებისგან თავდაცვას კონკრეტული მაგალითებით..

    ყველაზე გავრცელებული შეტევა არის XSS Injection, რადგან საიტების უმეტესობა სწორედ ამ ინექციის საშიშროებისგან არის დაუცველი ანუ ბევრ საიტს აქვს XSS bug (ცოტახნის წინ ebay – საც კი უპოვეს xss bug) XSS ინექცია ჰაკერს შესაძლებლობას აძლევს მსხვერპლის ბრაუზერში გაუშვას სკრიფტი, რომლითაც შესაძლოა მოიპაროს მსხვერპლის სესია ან cookie და თვითონ გამოიყენოს..

    ყველა მრავალფუნქციურ საიტს გააჩნია მონაცემთა ბაზა, არ აქვს მნიშვნელობა მის ტიპს (MySQL, MSSQL, PostgreSQL, Oracle თუ სხვა).. შემდეგი შეტევის ტიპი არის SQL Injection, რომლის საშუალებითაც ჰაკერი აღწევს საიტის მონაცემთა ბაზაში და ნახულობს/ცვლის/შლის ინფორმაციას.. SQL ბაგები (სისუტეები) ჩნდება სკრიფტში sql მოთხოვნის არასწორად ჩაწერისას..

    PHP Injection არის შეტევის ტიპი, როდესაც ჰაკერი შიგთავსის ნახვაზე წვდომას იღებს სისტემურ ფაილებზე ან თუნდაც თვითონ საიტზე არსებული ფაილების შიგთავის წაკითხვა შეუძლია ვებსაიტიდან, ამ ინექციის შესაძლოა კონფიგურაციის ფაილის ნახვა, შესაბამისათ მოვიპოვებთ მონაცემთა ბაზის მომხმარებლის ლოგინს და პაროლს..

    CSRF Injection არის ინექციის ისეთი ფორმა რომლის დროსაც ჩვენ შეგვიძლია მრავალი მოქმედების შესრულება HTTP მოთხოვნებით.. csrf ინექცია ძირითადად გამოიყნება click-ების, like-ების მოსამატებლად, ასევე ამ ინექციით შესაძლოა ჰაკერმა საბანკო ანგარიშების მონაცემები გაიგოს, ამ დროს თვითონ მსხვერპლი ვერაფერს ვერ ხვდება..

    ყოველი საიტი დგას რომელიმე სერვერზე, რომელიც იყენებს ოპერაციულ სისტემას, არ აქვს მნიშვნელობა ეს სისტემა windows იქნება, linux თუ სხვა.. ყოველ ოპერაციულ სისტემას გააჩნია ტერმინალი (windows-ს აქვს cmd, linux-ს კი ტერმინალი) ჰაკერს ვებსაიტიდან შეუძლია განახორციელოს შეტევა, როცა უშუალოდ სერვერს მიაწვდის ბრძანებას, სერვერი მიიღებს ამ ბრძანებას, დაამუშავებს და ტერმინალის მაგივრად ვებგვერდზე დააბრუნებს output-ს.. ამ შეტევას ეწოდება Remote Code Execution

    ეს იმ მცირედი გზების ჩამონათვალია, რომლებიც აუცილებლად უნდა იცოდეს ვებ დეველოპერმა.. ახლა კი რამდენიმე რჩევა სკრიფტების უსაფრთხოებასთან დაკავშირებით:

    – მონაცემთა ბაზაში მნიშვნელოვანი ინფორმაცია ყოველთვის დაშიფრეთ და ისე შეიტანეთ (მაგალითად ადმინის პაროლები md5 ალგორითმით)

    – არასდროს შექმნათ ისეთი ფორმატის კონფიგ ფაილი, რომლის წაკითხვაც შეეძლება ჩვეულებრივ მომხმარებელს ბრაუზერიდან

    – კონფიგის ფაილებს დაარქვით “არატრადიციული” სახელები (მაგალითად არ დაარქვათ config.php.. დაარქვით mysqlconfig.php ან რაიმე ამდაგვარი)

    – სასურველია დაშიფროთ php ფაილებიც, განსაკუთრებით კი კონფიგურაციის ფაილი

    – შექმენით error_log და დროდადრო გადაამოწმეთ, თუ რამე შეცდომა იქნება დროულად გაასწორეთ..
     
  2. BeBeTo

    BeBeTo New Member ფორუმელი

    პოსტები:
    28
    მიღწევა:
    3
    ქულები:
    3
    ბევრი ვებ დეველოპერები არ იცის, თუ როგორ SQL queries შეიძლება გაანადგურა და ვივარაუდოთ, რომ SQL შეკითხვა არის სანდო ბრძანება. ეს იმას ნიშნავს, რომ SQL შეკითხვებს შეუძლიათ შეინარჩუნონ წვდომის კონტროლის მექანიზმები, რითაც გვერდის ავლით სტანდარტული ავტორიზაციისა და ნებართვის შემოწმება, ზოგჯერ SQL მოთხოვნები კი შესაძლოა დაშვებულ იქნას მასპინძელი ოპერაციული სისტემის დონის ბრძანებები.

    Direct SQL Command Injection არის ტექნიკა, სადაც თავდამსხმელს ქმნის ან ცვლის არსებულ SQL ბრძანებებს ფარული მონაცემების გამოვლენაზე, ან გადააფასოს ძვირფასი პირობა, ან კიდევ საშიში სისტემის დონის ბრძანებების შესრულება მონაცემთა ბაზის ჰოსტში. ეს ხორციელდება განაცხადის აღების შესახებ მომხმარებლის შეყვანისა და აერთიანებს მას სტატიკური პარამეტრების შესაქმნელად SQL შეკითხვაზე. შემდეგი მაგალითები ეფუძნება ნამდვილ ისტორიებს, სამწუხაროდ.

    მონაცემთა შეყვანის არარსებობის გამო და მონაცემთა ბაზასთან დაკავშირება სუპერუტერის სახელით ან ის, ვისაც შეუძლია შექმნას მომხმარებლები, თავდამსხმელს შეუძლია შექმნას superuser თქვენს მონაცემთა ბაზაში.
    მაგალითი # 1 გაყოფა შედეგების დაყოფილი გვერდები ... და მიღების superusers (PostgreSQL)

    <? php

    $ offset = $ argv [0]; // ფრთხილად, არ შეყვანის Validation!
    $ query = "SELECT id, სახელი FROM პროდუქტების ORDER BY სახელი LIMIT 20 OFFSET $ offset;";
    $ შედეგი = pg_query ($ conn, $ query);

    ?>
    ნორმალური მომხმარებლები დააწკაპუნეთ "მომდევნო", "წინა" ბმულებზე, სადაც $ offset კოდირდება URL- ში. სკრიპტი მოელის, რომ შემომავალი $ offset არის ათობითი რიცხვი. თუმცა, თუ ვინმეს ცდილობს დაარღვიოს urlencode () "URL" - ის ფორმა

    0;
    ჩასვით pg_shadow (usename, usesysid, usesuper, usecatupd, passwd)
    აირჩიეთ 'ბზარი', მიზნებისათვის, 't', 't', 'ბზარი'
    საწყისი pg_shadow სადაც usename = 'postgres';
    თუ ეს მოხდა, მაშინ სკრიპტი მისცემს მას სუპეროსერეს მისაწვდომობას. გაითვალისწინეთ, რომ 0; არის გადასატანი შეკითხვა ორიგინალური შეკითხვაზე და შეწყვიტოს იგი.

    შენიშვნა:

    ეს არის საერთო ტექნიკა, რათა აიძულოს SQL Parser- ს დეველოპერის მიერ დაწერილი დანარჩენი შეკითხვის იგნორირება - ეს არის SQL- ის კომენტარების ნიშანი.
    პაროლის მოსაპოვებლად მოსალოდნელი გზა არის თქვენი ძიების შედეგების გვერდების გადაკვეთა. ერთადერთი, რაც თავდამსხმელმა უნდა გააკეთოს, არის თუ არა წარმოდგენილი წარმოდგენილი ცვლადები SQL განცხადებაში გამოყენებული, რომლებიც არ არის მოწოდებული სწორად. ეს ფილტრები შეიძლება შეიცვალოს ჩვეულებრივად, რომელიც შეესაბამება SELECT- ის განცხადებებს, სადაც მითითებულია BY, LIMIT და OFFSET პუნქტები. თუ თქვენი მონაცემთა ბაზა მხარს უჭერს UNION- ს მშენებლობას, თავდამსხმელს შეუძლია შეეცადოს დაამატოს მთელი შეკითხვა ორიგინალური ცხრილისთვის პაროლების სიაში შეყვანის შესახებ. გამოყენებით დაშიფრული დაგავიწყდათ სფეროებში მკაცრად წახალისება.
    მაგალითი # 2 გამოვა სტატიები ... და პაროლები (ნებისმიერი მონაცემთა სერვერი)

    <? php

    $ query = "SELECT ID, სახელი, ჩასმული, ზომა FROM პროდუქტები
    WHERE ზომა = '$ ზომა';
    $ შედეგი = odbc_exec ($ conn, $ query);

    ?>

    შეკითხვათა სტატიკური ნაწილი შეიძლება შერწყმდეს სხვა SELECT- ის განცხადებით, რომელიც აჩვენებს ყველა პაროლს:
    '

    '
    გაერთიანების შერჩევა '1', კონცერტი (uname || '-' | passwd) სახელი, '1971-01-01', '0' მომხმარებლისგან;

    თუ ეს შეკითხვა (თამაშობდა "და") ერთ-ერთ ცვლადს იყენებდა $ query- ში, query beast awakened.
    SQL განახლების ასევე მგრძნობიარე თავდასხმა. ეს კითხვები ასევე ემუქრება chopping და appending სრულიად ახალი შეკითხვა მას. მაგრამ თავდამსხმელმა შეიძლება SET- სთან ერთად შეიტანოს. ამ შემთხვევაში გარკვეული სქემის ინფორმაცია უნდა ჰქონდეს მანიპულირება შეკითხვა წარმატებით. ეს შეიძლება შეიძინა ფორმა ცვლადი სახელები, ან უბრალოდ უბრალოდ უხეში გაყალბება. არ არსებობს ამდენი დასახელების სახელობითი კონვენციები პაროლების ან მომხმარებლის სახელის შენახვისათვის.

    მაგალითი # 3 პაროლის გადატვირთვისას ... დამატებითი პრივილეგიების მისაღებად (ნებისმიერი მონაცემთა სერვერის)

    <? php
    $ query = "UPDATE usertable SET pwd = '$ pwd' WHERE uid = '$ uid';";
    ?>
    მაგრამ მავნე მომხმარებელი sumbits ღირებულება 'ან uid მოსწონს "admin% to $ uid შეცვალოს admin- ის პაროლი, ან უბრალოდ ადგენს $ pwd to hehehe', სანდო = 100, admin = 'დიახ კიდევ უფრო პრივილეგიები. შემდეგ, შეკითხვა გადანაწილდება:
    <? php

    // $ uid: 'ან uid მოსწონს'% admin%
    $ query = "UPDATE usertable SET pwd = '...' WHERE uid = '' ან uid like '% admin%';";

    // $ pwd: hehehe ', სანდო = 100, admin =' დიახ
    $ query = "UPDATE usertable SET pwd = 'hehehe', სანდო = 100, admin = 'yes' WHERE
    ...; ";

    ?>
    საშიში მაგალითი როგორ ოპერაციული სისტემა დონის ბრძანებები შეიძლება ხელმისაწვდომი იყოს ზოგიერთი მონაცემთა ბაზის მასპინძლებს.

    მაგალითი # 4 მონაცემთა ბაზაში განთავსებული ოპერაციული სისტემა (MSSQL სერვერი)

    <? php

    $ query = "SELECT * FROM PRODUCTS სადაც იდენტურია '% $ prod%' ';
    $ შედეგი = mssql_query ($ query);

    ?>
    თუ თავდამსხმელი წარადგენს ღირებულებას% 'exec master.xp_cmdshell' net მომხმარებლის ტესტი testpass / ADD '- მდე $ prod, მაშინ $ query იქნება:
    <? php

    $ query = "SELECT * FROM პროდუქტები
    სად იცი '% a%'
    exec master.xp_cmdshell 'net მომხმარებლის ტესტი testpass / ADD' - '';
    $ შედეგი = mssql_query ($ query);

    ?>
    MSSQL სერვერი ახორციელებს SQL- ის განცხადებებს სურათების ჩათვლით, მათ შორის ბრძანება, რომლითაც ახალი მომხმარებელი დაამატებთ ადგილობრივ ანგარიშებზე მონაცემთა ბაზას. თუ ეს პროგრამა გაშვებულია და MSSQLSERVER სერვისი საკმარისი პრივილეგიებით იფუნქციონირებს, თავდამსხმელს ახლა ექნება ანგარიში, რომელიც წვდომას ამ მანქანას.
    შენიშვნა:

    ზემოთ მოყვანილი მაგალითები მოცემულია სპეციფიკური მონაცემთა სერვერზე. ეს არ ნიშნავს იმას, რომ მსგავსი თავდასხმა შეუძლებელია სხვა პროდუქტებზე. თქვენი მონაცემთა ბაზის სერვერი შეიძლება სხვაგვარად იყოს მოწყვლადი.
     
გთხოვთ მოითმინოთ...