Search…

Hướng Dẫn Trích Xuất Dữ Liệu Bằng ModSecurity

29/09/20202 min read
Hướng dẫn trích xuất dữ liệu thông qua ModSecurity.

Kiểm tra ModSecurity trên hệ thống

Để kiểm tra ModSecurity đã cài đặt thành công hay chưa, tạo một trang web (với phương thức GET) nhập input (là một đoạn text) sau đó gửi lên server một đoạn dữ liệu (thường là XSS hoặc SQL Injection). Ví dụ như nhập vào 1 đoạn SQL Injection:

1' or '1' == '1'

Khi nhấn submit gửi lên server, ModSecurity sẽ chặn lại và phân tích dữ liệu gửi lên. Do đoạn dữ liệu phía trên là một kiểu tấn công SQL Injection nên ModSecurity sẽ phát hiện và ngăn chặn. Phía bên màn hình của client sẽ xuất hiện thông báo request bị chặn lại (tùy vào rule của ModSecurity mà thông báo hiện lên sẽ khác nhau).

Hướng dẫn cách trích xuất dữ liệu từ ModSecurity

Lý do cài đặt ModSecurity từ source code tải về nhằm có thể chỉnh sửa mã nguồn của ModSecurity, qua đó có thể thêm các tính năng mong muốn ( như ở bài này là trích xuất dữ liệu khi client gửi lên server ) với phương thức GET.

Trong file source code ModSecurity 2.8 tải về từ trang chủ, mở file mod_security2.c theo đường dẫn apache2/mod_security2.c. Sau đó tìm đến hàm create_tx_context. Đó là hàm xử lý request của client gửi lên server bằng phương thức GET. Trang web thử nghiệm ở đây rất đơn giản, bao gồm 2 input do client nhập vào và nút submit để gửi lên server:

Khi client nhập vào đoạn dữ liệu và gửi lên server, dữ liệu (input user và pass) sẽ nằm trong một biến dữ liệu có tên là r->query_string. Ví dụ khi nhập vào user và pass lần lượt là haidang và 12345 thì biến r->query_string sẽ có giá trị là user=haidang&pass=12345&submit=Dang+nhap ,  ở  bài viết này sẽ lấy dữ liệu của input user gửi lên server và ghi thành file để lưu vào hệ thống.

Đầu tiên, add 2 thư viện stdio.h và stdlib.h vào. Sau đó ở cuối hàm create_tx_context, thêm đoạn code sau để lấy dữ liệu input user từ client gửi lên server:

FILE * pfile = fopen("/tmp/data_user.txt", "a");

if(msr->query_string != NULL)
{
	int i = 5;
	for(i; msr->query_string[i] != '&'; i++)
	{
		fputc(msr->query_string[i], pfile);
	}
	fputc('\n', pfile);
}

Ở đoạn code này, khi client gửi lên server, giá trị của input user sẽ được lưu lại ở file data_user.txt trong thư mục tmp nằm trong thư mục của hệ thống Ubuntu.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024