Khái quát về công cụ SQLninja
Công cụ SQLninja là một giải pháp hữu ích để khai thác các lỗ hổng SQL injection trong ứng dụng, sử dụng máy chủ Microsoft SQL làm cơ sở dữ liệu phụ trợ Được phát hành theo giấy phép GPLv3, SQLninja nhằm mục đích cuối cùng là giành quyền kiểm soát máy chủ cơ sở dữ liệu thông qua các lỗ hổng này.
SQLninja được viết bằng Perl và nó có thể được tìm thấy trong Kali bằng cách điều hướng đến Applications => Database Assessments
Hình 1 Đường dẫn đến công cụ sqlninja
Công cụ sqlninja không chỉ đơn thuần phát hiện lỗ hổng chèn SQL, mà còn được sử dụng để khai thác lỗ hổng này nhằm đạt được quyền truy cập shell vào máy chủ cơ sở dữ liệu.
Để thu thập dấu vân tay, máy chủ SQL từ xa cần xác định phiên bản, quyền hạn của người dùng, chế độ xác thực cơ sở dữ liệu và tính khả dụng của xp_cmdshell.
- Bruteforce của mật khu 'sa' (chỉ dành cho SQL Server 2000)
- Nâng cấp đặc quyền lên 'sa' (chỉ dành cho SQL Server 2000)
- Tạo xp_cmdshell tùy chỉnh nếu bản gốc đã bị vô hiệu hóa
- Tải lên các tệp thực thi trên đích thông qua SQLi
- Tích hợp với Metasploit
- Nó sử dụng các kỹ thuật ẩn mình WAF và IPS bằng cách mã bị xáo trộn
- Quét ngược để tìm kiếm một cổng có thể được sử dụng cho Shell đảo ngược
- Shell trực tiếp và đảo ngược, cả TCP và UDP
- Đối với Shell tunneling sử dụng các giao thức DNS và ICMP
- Gói Metasploit, khi bạn muốn sử dụng Meterpreter hoặc thậm chí muốn có quyền truy cập GUI trên máy chủ DB từ xa
- Báo cáo đặc quyền hệ điều hành trên máy chủ DB từ xa bằng cách sử dụng bắt cóc mã thông báo hoặc thông qua CVE-2010-
- Trích xuất dữ liệu từ DB từ xa, sử dụng WAITFOR-based inference hoặc DNS-based tunnels
- Tất cả những điều trên có thể được thực hiện với mã SQL bị xáo trộn, để gây nhầm lẫn cho các hệ thống IDS / IPS
Sqlninja được viết hoàn toàn bằng Perl, do đó, việc cài đặt rất đơn giản và chỉ cần đảm bảo rằng Perl cùng với các mô-đun cần thiết được cài đặt đầy đủ.
Hướng dẫn cài đặt
Có ba phương pháp để cài đặt SQLninja trên Kali Linux, bao gồm sử dụng apt-get, apt và aptitude Dưới đây là mô tả chi tiết về từng phương pháp, cho phép người dùng lựa chọn một trong ba cách để thực hiện cài đặt SQLninja.
1 Cài đặt SQLninja sử dụng apt-get
- Cập nhật cơ sở dữ liệu apt với apt-get bằng lệnh sau: sudo apt-get update
Sau khi cập nhật cơ sở dữ liệu apt, bạn có thể cài đặt SQLninja bằng lệnh sau: `sudo apt-get -y install sqlninja`.
2 Cài đặt SQLninja sử dụng apt
- Cập nhật cơ sở dữ liệu apt với apt bằng lệnh sau: sudo apt update
Sau khi cập nhật cơ sở dữ liệu apt, bạn có thể cài đặt SQLninja bằng cách sử dụng lệnh sau: sudo apt -y install sqlninja.
3 Cài đặt SQLninja sử dụng aptitude
Để áp dụng phương pháp này, bạn cần cài đặt aptitude, vì nó thường không được cài đặt mặc định trên Kali Linux Hãy cập nhật cơ sở dữ liệu apt bằng lệnh: sudo aptitude update.
Sau khi cập nhật cơ sở dữ liệu apt, bạn có thể cài đặt SQLninja bằng lệnh sau: sudo aptitude -y install sqlninja.
Dưới dây là cài đặt SQLninja trên máy chủ Kali cho bài lab phần sau
Hình 2 Cài đặt công cụ sqlninja
Hướng dẫn sử dụng
Hành vi của Sqlninja được điều chỉnh qua tệp cấu hình mặc định là sqlninja.conf, giúp xác định cách thức tấn công, bao gồm máy chủ mục tiêu, trang dễ bị tấn công và chuỗi khai thác Ngoài ra, Sqlninja cũng hỗ trợ một số tùy chọn dòng lệnh để chỉ định các hành động cần thực hiện.
- -m : chỉ định chế độ tấn công Về cơ bản, cho sqlninja biết phải làm gì Giá trị có thể là:
- -v: đầu ra dài dòng
- -f : chỉ định tệp cấu hình sẽ sử dụng
Tùy chọn -p được sử dụng trong chế độ báo cáo để thêm người dùng DB hiện tại vào nhóm sysadmin, và trong các chế độ khác để thực hiện truy vấn với quyền quản trị viên nếu người dùng không thuộc nhóm đó Tuy nhiên, tùy chọn này hiếm khi được sử dụng, vì chế độ bruteforce mặc định sẽ tự động thêm người dùng DB vào nhóm sysadmin khi mật khẩu 'sa' được tìm thấy Để biết thêm chi tiết về cách sử dụng thông số này, bạn nên tham khảo chế độ báo cáo.
- -w : danh sách từ để sử dụng trong chế độ bruteforce
- -g: kết hợp với chế độ tải lên, tạo tập lệnh gỡ lỗi và thoát
- -d : kích hoạt debug, để xem những gì đang diễn ra Giá trị có thể là:
- 1: in từng lệnh SQL đang được đưa vào
- 2: in từng yêu cầu HTTP được gửi đến đích
- 3: in từng phản hồi HTTP nhận được từ đích
- all: tất cả những điều trên
Các chế độ tấn công
test
Chế độ này yêu cầu chỉ một lệnh WAITFOR DELAY để kiểm tra tính khả thi của việc thực thi từ xa trên máy chủ Sử dụng chế độ này giúp xác minh tính chính xác của tệp cấu hình và đảm bảo rằng quá trình tiêm đang hoạt động hiệu quả.
fingerprint
- Tham số: -p (tùy chọn)
Tính năng tiêm mù dựa trên WAITFOR cho phép lấy dấu vân tay của máy chủ từ xa, giúp thu thập các thông tin quan trọng một cách hiệu quả.
- Phiên bản cơ sở dữ liệu (2000/2005/2008/2012)
- Người dùng đang thực hiện các truy vấn
- Người dùng đó có thuộc nhóm sysadmin hay không
- Liệu xp_cmdshell có khả dụng cho người dùng đó không
Máy chủ từ xa có thể sử dụng xác thực hỗn hợp hoặc chỉ dành cho Windows, điều này rất quan trọng nếu bạn muốn thực thi mật khẩu 'sa'.
Máy chủ SQL từ xa có hoạt động dưới dạng hệ thống hay không là một yếu tố quan trọng cần kiểm tra Điều này cũng giúp xác định xem churrasco.exe đã được tải lên chính xác và liệu có thể nâng cao đặc quyền thông qua việc bắt cóc mã thông báo hay không.
- Tên của DB hiện tại
Nếu bạn đang tấn công SQL Server 2000 và người dùng DB hiện tại không thuộc nhóm sysadmin, nhưng mật khẩu đúng 'sa' được chỉ định làm tham số, dấu vân tay sẽ được thực hiện với quyền quản trị Kỹ thuật WAITFOR chậm hơn so với các phương pháp suy luận khác, nhưng đến nay nó là kỹ thuật linh hoạt nhất Do các yếu tố bên ngoài như lưu lượng mạng và tải máy chủ có thể ảnh hưởng đến phép đo thời gian, bạn nên lặp lại dấu vân tay vài lần nếu kết quả đầu tiên không đúng với tham số thời gian mù trong tệp cấu hình Lưu ý rằng để sử dụng vân tay, người dùng đang chạy SQL Server phải có sẵn những điều kiện cần thiết trên hộp điều khiển từ xa.
- xp_cmdshell (hoặc một thủ tục tương đương)
- whoami.exe Tính năng này được hiển thị theo mặc định trên
Nếu bạn đang sử dụng Windows 2003 và nghi ngờ rằng tiện ích này không có trên hộp điều khiển từ xa, hãy truy cập microsoft.com để tải xuống và cài đặt nó.
bruteforce
- Tham số: -w (tùy chọn)
Chế độ này được áp dụng cho những truy vấn không thuộc nhóm sysadmin, tương tự như chế độ vân tay Nếu đúng như vậy, người dùng cần nâng cao đặc quyền của mình để thực hiện các tác vụ cần thiết.
OPENROWSET cho phép cơ sở dữ liệu kết nối với chính nó bằng thông tin đăng nhập thay thế, có thể thử thực thi mật khẩu 'sa' Nếu mật khẩu đúng được phát hiện, người dùng hiện tại sẽ tự động được thêm vào nhóm sysadmin Để cuộc tấn công này thành công, SQL Server từ xa cần sử dụng "xác thực hỗn hợp" Sử dụng chế độ vân tay để kiểm tra tính chính xác của thông tin này.
Chế độ tấn công này cho phép người dùng lựa chọn giữa hai phương pháp: "từ điển" và "tăng dần" Bạn hoàn toàn có thể áp dụng phương pháp nào phù hợp nhất với nhu cầu cá nhân của mình.
Phương pháp này áp dụng khi bạn có một danh sách từ đã được chỉ định, sử dụng tùy chọn -w Khi sử dụng phương pháp này, các mật khẩu tiềm năng sẽ được tìm nạp từ danh sách từ và mỗi mật khẩu sẽ được thử nghiệm trong một yêu cầu riêng biệt Đảm bảo rằng danh sách từ của bạn bao gồm 'sa' và mật khẩu trống, đây là hai mục yêu thích cần thiết cho cài đặt MS SQL Server.
➢ Ưu điểm: i Rất hiệu quả nếu mật khẩu dựa theo từ điển ii Không đặt nặng máy chủ DB
Mật khẩu không dựa trên từ điển thường không hiệu quả, vì nếu mật khẩu không nằm trong danh sách từ của bạn, bạn sẽ không thể truy cập Hơn nữa, việc tấn công này cần nhiều kết nối mạng, do đó dễ dàng bị phát hiện qua việc kiểm tra nhật ký của máy chủ web.
Phương pháp này được áp dụng khi danh sách từ không được chỉ định, với Sqlninja gửi một tập hợp các truy vấn thử tất cả các kết hợp ký tự có thể có, theo độ dài do người dùng quy định Điểm thú vị của chiến thuật này là các truy vấn thực hiện trên máy chủ cơ sở dữ liệu, do đó, quá trình brute force thực chất sử dụng tài nguyên CPU của mục tiêu.
Phần mềm này rất hiệu quả trong việc tìm mật khẩu mà không dựa vào từ điển, giúp tăng cường bảo mật Ngoài ra, nó yêu cầu ít kết nối, do đó chỉ tạo ra một số lượng nhỏ mục nhập trong nhật ký máy chủ web, giúp dễ dàng quản lý và theo dõi hoạt động.
Mặc dù sqlninja có những ưu điểm, nhưng cũng tồn tại một số nhược điểm cần lưu ý Đầu tiên, nếu mật khẩu quá dài, quá trình tấn công có thể mất nhiều thời gian Thứ hai, việc này có thể đẩy mức sử dụng CPU của máy chủ cơ sở dữ liệu lên đến 100%, gây nguy hiểm cho các ứng dụng đang hoạt động Các máy chủ quan trọng thường có cảnh báo nếu mức sử dụng CPU duy trì ở mức cao trong một khoảng thời gian nhất định Để tăng cường bảo mật, sqlninja chia nhỏ nhiệm vụ thành nhiều phần, mỗi phần thử n^3 mật khẩu, với n là độ dài của bộ ký tự Nếu xảy ra sự cố, người dùng chỉ cần dừng sqlninja và quá trình brute force sẽ dừng lại ở đoạn hiện tại Cuối cùng, tùy thuộc vào cách ứng dụng kết nối với máy chủ cơ sở dữ liệu, kỹ thuật này có thể không hoạt động, như trường hợp ODBC thường gây ra sự cố Sqlninja sẽ nhanh chóng phát hiện vấn đề và thông báo cho người dùng, giúp tiết kiệm thời gian quý báu.
Từ SQL Server 2005 trở đi, tính năng OPENROWSET bị tắt theo mặc định cho người dùng không phải là quản trị viên Nếu bạn đang làm việc với SQL Server 2005/2008/2012 và không phải là 'sa', có thể bạn sẽ gặp khó khăn, nhưng bạn vẫn có thể trích xuất dữ liệu bằng cách sử dụng chế độ getdata.
- Trong SQL Server 2000, mật khẩu không phân biệt chữ hoa chữ thường, điều này giúp đơn giản hóa rất nhiều công việc bẻ khóa
- Bit báo cáo có thể bị ảnh hưởng nếu ứng dụng sử dụng ODBC (xem chế độ báo cáo)
escalation
- Tham số: -p (bắt buộc)
- Khi mật khẩu 'sa' chính xác được chỉ định, người dùng DB hiện tại sẽ được thêm vào nhóm sysadmin
Nói chung, bạn không nên cần đến phương pháp này vì SQLNinja đã xử lý việc tăng cường quyền truy cập bằng brute force Tuy nhiên, có thể có những trường hợp bạn cần thực hiện bước này một cách độc lập, chẳng hạn như khi bạn đã tìm thấy mật khẩu thông qua một cuộc tấn công kỹ thuật xã hội.
Nếu bạn muốn tìm hiểu cách hoạt động của bản báo cáo hoặc đã tìm thấy mật khẩu 'sa' nhưng bản báo cáo không hoạt động, hãy tiếp tục đọc Nếu không, bạn có thể chuyển sang chế độ resrectxp.
Việc báo cáo được thực hiện thông qua OPENROWSET kết hợp với mật khẩu 'sa' và sp_addsrvrolemember, bằng cách thêm người dùng DB hiện tại vào nhóm sysadmin Khả năng sp_addsrvrolemember bị vô hiệu hóa là rất thấp, do đó thủ thuật này thường hoạt động hiệu quả Nếu nó không hoạt động, có thể xảy ra hai trường hợp khác nhau.
➢ Máy chủ sử dụng ODBC và bạn đang sử dụng các kết nối ODBC cũ từ nhóm kết nối, vẫn sử dụng các đặc quyền cũ
➢ Thủ tục sp_addsrvrolemember đã bị vô hiệu hóa
Trong trường hợp đầu tiên, bạn có thể chỉ cần một vài pints chờ kết nối ODBC, nhưng nếu thời gian chờ bị hết và kết nối bị ngắt, điều này có thể xảy ra do mặc định kết nối ODBC bị ngắt sau 60 giây nhàn rỗi Khả năng xảy ra sự kiện này phụ thuộc vào số lượng máy khách đang kết nối với ứng dụng web và cách con số này thay đổi theo thời gian.
Trong trường hợp bạn không muốn chờ đợi, hãy chỉ định tham số -p trong tất cả các bước tiếp theo của cuộc tấn công Điều này sẽ cho phép sqlninja sử dụng OPENROWSET trong mỗi kết nối, thực thi mọi lệnh dưới quyền 'sa' thay vì người dùng hiện tại.
resrectxp
- Tham số: -p (tùy chọn)
- Chế độ này sẽ được sử dụng khi cả hai điều kiện sau được đáp ứng:
➢ Chúng tôi có đặc quyền sysadmin hoặc chúng tôi biết mật khẩu
➢ xp_cmdshell đã bị vô hiệu hóa
Mục tiêu của chế độ này là khôi phục thủ tục mở rộng xp_cmdshell, với nhiều biến số ảnh hưởng đến cách thức hoạt động của chế độ Do đó, cần đọc kỹ để ghi nhớ những điều quan trọng liên quan đến chế độ này.
- Các phương pháp: có hai cách để lấy lại xp_cmdshell:
Để khôi phục, bạn cần thực hiện một thủ tục đã lưu trữ, sử dụng sp_addextendedproc trên SQL Server 2000 và sp_configure trên SQL Server 2005 Phương pháp này yêu cầu một lệnh SQL đơn giản, tuy nhiên, cần đảm bảo rằng tệp xplog70.dll vẫn còn tồn tại.
Để tạo một tùy chỉnh, bạn có thể sử dụng các lệnh "CREATE PROCEDURE", sp_oacreate, sp_oamethod và sp_oadestroy Mặc dù phương pháp này yêu cầu nhiều mã hơn, nhưng hoạt động của xplog70.dll đã bị xóa vì lý do bảo mật.
Khi kích hoạt lại xp_cmdshell, có thể không được chú ý, hoặc các nhà phát triển ứng dụng có thể đã tuân thủ nghiêm ngặt các khuyến nghị của Microsoft, đó là lọc chuỗi "xp_*" mà không đề cập đến "sp_*" Trong những trường hợp này, việc tạo thủ tục với tên riêng biệt hơn, chẳng hạn như "sp_sqlbackup", là một giải pháp khả thi Bạn có thể lựa chọn tên thủ tục thông qua tùy chọn xp_name trong tệp cấu hình.
Người dùng có quyền truy cập vào các báo cáo đặc quyền; nếu báo cáo này không hoạt động do lý do nào đó, bạn cần sử dụng tham số -p để khắc phục tình trạng này.
, để sử dụng OPENROWSET để báo cáo đặc quyền trong mỗi kết nối và điều này dẫn đến đến điểm sau
- Không thể kết hợp OPENROWSET và CREATE PROCEDURE Do đó, nếu bạn đang sử dụng tham số -p, bạn không thể sử dụng thủ thuật
Tạo thủ tục có thể phức tạp, nhưng bạn có thể đơn giản hóa quy trình bằng cách bao gồm toàn bộ mã thủ tục trong mỗi yêu cầu gửi đến Máy chủ DB mà không cần tạo thủ tục mở rộng Phương pháp này được gọi là "tiêm thủ tục nội tuyến".
- Đây là các bước mà sqlninja tuân theo khi phương pháp này được sử dụng:
Nếu tên thủ tục mở rộng trong tệp cấu hình là xp_cmdshell (giá trị mặc định), sqlninja sẽ bắt đầu bằng cách thử kích hoạt lại nó thông qua sp_addextendedproc hoặc sp_configure Bạn sẽ được hỏi về phiên bản SQL Server từ xa Nếu bạn quên sử dụng chế độ vân tay, sqlninja sẽ tự động tìm kiếm thông tin này Nếu tất cả hoạt động thành công, xp_cmdshell sẽ được kích hoạt trở lại.
Nếu tên thủ tục mở rộng không được đặt thành xp_cmdshell hoặc bước đầu tiên không thành công do xplog70.dll đã bị xóa, chúng ta sẽ thử hai phương pháp Đầu tiên, nếu có đặc quyền quản trị gốc, phương pháp CREATE PROCEDURE sẽ được áp dụng để tạo thủ tục tùy chỉnh Nếu không có đặc quyền này và cần chỉ định mật khẩu trong dòng lệnh, việc chèn thủ tục nội tuyến sẽ được thực hiện.
Bạn cần đặt xp_name thành NULL trong tệp cấu hình để sqlninja có thể sử dụng thủ tục tiêm nội tuyến trong tất cả các bước tiếp theo.
upload
- Tham số: -p (tùy chọn)
Chế độ tải lên tệp nhị phân chỉ sử dụng các yêu cầu GET hoặc POST HTTP tới máy chủ web, không cần FTP/TFTP hay kết nối khác Tệp được tải lên thư mục được chỉ định bởi biến %TEMP% của máy chủ, cho phép cuộc tấn công hoạt động ngay cả khi MSSQL không thể ghi trên thư mục mặc định Có hai phương pháp tải lên có sẵn, được kiểm soát bởi tùy chọn upload_method.
Tập lệnh gỡ lỗi là phương pháp truyền thống sử dụng trình gỡ lỗi DEBUG.EXE 16bits, trong đó tệp nhị phân được mã hóa dưới dạng tập lệnh gỡ lỗi (.scr) Script này phân bổ bộ nhớ, ghi các byte cần thiết và lưu kết quả vào đĩa Mặc dù trình gỡ lỗi 16bits có giới hạn 64k byte, sqlninja đã vượt qua giới hạn này bằng cách chia tệp thực thi thành các phần 64k byte, tải lên riêng biệt và hợp nhất lại Sqlninja áp dụng thuật toán tương tự như trong dbgtool.exe của Jussi, cho phép tạo ra các tập lệnh nhỏ gọn.
Phương pháp vbscript là một phương pháp mới, trong đó mã hóa tệp nhị phân dưới định dạng base64, sau đó tải lên và sử dụng bộ giải mã vbscript đã được tải trước Phương pháp này thường yêu cầu ít tài nguyên hơn, không cần chia tệp gốc và có khả năng hoạt động tốt trên các hệ thống mới Mặc dù phương pháp cũ có nhiều ưu điểm với các thủ thuật gỡ lỗi, nhưng có thể bạn nên xem xét sử dụng phương pháp này.
Dù bạn chọn phương pháp tải lên nào, bạn sẽ được yêu cầu nhập tên tệp và quá trình sẽ hoàn toàn tự động Nếu tệp ở định dạng scr hoặc base64, sqlninja vẫn sẽ thực hiện việc tải lên, nhưng một số kiểm tra như kích thước tệp nhị phân sẽ không được thực hiện Nói chung, luôn tốt hơn khi cung cấp cho sqlninja bản nhị phân gốc.
Để bạn dễ dàng sử dụng, các tệp netcat.exe, dnstun.exe, icmpsh.exe, churrasco.exe, vdmallowed.exe và vdmexploit.dll đã được chuẩn bị sẵn trong các thư mục ứng dụng và tập lệnh, với định dạng nhị phân, gỡ lỗi và base64.
Các tệp thực thi đã được nén bằng UPX nhằm giảm kích thước và thời gian tải Để sử dụng backcan, dirshell và revshell, bạn cần tải lên netcat Đồng thời, dnstun.exe và icmpsh.exe được sử dụng để tạo đường hầm giả mạo qua DNS và ICMP tương ứng.
Churrasco.exe được sử dụng để leo thang đặc quyền thông qua việc bắt cóc mã thông báo khi SQL Server không hoạt động dưới dạng HỆ THỐNG Trong khi đó, vdmallowed.exe và vdmexploit.dll thực hiện các cuộc tấn công tương tự bằng cách khai thác lỗ hổng CVE-2010-0232.
Khi thực hiện quá trình tải lên tệp mã hóa, cần lưu ý rằng nếu bất kỳ dòng nào không được tải lên, tệp thực thi sẽ không được tạo chính xác Cuối quá trình, sqlninja sẽ kiểm tra sự tồn tại của tệp thực thi và cố gắng xác định số dòng đã được tải lên, từ đó cung cấp manh mối về những gì đã xảy ra Ví dụ, nếu trong một bài kiểm tra bằng bút, số dòng kết quả chính xác gấp đôi giá trị thực tế, điều này cho thấy mỗi truy vấn đã được thực hiện hai lần Bí quyết là tạo một bảng tạm thời như một bộ đếm, chỉ kết nối dòng vào tệp script khi bộ đếm đạt giá trị mong muốn.
dirshell
- Tham số: -p (tùy chọn)
Sử dụng phương pháp này khi máy chủ cơ sở dữ liệu từ xa có thể truy cập trực tiếp qua một số cổng TCP hoặc UDP Sqlninja yêu cầu cổng từ xa và giao thức để kết nối máy chủ cơ sở dữ liệu với dấu nhắc lệnh Ngoài ra, netcat cần được cài đặt trên máy chủ từ xa Tham số mật khẩu sẽ được áp dụng khi không có quyền sysadmin gốc.
backscan
- Tham số: -p (tùy chọn)
Khi máy chủ cơ sở dữ liệu (DB) nằm sau tường lửa, việc liên hệ trực tiếp với nó trở nên khó khăn Tuy nhiên, máy chủ có thể được phép truy cập từ bên ngoài thông qua một số cổng như DNS và HTTP Để xác định cổng được phép, máy chủ DB sẽ gửi gói SYN hoặc gói UDP đến máy của chúng tôi trên nhiều cổng khác nhau Công cụ Sqlninja sẽ thông báo cho người dùng biết liệu các gói này có được nhận hay không và trên những cổng nào.
Để sử dụng Sqlninja, bạn cần chỉ định địa chỉ IP của máy tính (tham số lhost) và giao diện lắng nghe (tham số thiết bị) trong tệp cấu hình Sqlninja sẽ yêu cầu bạn chọn giao thức (TCP/UDP) và các cổng cần thử nghiệm, được chỉ định theo cú pháp netcat, ví dụ: "23 25 80-100" để kiểm tra cổng 23, 25 và tất cả các cổng từ 80 đến 100 Tham số mật khẩu sẽ được sử dụng khi không có quyền sysadmin.
19 gốc Để sử dụng chế độ này, trước tiên, netcat phải được tải lên và vì cần sử dụng thư viện pcap nên bạn cũng cần phải root.
revshell
- Tham số: -p (tùy chọn)
Nếu không thể thực hiện một shell trực tiếp, bạn có thể sử dụng shell ngược nếu chế độ quét ngược phát hiện một cổng mở từ máy chủ DB đến máy của bạn Khi sử dụng chế độ này, sqlninja yêu cầu bạn chỉ định cổng cục bộ, giao thức và sau đó bắt đầu kết nối Bạn cần chỉ định địa chỉ IP của máy tính trong tệp cấu hình (tham số máy chủ) Lưu ý rằng netcat phải được tải lên trên máy chủ từ xa Tham số mật khẩu sẽ được sử dụng khi bạn không có đặc quyền sysadmin gốc.
icmpshell
- Tham số: -p (tùy chọn)
Khi tường lửa chặn shell trực tiếp, nhưng DBMS từ xa có khả năng ping, chúng ta có thể sử dụng đường hầm ICMP để đưa shell vào Bằng cách tải lên icmpsh.exe và khởi động chế độ icmpshell, bạn có thể tận hưởng shell của mình Tất cả lưu lượng từ và đến DBMS sẽ được chuyển qua đường hầm thông qua các gói ICMP.
- Khi bắt đầu chế độ tấn công này, sqlninja sẽ hỏi các thông tin sau:
Kích thước bộ đệm dữ liệu được đóng gói thành một gói ICMP duy nhất, với kích thước mặc định là 64 byte Tuy nhiên, bạn có thể sử dụng các giá trị lớn hơn để cải thiện tốc độ truyền dữ liệu Cần lưu ý đến MTU tối đa giữa bạn và DBMS, với giá trị từ 1300-1400 byte thường được coi là đáng tin cậy Nếu muốn an toàn hơn, hãy sử dụng các gói nhỏ hơn.
Thời gian gửi trễ giữa các yêu cầu ICMP Echo là yếu tố quan trọng, với giá trị mặc định là 300 mili giây Để tăng tốc độ đường hầm, bạn có thể sử dụng các giá trị thấp hơn Tuy nhiên, cần lưu ý rằng giá trị quá thấp có thể tạo ra luồng ping dễ bị phát hiện hoặc bị tự động điều chỉnh bởi một số thiết bị chống DoS giữa bạn và mục tiêu.
➢ Thời gian chờ phản hồi: Khoảng thời gian sẽ được icmpshell.exe chờ trước khi gửi lại yêu cầu ICMP Mặc định là
Để đảm bảo rằng hộp của bạn không phản hồi các yêu cầu ICMP Echo, hãy định cấu hình hệ thống một cách phù hợp Trên Linux, bạn có thể sử dụng lệnh sau: sysctl -w net.ipv4.icmp_echo_ignore_all = 1 để thực hiện điều này.
dnstunnel
- Tham số: -p (tùy chọn)
- Khi tường lửa không cho phép shell trực tiếp hoặc ngược lại và
ICMPshell cũng không hoạt động, chúng ta có thể cố gắng thiết lập một đường hầm DNS Các yêu cầu duy nhất là:
➢ Máy chủ DB phải có khả năng phân giải các tên máy chủ bên ngoài (trường hợp này rất thường xảy ra)
➢ IP của chúng tôi phải là máy chủ DNS có thẩm quyền của một số miền Chúng tôi sẽ sử dụng sqlninja.net trong ví dụ
Nếu cả hai điều kiện được đáp ứng, hãy tải lên dnstun.exe, khởi động chế độ dnstunnel và thực hiện các lệnh của bạn Kết quả sẽ tương tự như sau:
Lệnh được gửi qua SQL Injection đến dnstun.exe và được thực thi bởi máy chủ DB từ xa Đầu ra bị chặn và được mã hóa ở định dạng base32 đã được chỉnh sửa một chút.
➢ Đầu ra được mã hóa được chia thành một loạt tên máy chủ của miền mà chúng tôi kiểm soát (ví dụ: encoded_output.sqlninja.net)
➢ Những tên máy chủ đó được chuyển đến gethostbyname (), để máy chủ DB liên hệ với Máy chủ DNS của nó để giải quyết chúng
Máy chủ DNS tìm kiếm máy chủ có thẩm quyền cho sqlninja.net (IP của chúng tôi) và chuyển tiếp các yêu cầu đến máy trạm của chúng tôi.
Sqlninja tiếp nhận yêu cầu và đặt hàng lại nếu cần thiết, giải mã tên máy chủ và cuối cùng in ra kết quả lệnh Ngoài ra, sqlninja cũng phản hồi các yêu cầu DNS với địa chỉ IP giả, giúp hàm gethostbyname() hoạt động nhanh chóng và hiệu quả.
Quá trình truyền trực tuyến cho phép bạn thấy kết quả ngay cả khi lệnh vẫn đang được thực hiện, nghĩa là nếu đầu ra lệnh quá dài, bạn sẽ nhận được thông tin trước khi lệnh hoàn tất.
Để sử dụng Miền, bạn cần chỉ định nó trong tệp cấu hình Lưu ý rằng sqlninja yêu cầu tạo một máy chủ DNS giả mạo và ràng buộc cổng 53, do đó bạn cần có quyền root để sử dụng chế độ này Hãy nhớ rằng DNS sử dụng giao thức UDP, vì vậy việc mất gói có thể gây ra vấn đề.
Metasploit
Nếu bạn có quyền quản trị và xp_cmdshell đang hoạt động, cùng với việc phát hiện một cổng TCP được phép, bạn có thể sử dụng sqlninja để tích hợp với Metasploit Điều này cho phép bạn sử dụng Meterpreter hoặc thiết lập máy chủ VNC Meterpreter hoạt động như một lời nhắc DOS nhưng mạnh mẽ hơn, mang lại khả năng kiểm soát gần như hoàn toàn hệ thống.
Hệ điều hành từ xa cung cấp quyền truy cập ngay lập tức vào hàm băm mật khẩu, cho phép người dùng thay đổi bảng định tuyến và thực hiện chuyển tiếp cổng Nếu có đủ băng thông, người dùng có thể chèn một máy chủ VNC để có quyền truy cập đồ họa trực quan vào cơ sở dữ liệu từ xa.
- Chế độ tấn công này hoàn toàn tự động và tóm lại đây là những gì sẽ xảy ra:
1 Sqlninja yêu cầu bạn chỉ định xem bạn muốn sử dụng Meterpreter hay VNC, kết nối sẽ là trực tiếp hay nghịch đảo và máy chủ / cổng để kết nối với (hoặc cổng cục bộ để liên kết, trong trường hợp kết nối ngược)
2 Sqlninja sẽ gọi msfpayload để tạo một tệp thực thi thích hợp sẽ hoạt động như một máy đếm
3 Sqlninja sau đó sẽ chuyển đổi nó thành một tập lệnh gỡ lỗi và tải nó lên
4 Vì chúng tôi sẽ cần phải đưa một DLL, chúng tôi có thể cần phải tắt Ngăn chặn Thực thi Dữ liệu (còn gọi là 'DEP', được bật theo mặc định bắt đầu từ Windows 2003 SP1) trên hộp điều khiển từ xa Các phiên bản gần đây của Metasploit tự động xử lý bit này, nhưng bạn cũng có thể nói với sqlninja sẽ cố gắng làm điều đó cho bạn, bằng cách truy cập sổ đăng ký và liệt kê tệp thực thi của chúng tôi vào danh sách trắng (xem tham số checkdep)
5 Cuối cùng, Sqlninja sẽ gọi msfcli để tiêm DLL cần thiết và hoàn thành việc khai thác
Để sử dụng chế độ tấn công này, bạn cần có sẵn Metasploit3 trên máy của mình Nếu các tệp thực thi Metasploit như msfpayload, msfcli và msfencode không có trong đường dẫn của bạn, bạn có thể chỉ định vị trí tuyệt đối của chúng trong tệp cấu hình Ngoài ra, nếu bạn sử dụng chế độ VNC, hãy đảm bảo đã cài đặt ứng dụng khách VNC.
sqlcmd
Khi có quyền sysadmin và xp_cmdshell hoạt động nhưng không thể nhận được shell, có thể do quá trình tải lên không thành công hoặc tất cả các cổng đã bị lọc và không cho phép phân giải DNS bên ngoài Trong tình huống này, việc gửi các lệnh đơn lẻ đến máy chủ DB vẫn có thể hữu ích, mặc dù không thể xem kết quả đầu ra Ví dụ, bạn có thể muốn thêm một người dùng cục bộ hoặc một người dùng miền nếu SQL Server chạy với các đặc quyền thích hợp.
22 lệnh DOS và để sqlninja thực thi nó từ xa Chỉ cần nhớ: nó được thực thi ngay cả khi bạn không thấy đầu ra của nó
- Tất nhiên, bạn vẫn có thể sử dụng thời gian để biết điều gì đang xảy ra:
➢ Nếu tồn tại tên tệp (ping -n 5 127.0.0.1)
- Nếu lệnh mất khoảng 5 giây để thực thi, tệp sẽ ở đó
Để xác định xem một lệnh có thành công hay không, hãy kiểm tra giá trị của biến ERRORLEVEL, thường được đặt thành 0 nếu lệnh cuối cùng không gặp lỗi Ví dụ, để kiểm tra xem SQL Server từ xa có đang chạy dưới dạng hệ thống hay không, chúng ta có thể sử dụng lệnh sau:
➢ whoami> who.txt & find / i "\ system" who.txt & if not errorlevel = 1 ping -n 5 127.0.0.1 & del who.txt
Nếu lệnh mất khoảng 5 giây để thực thi, điều đó cho thấy SQL Server đang hoạt động dưới dạng hệ thống Bạn có thể tìm thấy whoami.exe, một công cụ được cài đặt mặc định trên Windows 2003 và có thể tìm thấy trên Windows 2000.
Bộ tài nguyên đã được cài đặt) Làm mới các kỹ năng DOS-shaolin của bạn và sử dụng tưởng tượng của bạn: từ thêm lệnh trong
AUTOEXEC.BAT đến khởi động / dừng dịch vụ và thêm người dùng lừa đảo, bạn có thể tiến khá xa với điều này!
Chế độ này rất hữu ích khi các chế độ khác gặp lỗi, giúp người dùng hiểu rõ nguyên nhân sự cố và cách khắc phục Cuối cùng, lệnh này cũng thể hiện cho khách hàng thấy rằng bạn sở hữu máy chủ.
DB của họ ngay cả khi bạn không nhận được shell:
➢ echo You have been owned by sqlninja> c: \ sqlninja.txt
getdata
- Tham số: -s (tùy chọn)
- Sqlninja hiện hỗ trợ hai kênh trích xuất, dựa trên thời gian và dựa trên DNS, được mô tả bên dưới
Kênh này được sử dụng khi data_channel được thiết lập thời gian trong tệp cấu hình, kết hợp với lệnh WAITFOR DELAY để trích xuất thông tin một cách chậm nhưng đáng tin cậy Sqlninja có khả năng khai thác tính năng tiêm dựa trên thời gian theo hai phương pháp, sẽ được trình bày chi tiết trong các đoạn sau.
- Tìm kiếm nhị phân dựa trên thời gian
Phương thức này được kích hoạt khi data_extraction được đặt thành nhị phân trong tệp cấu hình Nếu bạn có kiến thức cơ bản về máy tính, bạn sẽ hiểu cách hoạt động của thuật toán tìm kiếm nhị phân Phương pháp này giúp giảm thiểu số lượng yêu cầu đến ứng dụng, điều này rất hữu ích nếu bạn muốn giữ dấu.
Mặc dù số chân tối thiểu của tôi là 23, nhưng khoảng một nửa số truy vấn sẽ kích hoạt độ trễ, cho thấy rằng phương pháp này có thể không phải là lựa chọn nhanh nhất.
- Tìm kiếm nối tiếp / tối ưu hóa dựa trên thời gian
Phương thức này được kích hoạt khi data_extraction được đặt thành tối ưu hóa (mặc định) hoặc nối tiếp trong tệp cấu hình Với phương pháp này, tất cả các giá trị có thể được thử theo trình tự cho đến khi đoán đúng Sự khác biệt giữa nối tiếp và tối ưu hóa nằm ở thứ tự của các lần thử: trong khi nối tiếp thử tất cả các giá trị theo thứ tự ASCII, tối ưu hóa bắt đầu với các giá trị phổ biến nhất Thứ tự chính xác được chỉ định với tham số language_map và có thể được sửa đổi trong thời gian thực, thích ứng với tần suất thực tế của các ký tự được trích xuất, nếu tham số language_map_adaptive được đặt thành có.
- Khai thác dựa trên DNS
Bạn có quyền kiểm soát miền DNS hoặc miền phụ? Nếu có, bạn có thể nhận các máy chủ DNS để gửi yêu cầu "Loại A" đến hộp của bạn DBMS từ xa có thể giải quyết các tên bên ngoài không? Nếu câu trả lời là có, bạn có thể quên việc trích xuất dựa trên suy luận chậm chạp và bắt đầu kéo dữ liệu gần như ở tốc độ ánh sáng Đảm bảo rằng bạn chạy sqlninja dưới dạng root, đặt miền trong tệp cấu hình và bạn đã sẵn sàng.
Cấu hình file
Cơ bản
Bắt đầu từ phiên bản 0.2.6, sqlninja đã cải tiến cách định cấu hình yêu cầu HTTP và chuỗi tiêm, cho phép người dùng chỉ định toàn bộ yêu cầu HTTP cùng một lúc với một điểm đánh dấu mặc định là SQL2INJECT Sự thay đổi này không chỉ đơn giản hóa quy trình mà còn mang lại sự linh hoạt trong việc tiêm mã SQL, cho phép tiêm ở bất kỳ vị trí nào, bao gồm cả cookie, mà không bị giới hạn ở các tham số GET hoặc POST Tất cả nội dung giữa các dòng httprequest_start và httprequest_end sẽ được sqlninja coi là yêu cầu HTTP.
Hình 4 Cấu hình GET và POST
- proxyhost: Một proxy HTTP để kết nối với máy chủ đích
- proxyport: Cổng của proxy HTTP mà chúng tôi kết nối Mặc định là
Miền hoặc miền phụ do kẻ tấn công kiểm soát sẽ được sử dụng với chế độ dnstunnel, cho phép truyền tải dữ liệu một cách bí mật Chế độ trích xuất dữ liệu sẽ giúp kẻ tấn công thu thập thông tin quan trọng từ hệ thống mục tiêu.
DNS Địa chỉ IP mà từ đó sqlninja được khởi chạy phải là máy chủ
DNS có thẩm quyền cho miền đó
- msfpath: Đường dẫn tuyệt đối đến các tệp thực thi Metasploit
- evasion: Sqlninja có thể sử dụng một số kỹ thuật trốn tránh, để gây nhầm lẫn và bỏ qua IPS / IDS dựa trên chữ ký
msfencoder là bộ mã hóa được sử dụng cho Metasploit stager Nếu không chỉ định, sẽ không có mã hóa nào được thực hiện Tuy nhiên, việc sử dụng một bộ mã hóa tốt luôn được khuyến khích để tăng cường bảo mật.
- upload_method: Phương pháp sử dụng để tải lên các tệp nhị phân Giá trị có thể là gỡ lỗi hoặc vbscript (mặc định)
2 Trích xuất dữ liệu
Kênh dữ liệu là phương thức sử dụng để trích xuất thông tin Hiện tại, có hai tùy chọn chính: kênh mặc định sử dụng WAITFOR, mặc dù chậm nhưng luôn hoạt động, và kênh DNS, nhanh hơn nhưng yêu cầu bạn phải kiểm soát miền hoặc miền phụ để phân giải thành địa chỉ IP công cộng.
Khi sử dụng chiết xuất dựa trên thời gian, có ba phương pháp chiết xuất có thể áp dụng: nhị phân, nối tiếp và serial_optimized Phương pháp nhị phân giúp sqlninja thực hiện tìm kiếm hiệu quả, giảm thiểu số lượng yêu cầu Trong khi đó, phương pháp nối tiếp thử tất cả các giá trị có thể, có thể nhanh hơn do WAITFOR chỉ được kích hoạt một lần, nhưng để lại nhiều mục nhập hơn trong nhật ký từ xa Cuối cùng, phương pháp serial_optimized cũng thử tất cả các giá trị nhưng bắt đầu từ những ứng cử viên khả thi nhất, và đây là phương pháp mặc định được sử dụng.
Nếu bạn đang sử dụng phương pháp trích xuất dựa trên thời gian và chọn serial_optimized, bạn có thể chỉ định bản đồ ngôn ngữ Điều này cho phép bạn xác định thứ tự các ký tự sẽ được thử trong quá trình trích xuất dữ liệu.
Theo mặc định, sqlninja lưu trữ tất cả thông tin được trích xuất trong cơ sở dữ liệu SQLite cục bộ, được chỉ định qua dòng lệnh (mặc định là session.db) Điều này cho phép người dùng lưu trữ cục bộ tất cả dữ liệu đã trích xuất và dễ dàng truy xuất lại sau này Do đó, người dùng nên để tùy chọn này ở trạng thái mặc định.
Khi thực hiện trích xuất dữ liệu theo thời gian, độ trễ của mạng có thể ảnh hưởng đến độ chính xác của thông tin được trích xuất.
Sqlninja có khả năng xác minh tính chính xác của thông tin được trích xuất, bao gồm cơ sở dữ liệu, người dùng, bảng và cột, mặc dù chưa có hàng Nếu phát hiện sự cố, Sqlninja sẽ thử trích xuất lại cùng một phần thông tin để đảm bảo độ chính xác.
Lhost là địa chỉ IP hoặc tên máy chủ mà mục tiêu cần liên hệ trong chế độ quét ngược và quét lại Đây chính là máy của bạn, và điều này rất quan trọng trong quá trình thực hiện các kỹ thuật quét mạng.
Nâng cao
Lhost là địa chỉ IP hoặc tên máy chủ mà mục tiêu cần liên hệ trong quá trình quét ngược và quét lại Đây chính là máy của bạn.
26 nếu cuộc tấn công được thực hiện qua Internet, thì đây phải là một địa chỉ công cộng
- device: Thiết bị được sử dụng để dò tìm các gói khi ở chế độ quét ngược (mặc định: eth0)
Để lọc các gói tin đến trong chế độ quét ngược, cần sử dụng biểu thức pcap hợp lệ Mặc định, khi thực hiện cuộc tấn công này, sqlninja sẽ lắng nghe các gói từ địa chỉ IP của máy chủ web từ xa, sau đó chuyển hướng đến máy chủ được chỉ định trong lhost.
Tham số timeout được áp dụng trong chế độ quét ngược, xác định thời gian chờ (mặc định là 5 giây) để nhận các gói tiếp theo sau khi yêu cầu web đã hoàn tất.
- xp_name: Tên của thủ tục mở rộng thực thi các lệnh của chúng tôi Mặc định rõ ràng là xp_cmdshell.
Kịch bản demo
- Do em không tìm được website có chứa lỗi để thực hiện demo (Hình
5) nên em sẽ thực hiện viết kịch bản demo một cách thật nhất dựa vào các tài liệu tham khảo
Hình 5 Test các trang web không chứa lỗi
Thực hiện kiểm thử website
- Website kiểm thử: http://www.craftfooz.co.jp/ShopDetailNew.asp?ShopIDu
Trước khi tiến hành kiểm thử website có chứa lỗi, cần cấu hình file config của SQLninja, thường là file sqlninja.conf Hãy thiết lập cấu hình cho file này với phương thức GET và host tương ứng.
Hình 6 Cấu hình file sqlninja.conf
- Thực hiện kiểm tra website có bị lỗi hay không với câu lệnh test (Hình
7): sqlninja -m test -f ' /home/hung/Desktop/sqlninja.conf '
Hình 7 Thực hiện câu lệnh test
- Ta thu được kết quả như hình 8
Hình 8 Kiểm thử website bằng phương thức test
Demo 2 Thực hiện lấy thông tin bằng câu lệnh fingerprint sqlninja -m fingerprint -f ' /home/hung/Desktop/sqlninja.conf ' (Hình 9):
Hình 9 Thực hiện câu lệnh fingerprint
- Thực hiện lấy Database version với parameter = 0, ta thu được kết quả như hình 10
Hình 10 Thực hiện lấy Database version
- Thực hiện lấy Database user với parameter = 0, ta thu được kết quả như hình 11
Hình 11 Thực hiện lấy thông tin Database user
Thực hiện lấy thông tin bằng câu lệnh fingerprint
Nhận xét, đánh giá
Ngày nay, trong tình hình trong nước và thế giới bị bao trùm bởi dịch bệnh
Trong bối cảnh Covid-19 và sự phát triển mạnh mẽ của Internet cùng thương mại điện tử, nhu cầu bảo mật ngày càng trở nên cấp thiết Công cụ SQLninja nổi bật như một giải pháp hiệu quả trong việc kiểm thử lỗi và tự động hóa quá trình tiếp quản máy chủ DB khi phát hiện lỗ hổng SQL Injection SQLninja được thiết kế đặc biệt để khai thác lỗ hổng SQL Injection trên các ứng dụng web sử dụng Microsoft SQL.
Máy chủ phần mềm hỗ trợ cung cấp quyền truy cập từ xa cho cơ sở dữ liệu, giúp bảo vệ thông tin ngay cả trong môi trường có nguy cơ tấn công cao Mục tiêu chính của nó là đảm bảo an toàn và bảo mật cho dữ liệu, giảm thiểu rủi ro trong các tình huống thù địch.