Máy tínhLập trình

Việc tiêm SQL là gì?

Số lượng trang web và trang trên web đang tăng dần. Đối với sự phát triển được thực hiện bởi tất cả những người có thể. Và những người lập trình web mới làm quen thường sử dụng mã không an toàn và cũ. Và điều này tạo ra rất nhiều lỗ hổng cho kẻ xâm nhập và tin tặc. Than họ cũng sử dụng. Một trong những lỗ hổng cổ điển nhất là SQL injection.

Một chút lý thuyết

Nhiều người biết rằng hầu hết các trang web và dịch vụ trên mạng sử dụng SQL để lưu trữ cơ sở dữ liệu. Đây là ngôn ngữ truy vấn có cấu trúc cho phép bạn quản lý và quản lý các kho dữ liệu. Có rất nhiều phiên bản khác nhau của hệ thống quản lý cơ sở dữ liệu - Oracle, MySQL, Postgre. Bất kể tên và kiểu, họ sử dụng các yêu cầu dữ liệu bằng nhau. Đây là nơi dễ bị tổn thương tiềm ẩn. Nếu nhà phát triển không thể thực hiện yêu cầu một cách chính xác và an toàn, kẻ tấn công có thể lợi dụng điều này và áp dụng chiến thuật đặc biệt để truy cập vào cơ sở dữ liệu và từ đó để quản lý toàn bộ trang web.

Để tránh những tình huống như vậy, bạn cần tối ưu hóa mã một cách thông minh và theo dõi cẩn thận truy vấn nào được xử lý theo cách nào.

Kiểm tra SQL injection

Để thiết lập sự hiện diện của tính dễ tổn thương trong mạng, có rất nhiều hệ thống phần mềm tự động đã được làm sẵn. Nhưng bạn có thể thực hiện một kiểm tra đơn giản bằng tay. Để thực hiện việc này, hãy truy cập vào một trong các trang web đang được điều tra và cố gắng gây ra lỗi cơ sở dữ liệu trong thanh địa chỉ. Ví dụ: tập lệnh trên trang web không thể xử lý yêu cầu và không cắt chúng.

Ví dụ: có some_site / index.php? Id = 25

Cách đơn giản nhất là đặt sau 25 trích dẫn và gửi yêu cầu. Nếu không có lỗi xảy ra, sau đó hoặc là tất cả yêu cầu được lọc trên trang web và xử lý đúng, hoặc sản lượng của họ bị vô hiệu trong cài đặt. Nếu trang khởi động lại với các vấn đề, sau đó có một lỗ hổng cho SQL injection.

Sau khi nó được tìm thấy, bạn có thể cố gắng thoát khỏi nó.

Để thực hiện lỗ hổng này, bạn cần phải biết một chút về các lệnh truy vấn SQL. Một trong số đó là UNION. Nó kết hợp nhiều kết quả truy vấn vào một. Vì vậy, bạn có thể tính số lượng các lĩnh vực trong bảng. Ví dụ về truy vấn đầu tiên sẽ như sau:

  • Some_site / index.php? Id = 25 UNION CHỌN 1.

Trong hầu hết các trường hợp, mục nhập đó sẽ gây ra lỗi. Điều này có nghĩa là số lượng các trường không bằng 1. Do đó, lựa chọn các tùy chọn từ 1 trở lên, bạn có thể đặt số chính xác của chúng:

  • Some_site / index.php? Id = 25 UNION SELECT 1,2,3,4,5,6.

Nghĩa là, khi lỗi dừng xuất hiện, có nghĩa là số trường được đoán.

Ngoài ra còn có một giải pháp thay thế cho vấn đề này. Ví dụ: khi số trường lớn - 30, 60 hoặc 100. Đây là lệnh GROUP BY. Nó nhóm các kết quả của truy vấn theo một số đặc trưng, ví dụ id:

  • Some_site / index.php? Id = 25 GROUP BY 5.

Nếu không nhận được lỗi, thì có nhiều lĩnh vực hơn 5. Vì vậy, thay thế biến thể từ một phạm vi khá rộng, có thể tính toán bao nhiêu trong số họ thực sự là.

Ví dụ về SQL injection là dành cho những người mới bắt đầu muốn thử nghiệm bản thân trong việc kiểm tra trang web của họ. Điều quan trọng cần nhớ là để truy cập trái phép vào người khác có một bài báo của Bộ luật hình sự.

