Dịch vụ sửa máy tính pc laptop máy in - Nạp mực máy in Trường Tín Tphcm
Dịch vụ sửa máy tính pc laptop máy in - Nạp mực máy in Trường Tín Tphcm

Web5: SQL injection – Một số kỹ thuật vượt qua cơ chế lọc

--
Web Tin Học Trường Tín có bài: Web5: SQL injection – Một số kỹ thuật vượt qua cơ chế lọc Trong viết này, Quản Trị Mạng sẽ cùng các bạn tìm hiểu về các cách vượt qua cơ chế lọc trong SQL Injection.

1. Cắt bớt nội dung câu truy vấn

Trong tình huống muốn lờ đi những đoạn script trong câu truy vấn. Ví dụ đối với đoạn xử lý dưới đây, trong câu truy vấn đòi hỏi điều kiện active=1 nhưng chúng ta cũng có thể có thể comment (–, — -, -+, #, /*, /**/, //, ;%00…) và lờ nó đi. Khi khai thác chúng ta thường không biết nội dung còn lại của câu truy vấn làm thuê việc gì nên sử dụng comment trong trường hợp này rất hiệu quả.

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Sau khi comment, truy vấn của chúng ta trở thành:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

2. Bypass việc lọc các từ khóa

a. Inline Comment

Inline comment được sử dụng rất hữu hiệu trong việc bypass lọc các khoảng trắng. Có thể sử dụng các kí tự sau để bypass lọc khoảng trắng: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Ví dụ:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Hay bypass lọc các từ khóa (khả dụng với MySql). Trong tỉ dụ dưới đây, từ khóa union và password nằm trong blacklist nên đã bị chặn, chúng ta có thể bypass bằng cách:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

b. Thay thế các từ khóa

Khi khai thác SQL injection chúng ta thường sử dụng những từ khóa như: union, select, information_schema… Nhiều trường hợp người lập trình chỉ dễ dàng là thay thế những từ khóa đó đi:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Chúng ta đơn giản nhận thấy rằng đoạn mã xử lý trên còn thiếu xót. Nếu đơn thuần chỉ là pattern matching thì cách bypass cực kỳ đơn giản. Chúng ta hãy áp dụng case sensitive, khi đó chữ viết hoa và viết thường được hiểu khác nhau.

Lúc này thay vì sử dụng từ khóa:

   select, union…    

Chúng ta sẽ sử dụng:

   SeLEcT, UniOn…   

Cơ sở của cách bypass này là những hệ quản trị cơ sở dữ liệu không phân biệt hoa thường với những từ khóa.

Trong một số trường hợp, phần mềm web sẽ lọc bỏ toàn bộ hay phần nào từ khóa nào đó (union, select…). Ta sẽ bypass như sau:

   >    

Sau khi union, select bị lọc bỏ bởi phần mềm web, ta sẽ vẫn lại câu truy vấn đúng như sau:

   >    

c. Character encoding

Chúng ta cũng có thể có thể bypass khi WAF (Web Application Firewall) chặn các từ khóa bằng cách encode chúng. Rất nhiều phần mềm WAF sẽ chỉ decode truy vấn một lần và lọc bỏ các từ khóa trong blacklist, khi đó chúng ta hãy encode gấp đôi request như vậy có thể bypass được trong trường hợp này.

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

3. Bypass chặn nháy đơn, nháy kép

– Chúng ta hãy xét một ví dụ trước khi tìm hiểu cụ thể cách bypass này.

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Trong kịch bản này, chúng ta đã hiểu rằng 1 bảng trong cơ sở dữ liệu có tên là users. Công việc tiếp theo là phải hiểu rằng tên cột trong bảng để lấy được thông tin của nó. Như trong câu truy vấn trên, chúng ta sử dụng điều kiện: table_name='users'. Nhưng nếu cả dấu nháy đơn (') và dấu nháy kép (“) đều bị WAF chặn thì chúng ta chẳng thể sử dụng 'users' hay “users” được nữa. Vậy phải giải quyết việc này như làm sao? Trong các hệ cơ sở dữ liệu built sẵn cho chúng ta function giải quyết rất tốt vấn đề này đó là hàm CHAR( ) (đối với Oracle là CHR()). Ví dụ trong câu truy vấn trên chúng ta sẽ bypass bằng cách:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Những lập trình viên php đều đã rất thân thuộc với hàm addslashes(). Hàm addslashes() có tác dụng thêm nữa trước những ký tự đặc biệt như nháy đơn ('), nháy kép (“), backslash (), NUL (null byte) ký tự “” giúp hệ quản trị cơ sở dữ liệu không gặp khó khăn và lầm lẫn khi xử lý chuỗi chứa các ký tự đó. Như vậy, khi chúng ta muốn inject vào câu truy vấn theo như kịch bản: name='someName' or '1'='1'– thì kết quả không còn đúng như chúng ta chờ mong nữa.

Tuy vậy, đã có kỹ thuật giúp bypass hàm addslashes() để inject ký tự nháy đơn ('). Kỹ thuật này đã được public từ khá lâu, và để thi hành kỹ thuật này cũng khá khó khăn vì nó bị ràng buộc với kiểu mã hóa áp dụng cho website.

4. Bypass lỗi “illegal mix of collation for operation UNION”

Trong một số hệ quản trị (thường thấy trong MySql), các database, các table khi đã được set collation thì khi dùng từ khóa UNION sẽ bị báo lỗi “illegal mix of collation for operation UNION”. Việc thiết lập collation (đối chiếu font mã hóa) có thể do chủ định của người thiết kế cơ sở dữ liệu hoặc bởi vì được thiết lập mặc định của MySql. Trong trường hợp dùng union, chúng ta phải đảm bảo điều kiện giá trị select ở từng trường phải có kiểu mã tương ứng đã được định nghĩa. Theo mình đánh giá, lỗi đây là khá phổ biến, đặc biệt đối với các CMS chạy Apache MySql. Mọi người cũng có thể tìm hiểu thêm tại địa chỉ: http://bugs.mysql.com/bug.php?> Trong trường hợp này chúng ta cũng có thể sử dụng các cách convert thành kiểu mã hóa phù hợp.

Ví dụ trong tình huống sau:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Trong câu truy vấn trên, nếu column1 đã được set collation là Unicode-UTF8 hay _latin1 chẳng hạn, thì những gì được select từ column2 sẽ phải được convert thành mã tương ứng. Ta có thể ép kiểu như sau:

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Chúng ta có thấy nhược điểm trong cách bypass đây là chúng ta phải hiểu rằng mã được collation là _latin1. Một cách bypass theo mình là tốt hơn đó là sử dụng hàm mã hóa và giải mã hex và unhex.

Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc

Có nhiều hàm khác có thể được dùng thay cho hex và unhex.

  • Web4: SQL injection – Các bước khai thác
  • Web3: SQL injection – Các hướng khai thác
  • Web2: SQL Injection – Các cách khai thác khác
  • Web1: SQL Injection – Con đường khai thác thông dụng nhất

sql injection,khai thác sql injection,khai thác user input,tấn công sql injection

Nội dung Web5: SQL injection – Một số kỹ thuật vượt qua cơ chế lọc được tổng hợp sưu tầm biên tập bởi: Tin Học Trường Tín. Mọi ý kiến vui lòng gửi Liên Hệ cho truongtin.top để điều chỉnh. truongtin.top tks.

Bài Viết Liên Quan


Xếp Hạng post

Bài Viết Khác

--