Các loại tiêm chính

Thực hiện các lỗ hổng thông qua SQL injection có thể được thực hiện bằng nhiều cách. Tiếp theo là những kỹ thuật phổ biến nhất:

  • Truy vấn SQL truy vấn UNION. Một ví dụ đơn giản về loại này đã được xem xét ở trên. Nó được thực hiện do một lỗi trong việc kiểm tra dữ liệu đến, mà không bị lọc theo bất kỳ cách nào.

  • Lỗi SQL injection. Như tên của nó, loại này cũng sử dụng lỗi, gửi các biểu thức có cú pháp không chính xác. Sau đó, các tiêu đề phản hồi được chặn, phân tích, sau đó bạn có thể sau đó thực hiện việc tiêm SQL.

  • Các truy vấn SQL được xếp chồng lên nhau. Lỗ hổng này được xác định bằng việc thực hiện các yêu cầu liên tiếp. Nó được đặc trưng bởi phần đính kèm ở cuối dấu ";". Cách tiếp cận này thường được thực hiện để truy cập vào việc thực hiện đọc và ghi dữ liệu hoặc quản lý các chức năng của hệ điều hành nếu các đặc quyền cho phép.

Khu phức hợp phần mềm để tìm kiếm lỗ hổng SQL

Các chương trình sẵn có cho các mũi tiêm SQL thường có hai thành phần: quét các trang web về các lỗ hổng có thể và sử dụng chúng để truy cập dữ liệu. Có những tiện ích cho hầu hết các nền tảng được biết đến. Chức năng của họ rất nhiều tạo điều kiện cho việc xác minh của trang web cho khả năng hacking tiêm SQL.

Sqlmap

Một máy quét rất mạnh mẽ làm việc với hầu hết các DBMS được biết đến. Hỗ trợ các kỹ thuật khác nhau để thực hiện tiêm SQL. Có khả năng tự động nhận dạng mật khẩu hash và hack nó qua từ điển. Ngoài ra còn có các chức năng tải lên và tải lên các tập tin từ máy chủ.

Cài đặt trong môi trường Linux được thực hiện bằng cách sử dụng các lệnh sau:

  • Git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • Cdsqlmap-dev /,
  • ./sqlmap.py --wizard.

Đối với Windows, có một tùy chọn với một dòng lệnh, và với một giao diện người dùng đồ họa.

JSQL Injection

JSQL Injection là một công cụ nền tảng cho việc kiểm tra việc sử dụng các lỗ hổng SQL. Viết bằng Java, vì vậy hệ thống phải có cài đặt JRE. Có thể xử lý yêu cầu GET, POST, tiêu đề, cookie. Nó có một giao diện đồ họa thuận tiện.

Cài đặt phần mềm này như sau:

Wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | Grep-E -o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[_0-9] {1,2}. [0-9] {1,2} .jar '| Trưởng nhóm 1`

Khởi chạy được thực hiện bằng cách sử dụng lệnh java -jar ./jsql-injection-v*.jar

Để bắt đầu kiểm tra một trang web về một lỗ hổng SQL, bạn cần phải nhập địa chỉ của nó vào trường trên cùng. Chúng được tách riêng cho GET và POST. Nếu kết quả là tích cực, một danh sách các bảng có sẵn xuất hiện trong cửa sổ bên trái. Họ có thể được xem và tìm hiểu một số thông tin bí mật.

Để tìm kiếm các bảng quản trị, sử dụng tab "Trang Quản trị". Nó sử dụng các mẫu đặc biệt để tự động tìm kiếm các bản ghi hệ thống của người dùng có đặc quyền. Trong số này, bạn chỉ có thể nhận được mật khẩu băm. Nhưng nó cũng có sẵn trong các công cụ của chương trình.

Sau khi tìm thấy tất cả các lỗ hổng và tiêm các truy vấn cần thiết, tiện ích sẽ cho phép bạn tải lên tệp tin của bạn lên máy chủ hoặc ngược lại, tải xuống từ đó.

SQLi Dumper v.7

Chương trình này là một công cụ dễ sử dụng để tìm kiếm và triển khai các lỗ hổng trong SQL. Sản xuất nó trên cơ sở những cuộc tập trận được gọi là. Danh sách của họ có thể được tìm thấy trên Internet. Dorky cho SQL injection là một mẫu đặc biệt của các truy vấn tìm kiếm. Với sự giúp đỡ của họ, bạn có thể tìm thấy một trang web dễ bị tổn thương thông qua bất kỳ công cụ tìm kiếm.

Công cụ đào tạo

Trang web itsecgames.com có một bộ công cụ đặc biệt, cho phép ví dụ cho thấy làm thế nào để thực hiện một SQL injection và thử nghiệm nó. Để sử dụng, nó phải được tải về và cài đặt. Lưu trữ chứa một tập hợp các tập tin, đó là cấu trúc của trang web. Để cài đặt nó, bạn sẽ cần tập hợp các máy chủ web Apache, MySQL và PHP hiện có.

Sau khi giải nén tệp lưu trữ vào thư mục máy chủ web, bạn cần phải đi đến địa chỉ đã nhập khi cài đặt sản phẩm phần mềm này . Một trang có đăng ký người dùng sẽ mở ra. Ở đây bạn cần phải nhập chi tiết của bạn và nhấp vào "Tạo". Bằng cách chuyển người dùng vào một cửa sổ mới, hệ thống sẽ nhắc bạn chọn một trong các tùy chọn kiểm tra. Trong số đó có cả hai mô tả tiêm, và nhiều nhiệm vụ kiểm tra khác.

Cần xem xét một ví dụ về kiểu tiêm SQL GET / Search. Ở đây bạn cần phải chọn nó và nhấn "Hack". Trước khi người dùng xuất hiện chuỗi tìm kiếm và bắt chước một trang web nhất định với phim. Bạn có thể xem phim trong một thời gian dài. Nhưng chỉ có 10. Ví dụ, bạn có thể thử vào Iron Man. Một bộ phim sẽ xuất hiện, có nghĩa là trang web đang làm việc, và các bảng trong đó có sẵn. Bây giờ chúng ta cần phải kiểm tra nếu kịch bản lệnh lọc ký tự đặc biệt, đặc biệt là dấu ngoặc kép. Để làm điều này, thêm '' vào dòng địa chỉ. Và, bạn cần phải làm điều này sau tiêu đề của bộ phim. Các trang web sẽ ném ra một lỗi Lỗi: Bạn có một lỗi trong cú pháp SQL của bạn; Kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp bên phải để sử dụng gần '%' 'ở dòng 1, mà nói rằng các ký tự vẫn đang được xử lý không chính xác. Vì vậy, bạn có thể thử thay thế yêu cầu của bạn. Nhưng trước tiên bạn phải tính số lượng các trường. Để thực hiện việc này, hãy sử dụng đơn đặt hàng, được giới thiệu sau câu lệnh: http://testsites.com/sqli_1.php?title=Iron+Man 'sắp xếp theo 2 - & action = search.

Lệnh này chỉ đơn giản hiển thị thông tin về bộ phim, nghĩa là số lượng các trường lớn hơn 2. Một dấu nối đôi cho máy chủ biết rằng các yêu cầu còn lại nên được loại bỏ. Bây giờ chúng ta cần phải phân loại, thay thế tất cả các giá trị lớn cho đến khi một lỗi được xuất ra. Cuối cùng, nó chỉ ra rằng các lĩnh vực sẽ là 7.

Bây giờ là lúc để có được một cái gì đó hữu ích từ cơ sở dữ liệu. Bạn sẽ phải sửa đổi truy vấn một chút trong thanh địa chỉ, đưa nó vào biểu mẫu này: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, database (), user (), 4, password, 6, 7 từ người dùng - & action = search. Kết quả của việc thực thi, bạn sẽ thấy các dòng có mật khẩu hashes mà có thể dễ dàng chuyển thành các ký tự dễ hiểu bằng cách sử dụng một trong các dịch vụ trực tuyến. Một pokoldovav nhỏ và chọn tên trường với thông tin đăng nhập, bạn có thể truy cập vào hồ sơ của người khác, ví dụ như trang quản trị.

Có nhiều loại thuốc tiêm trong sản phẩm, trên đó bạn có thể thực hành. Cần nhớ rằng việc áp dụng các kỹ năng này trong mạng, trên các trang web thực có thể là tội phạm.

Injection và PHP

Theo nguyên tắc, mã PHP có trách nhiệm xử lý các yêu cầu cần thiết đến từ người dùng. Vì vậy, ở mức này bạn cần phải xây dựng bảo vệ chống lại các cú SQL trong PHP.

Để bắt đầu, bạn nên đưa ra một vài đề xuất đơn giản dựa trên những gì bạn cần làm.

  • Dữ liệu phải luôn được xử lý trước khi đưa vào cơ sở dữ liệu. Bạn có thể thực hiện điều này bằng cách sử dụng các biểu thức hiện tại hoặc bằng cách tổ chức các truy vấn theo cách thủ công. Ở đây cũng vậy, bạn nên xem xét rằng các giá trị số được chuyển đổi sang kiểu cần thiết;
  • Tránh yêu cầu sự xuất hiện của các cấu trúc điều khiển khác nhau.

Bây giờ một chút về các quy tắc của truy vấn trong MySQL để bảo vệ chống lại các tiêm SQL.

Khi viết bất kỳ biểu thức nào cho truy vấn, điều quan trọng là phải tách biệt dữ liệu khỏi các từ khoá SQL.

  • SELECT * T FROM bảng WHERE tên = Zerg.

Trong thiết kế này, hệ thống có thể nghĩ rằng Zerg là tên của một trường, vì vậy bạn cần phải đóng nó trong dấu ngoặc kép.

  • SELECT * T FROM bảng WHERE name = 'Zerg'.

Tuy nhiên, có những tình huống mà chính giá trị nó chứa dấu ngoặc kép.

  • SELECT * T FROM bảng WHERE name = 'Cote d'Ivoire'.

Ở đây, chỉ một phần của con mèo được xử lý, và phần còn lại có thể được coi là một đội, mà không phải là tự nhiên. Vì vậy, một lỗi xảy ra. Vì vậy, bạn cần phải sàng lọc loại dữ liệu này. Để làm điều này, sử dụng dấu gạch chéo ngược- \.

  • SELECT * T FROM bảng WHERE name = 'cat-e' Ngà. '

Tất cả các điều trên áp dụng cho dây. Nếu hành động xảy ra với một số, sau đó nó không cần dấu ngoặc kép hoặc dấu gạch chéo. Tuy nhiên, họ nhất thiết phải bắt buộc phải dẫn đến các loại dữ liệu yêu cầu.

Có một đề xuất rằng tên trường nên được kèm theo trong một backquote. Biểu tượng này ở phía bên trái của bàn phím, cùng với dấu ngã "~". Điều này là cần thiết cho MySQL để phân biệt chính xác tên trường từ từ khóa của nó.

Năng động làm việc với dữ liệu

Thông thường, để có được bất kỳ dữ liệu từ cơ sở dữ liệu, các truy vấn được tạo động được sử dụng. Ví dụ:

  • SELECT * FROM table WHERE number = '$ number'.

Ở đây, số $ được truyền như một định nghĩa giá trị trường. Điều gì sẽ xảy ra nếu cat-d'Ivoire tấn công nó? Đã xảy ra lỗi.

Để tránh rắc rối này, tất nhiên, bạn có thể bao gồm "phép thuật trích dẫn" trong cài đặt. Nhưng bây giờ dữ liệu sẽ được kiểm tra khi cần thiết và không cần thiết. Ngoài ra, nếu mã được viết bằng tay, bạn có thể dành nhiều thời gian hơn để tự tạo ra một hệ thống chống trộm.

Để thêm một dấu gạch chéo chính mình, bạn có thể sử dụng mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ number);

$ Năm = mysql_real_escape_string (năm $);

$ Query = "INSERT INTO bảng (số, năm, lớp) GIÁ TRỊ ('$ số', 'năm $, 11)".

Mặc dù mã đã phát triển về khối lượng, tuy nhiên, có khả năng nó sẽ hoạt động an toàn hơn nhiều.

Người giữ chỗ

Người giữ chỗ là dấu hiệu ban đầu, theo đó hệ thống tìm hiểu rằng một chức năng đặc biệt phải được thay thế vào nơi này. Ví dụ:

$ Sate = $ mysqli-> chuẩn bị ("SELECT FROM FROM WHERE Name =?");

$ Sate-> bind_param ("s", $ number);

$ Sate-> execute ();

Phần này của mã chuẩn bị mẫu truy vấn, sau đó kết hợp số biến và thực hiện nó. Cách tiếp cận này cho phép bạn tách xử lý yêu cầu và việc thực hiện nó. Do đó, bạn có thể tự bảo vệ mình khỏi việc sử dụng mã độc hại trong các truy vấn SQL.

Kẻ tấn công có thể làm gì

Bảo vệ hệ thống là một yếu tố rất quan trọng không thể bỏ qua. Tất nhiên, một thẻ kinh doanh trang web đơn giản sẽ được dễ dàng hơn để khôi phục lại. Và nếu đây là một cổng thông tin tuyệt vời, dịch vụ, diễn đàn? Những hậu quả có thể xảy ra nếu bạn không nghĩ đến an ninh?

Thứ nhất, hacker có thể phá vỡ cả tính toàn vẹn của cơ sở dữ liệu và loại bỏ hoàn toàn. Và nếu quản trị viên hoặc nhà cung cấp trang web không sao lưu, thì sẽ không dễ dàng. Ngoài ra, một kẻ tấn công, hack vào một trang web, có thể chuyển sang người khác, nằm trên cùng một máy chủ.

Tiếp theo là trộm cắp dữ liệu cá nhân của khách. Cách sử dụng chúng - mọi thứ đều bị giới hạn bởi trí tưởng tượng của hacker. Nhưng trong mọi trường hợp, những hậu quả sẽ không được dễ chịu. Đặc biệt là nếu thông tin tài chính được chứa.

Ngoài ra, một kẻ tấn công có thể hợp nhất cơ sở dữ liệu của mình, và sau đó trích tiền cho sự trở lại của cô.

Sự méo mó của người sử dụng thay mặt quản trị viên trang web, những người không phải là của riêng họ, cũng có thể có những hậu quả tiêu cực, vì gian lận là có thể.

Kết luận

Tất cả thông tin trong bài viết này chỉ được cung cấp cho mục đích thông tin. Chỉ sử dụng nó để kiểm tra các dự án của chính bạn khi các lỗ hổng được phát hiện và cố định.

Để có một nghiên cứu sâu hơn về kỹ thuật làm thế nào để thực hiện việc chèn SQL, bạn cần phải bắt đầu thực sự khám phá các tính năng và tính năng của ngôn ngữ SQL. Làm thế nào truy vấn được thực hiện, từ khoá, loại dữ liệu và ứng dụng của tất cả các điều này.

Ngoài ra, bạn không thể làm mà không có sự hiểu biết về hoạt động của PHP chức năng và các yếu tố HTML. Các điểm dễ bị tổn thương chủ yếu để sử dụng các mũi tiêm là thanh địa chỉ, tìm kiếm và các lĩnh vực khác nhau. Việc nghiên cứu về các chức năng PHP, cách chúng được thực hiện và các khả năng sẽ giúp bạn hiểu được các lỗi có thể tránh được.

Sự hiện diện của nhiều công cụ phần mềm đã được làm sẵn cho phép bạn tiến hành phân tích sâu về trang web về các lỗ hổng được biết đến. Một trong những sản phẩm phổ biến nhất là linux kali. Nó là một hình ảnh của một hệ điều hành dựa trên Linux có chứa một số lượng lớn các tiện ích và các chương trình có khả năng thực hiện một phân tích toàn diện về trang web cho sức mạnh.

Những gì bạn cần phải biết làm thế nào để hack trang web? Nó rất đơn giản - đó là cần thiết để nhận thức được những lỗ hổng tiềm năng của dự án hoặc website của bạn. Đặc biệt là nếu nó là một cửa hàng trực tuyến với thanh toán trực tuyến, nơi mà các dữ liệu người dùng thanh toán có thể bị tổn hại bởi kẻ tấn công.

Đối với nghiên cứu chuyên nghiệp của nhân viên an ninh thông tin hiện có sẽ có thể kiểm tra các trang web cho một loạt các tiêu chí và chiều sâu. Bắt đầu từ một đơn giản HTML tiêm và social engineering và lừa đảo.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 vi.unansea.com. Theme powered by WordPress.