- Nếu bạn thích có một giao diện đồ họa để xem cơ sở dữ liệu và các bảng của nó, bạn có thể sử dụng công cụ mysql-workbench, được cài đặt trên máy tính "database":mysql-workbench & - Lưu
Db-access
Nhiệm vụ 1: Bài kiểm tra trước khi bắt đầu lab
- Bài lab này có một bài kiểm tra được phát triển để giúp bạn hiểu cách chính sách nên được áp dụng trước khi thực hiện lab Chạy lệnh sau trên terminal từ đó bạn bắt đầu lab. quiz -l db-access
Hình 1.1: Hoàn thành các qiuz của bài lab
Nhiệm vụ 2: Khám phá
- Truy cập cơ sở dữ liệu từ các thành phần và người dùng khác nhau và lưu ý là tất cả người dùng có quyền truy cập đầy đủ vào cơ sở dữ liệu
Ví dụ, từ máy tính “finance”, sử dụng lệnh: mysql -h database -u nancy -ppass4nancy
Hình 1.2: truy cập vào database với tài khoản nancy
- để bắt đầu một phiên MySQL với tên người dùng Nancy.
- Trên máy tính "database", bắt đầu một phiên MySQL với vai trò là admin để khám phá và đặt quyền truy cập cho người dùng: mysql -u admin -padmin
Hình 1.3: Truy cập vào database với tài khoản admin
- Nếu bạn thích có một giao diện đồ họa để xem cơ sở dữ liệu và các bảng của nó, bạn có thể sử dụng công cụ mysql-workbench, được cài đặt trên máy tính "database": mysql-workbench &
- Lưu ý rằng ngay cả khi bạn sử dụng giao diện đồ họa trên máy tính cơ sở dữ liệu, bạn vẫn sẽ được yêu cầu chạy các lệnh mysql trên các máy tính khác.
Nhiệm vụ 3: Kiểm soát quyền truy cập vào cơ sở dữ liệu
- Là người quản trị cơ sở dữ liệu (DBA), bạn phải cấu hình cơ sở dữ liệu để áp dụng chính sách bảo mật thông tin đã được nêu trong phần Tổng quan, và cung cấp quyền truy cập dữ liệu cho người dùng như được nêu trong phần "Chỉ thị quản lý khác". o Sử dụng các lệnh SQL như REVOKE và GRANT để thay đổi quyền người dùng theo chính sách bảo mật Đừng quên sử dụng lệnh FLUSH PRIVILEGES để áp dụng các thay đổi của bạn. o Hãy nhớ rằng tất cả người dùng đều yêu cầu truy cập để xem thông tin liên quan đến nhân viên bao gồm tên, email, số điện thoại, phòng ban, employee_id và manager_id.
- LƯU Ý: Bên trong mỗi máy trạm, có một tệp .sql Những tệp tin này được sử dụng cho mục đích kiểm tra công việc KHÔNG
CHỈNH SỬA những tệp tin này.
Hình 1.4: Kiểm tra quyền hạng sẵn có của user steven@executive ta thấy anh ấy có đầy đủ quyền cho toàn bộ database và tables có trong cơ sở dữ liệu
Hình 1.5: Thực hiện gỡ mọi đặc quyền của user steven@executive
Hình 1.6: Kiểm tra checkwork ta thấy steven cần một số quyền
Hình 1.7: Thực hiện cấp các quyền steven@executive cần thiết
Hình 1.8: Quá trình cấp quyền đã được update thành công bên steven@executive
Hình 1.9: Kiểm tra lại checkwork cho thấy các yêu cầu quyền cho steven@executive đã đáp ứng đủ
- Thực hiện tương tự với các user còn lại.
Hình 1.10: Cấp quyền cho user susan@hr
Hình 1.11: Cấp quyền cho user nancy@finance
Hình 1.12: Cấp quyền cho user david@it
Kết quả đạt được
Ldap
Nhiệm vụ 1: Tìm hiểu
- Trên máy chủ LDAP, hiển thị nội dung thư mục LDAP bằng cách sử dụng lệnh: ldapsearch -x | less và quan sát các mục trong thư mục Lưu ý mục cho
Hình 2.1: Nội dung hai mục “mike” và “projx”
- Bắt đầu Wireshark trên thành phần LDAP để có thể quan sát giao thức. wireshark &
- Chọn thiết bị eth0 Từ máy tính "client", kết nối SSH đến server1 với người dùng "mike": ssh mike@server1
- Mật khẩu ban đầu cho "mike" là "password123" Hệ thống sẽ yêu cầu thay đổi mật khẩu này, sau đó cần kết nối SSH lại vào server1 Thay đổi mật khẩu thành một mật khẩu bất kỳ Sử dụng SSH một lần nữa để đăng nhập vào server1 với vai trò là mike, cung cấp mật khẩu mới Sử dụng lệnh id để xem ID người dùng và nhóm của mình Sau đó, xem tệp /etc/passwd Bạn có thấy các mục cho người dùng hoặc nhóm của mình không?
Hình 2.3: Kết nối từ máy client đến server1 với tên mike, đồng thời đổi mật khẩu thành password456 thành công
Hình 2.4: Thấy mục chứa uid của mike trong /etc/passwd
- Chuyển đến cửa sổ Wireshark và dừng việc bắt gói tin (ví dụ: nút dừng màu đỏ) Nhập bộ lọc hiển thị là "ldap" vào ô gần đầu "Áp dụng bộ lọc hiển thị " Xem lại lưu lượng LDAP Các thành phần nào đang trao đổi gói tin? Tìm gói tin đã thay đổi mật khẩu của mike và sử dụng File / Export Specified Packets để lưu gói tin đó vào tệp có tên password.pcapng.
Hình 2.5: Packet chứa mã hash mật khẩu thay đổi
3 Nhiệm vụ 3: Sử dụng tài khoản mike để truy cập máy chủ còn lại
- Thoát khỏi phiên SSH đến server1 bằng cách nhập lệnh "exit" Sau đó, SSH đến server2 bằng cách nhập lệnh "ssh mike@server2" Mật khẩu bạn mong đợi sử dụng để xác thực đến server2 là mật khẩu mới mà bạn đã thay đổi trên server1.
- Sau khi đăng nhập vào server2, thoát khỏi phiên SSH đó bằng cách nhập lệnh "exit".
Hình 2.7: Thực hiện đăng nhập thành công server2 bằng password456
4 Nhiệm vụ 4: Thêm một người dùng LDAP
- Chuyển đến cửa sổ terminal ảo LDAP và sử dụng lệnh ls để xem danh sách thư mục Xem tệp có tên mike.ldif, tệp này được sử dụng để định nghĩa người dùng có tên "mike" Sau đó, xem tệp projx.ldif Lệnh LDAP được sử dụng để thêm mục đã định nghĩa trong tệp mike.ldif là: ldapadd -x -W -D "cnmin,dc=example,dc=com" -f mike.ldif
- Lưu ý cách tùy chọn -D chỉ định tên quản trị viên thực hiện thêm vào LDAP Sử dụng lệnh `man ldapadd` để tìm hiểu thêm về cú pháp của lệnh này Mật khẩu ban đầu cho người dùng mike được tạo bằng lệnh sau: ldappasswd -s password123 -W -D "cnmin,dc=example,dc=com" -x "uid=mike,ou=users,dc=example,dc=com"
- Tạo các tệp ldif để định nghĩa một nhóm mới có tên "qa" và một người nhóm mới và người dùng mới Sử dụng lệnh ldappasswd để gán mật khẩu ban đầu cho mary Một lần nữa, mật khẩu cho quản trị viên LDAP là "adminpass".
- Sau đó, chuyển đến máy khách và kiểm tra khả năng để SSH với vai trò là mary đến cả server1 và server2.
Hình 2.8: Cấu hình file mary.ldif
Hình 2.9: Cấu hình group qa trong file projx_mary.ldif
Hình 2.10: Thêm user mary và group qa vào ldap
Hình 2.11: Đổi mật khẩu thành công mary thành password123
Hình 2.12: Thành công trong việc kết nối tới server1 bằng user mary với mật khẩu password123 và đổi mật khẩu thành password 456
Hình 2.13: Thành công truy cập vào server2 bằng user mary với mật khẩu password456
5 Nhiệm vụ 5: Mã hóa dữ liệu truyền LDAP
- Quay trở lại cửa sổ Wireshark và thiết lập bộ lọc hiển thị gói tin là ldap.bindRequest_element Khám phá các thành phần giao thức của một yêu cầu bind sử dụng Wireshark Có thấy điều gì đáng lo ngại không? Mật khẩu người dùng được truyền đi dưới dạng văn bản thuần!
Hình 2.14: Phát hiện mật khẩu ldap bị lộ
- Khởi động lại việc bắt gói tin trong Wireshark, tức là nhấn vào nút hình cá mập bên trái và xóa bộ lọc.
- Máy chủ LDAP có một chứng chỉ PKI tự ký và đã được cấu hình để chấp nhận lưu lượng SSL được mã hóa cũng như lưu lượng không được mã hóa mà bạn đã quan sát Ban đầu, chúng ta không mã hóa lưu lượng để có thể xem giao thức Bây giờ, ta sẽ cấu hình các máy khách LDAP (tức là hai máy chủ) để giao tiếp với LDAP thông qua SSL.
- Cơ chế để yêu cầu một máy khách LDAP sử dụng SSL (hoặc TLS) khác nhau tùy thuộc vào sản phẩm LDAP và phiên bản Linux Đối với các máy chủ Ubuntu này, thực hiện các bước sau:
- Chỉnh sửa tệp /etc/ldap.conf và thay đổi dòng sau: uri ldap://ldap thành uri ldaps://ldap và xóa dấu chú thích khỏi dòng:
- #ssl on sẽ trở thành: ssl on
- Sau đó, chỉnh sửa tệp /etc/ldap/ldap.conf (lưu ý thư mục khác biệt!) và thêm dòng này vào cuối tệp:
- Sau đó, đăng nhập vào một trong hai máy chủ từ máy khách và quan sát lưu lượng LDAP trong Wireshark.
Hình 2.15: Cấu hình file ldap.conf
Hình 2.16: Khi kết nối từ client tới server1 không còn phát hiện bất kì mật khẩu bị lộ nào
Nhiệm vụ 3: Sử dụng tài khoản mike để truy cập máy chủ còn lại
- Thoát khỏi phiên SSH đến server1 bằng cách nhập lệnh "exit" Sau đó, SSH đến server2 bằng cách nhập lệnh "ssh mike@server2" Mật khẩu bạn mong đợi sử dụng để xác thực đến server2 là mật khẩu mới mà bạn đã thay đổi trên server1.
- Sau khi đăng nhập vào server2, thoát khỏi phiên SSH đó bằng cách nhập lệnh "exit".
Hình 2.7: Thực hiện đăng nhập thành công server2 bằng password456
Nhiệm vụ 4: Thêm một người dùng LDAP
- Chuyển đến cửa sổ terminal ảo LDAP và sử dụng lệnh ls để xem danh sách thư mục Xem tệp có tên mike.ldif, tệp này được sử dụng để định nghĩa người dùng có tên "mike" Sau đó, xem tệp projx.ldif Lệnh LDAP được sử dụng để thêm mục đã định nghĩa trong tệp mike.ldif là: ldapadd -x -W -D "cnmin,dc=example,dc=com" -f mike.ldif
- Lưu ý cách tùy chọn -D chỉ định tên quản trị viên thực hiện thêm vào LDAP Sử dụng lệnh `man ldapadd` để tìm hiểu thêm về cú pháp của lệnh này Mật khẩu ban đầu cho người dùng mike được tạo bằng lệnh sau: ldappasswd -s password123 -W -D "cnmin,dc=example,dc=com" -x "uid=mike,ou=users,dc=example,dc=com"
- Tạo các tệp ldif để định nghĩa một nhóm mới có tên "qa" và một người nhóm mới và người dùng mới Sử dụng lệnh ldappasswd để gán mật khẩu ban đầu cho mary Một lần nữa, mật khẩu cho quản trị viên LDAP là "adminpass".
- Sau đó, chuyển đến máy khách và kiểm tra khả năng để SSH với vai trò là mary đến cả server1 và server2.
Hình 2.8: Cấu hình file mary.ldif
Hình 2.9: Cấu hình group qa trong file projx_mary.ldif
Hình 2.10: Thêm user mary và group qa vào ldap
Hình 2.11: Đổi mật khẩu thành công mary thành password123
Hình 2.12: Thành công trong việc kết nối tới server1 bằng user mary với mật khẩu password123 và đổi mật khẩu thành password 456
Hình 2.13: Thành công truy cập vào server2 bằng user mary với mật khẩu password456
Nhiệm vụ 5: Mã hóa dữ liệu truyền LDAP
- Quay trở lại cửa sổ Wireshark và thiết lập bộ lọc hiển thị gói tin là ldap.bindRequest_element Khám phá các thành phần giao thức của một yêu cầu bind sử dụng Wireshark Có thấy điều gì đáng lo ngại không? Mật khẩu người dùng được truyền đi dưới dạng văn bản thuần!
Hình 2.14: Phát hiện mật khẩu ldap bị lộ
- Khởi động lại việc bắt gói tin trong Wireshark, tức là nhấn vào nút hình cá mập bên trái và xóa bộ lọc.
- Máy chủ LDAP có một chứng chỉ PKI tự ký và đã được cấu hình để chấp nhận lưu lượng SSL được mã hóa cũng như lưu lượng không được mã hóa mà bạn đã quan sát Ban đầu, chúng ta không mã hóa lưu lượng để có thể xem giao thức Bây giờ, ta sẽ cấu hình các máy khách LDAP (tức là hai máy chủ) để giao tiếp với LDAP thông qua SSL.
- Cơ chế để yêu cầu một máy khách LDAP sử dụng SSL (hoặc TLS) khác nhau tùy thuộc vào sản phẩm LDAP và phiên bản Linux Đối với các máy chủ Ubuntu này, thực hiện các bước sau:
- Chỉnh sửa tệp /etc/ldap.conf và thay đổi dòng sau: uri ldap://ldap thành uri ldaps://ldap và xóa dấu chú thích khỏi dòng:
- #ssl on sẽ trở thành: ssl on
- Sau đó, chỉnh sửa tệp /etc/ldap/ldap.conf (lưu ý thư mục khác biệt!) và thêm dòng này vào cuối tệp:
- Sau đó, đăng nhập vào một trong hai máy chủ từ máy khách và quan sát lưu lượng LDAP trong Wireshark.
Hình 2.15: Cấu hình file ldap.conf
Hình 2.16: Khi kết nối từ client tới server1 không còn phát hiện bất kì mật khẩu bị lộ nào
Kết quả đạt được
Web-inject
Nhiệm vụ 1: Xác nhận kết nối giữa máy trạm của sinh viên và máy chủ web
- Sử dụng lệnh ping từ máy sinh viên để xác nhận kết nối: ping 192.168.99.100
Hình 3.1: Kết nối thành công tới máy chủ
Nhiệm vụ 2: Mở FireFox và truy cập vào webserver
- Tại cửa sổ student gõ lệnh sau firefox &
- Sau đó trình duyệt firefox sẽ được mở Truy cập đường dẫn: http://192.168.99.100:3000
Hình 3.2: Truy cập thành công trang web juice shop
Nhiệm vụ 3: Khởi động và cấu hình OWASP ZAP
- Ở cửa sổ dòng lệnh trên máy trạm của sinh viên, nhập: owasp-zap &
- Lưu ý: Nếu Firefox đang chạy trên cửa sổ dòng lệnh và không có dấu
"&" được bao gồm, thì Firefox sẽ không chạy trong nền Đóng Firefox và mở lại bằng cách sử dụng "Firefox &" trên cửa sổ dòng lệnh.
- Ứng dụng OWASP ZAP sẽ mở và yêu cầu người dùng nhập thông tin. o Nhập vào ứng dụng OWASP ZAP: chọn "yes, I want to persist this session with the name based on the current timestamp" sau đó nhấp vào start. o Nếu được yêu cầu "Manage Add-on", hãy nhấp vào close.
Hình 3.3: Cài đặt thành công OWSAP ZAP
Nhiệm vụ 4: Cấu hình FireFox proxy để sử dụng OWASP ZAP
- Mục tiêu của nhiệm vụ này là cài đặt OWASP ZAP để hoạt động và cho phép bắt gói tin từ máy tính sinh viên trên trình duyệt web-xss Trong phần thiết lập của Firefox, cấu hình theo các bước sau đây: o Trên Firefox của máy tính sinh viên, mở "Preferences". o Trong cửa sổ tìm kiếm, gõ "proxy". o Trong Cài đặt proxy mạng, chọn "Cài đặt". o Cũng chọn "Sử dụng máy chủ proxy này cho tất cả các giao thức". o Nhấp vào "ok" để chấp nhận các cài đặt.
- Cài đặt trên đảm bảo Firefox sử dụng OWASP Zap làm proxy Thực hiện các bước sau để đảm bảo Firefox đang kết nối và sử dụng ZAP như là proxy: o Làm mới trang web "192.168.99.100:3000". o Một cảnh báo bảo mật với thông báo "Kết nối của bạn không an toàn" sẽ được hiển thị. o Phải chấp nhận thông báo cảnh báo này Để làm điều đó, nhấp vào "Advanced". o Nó sẽ hiển thị chứng chỉ SSL và nên hiển thị
"SEC_ERROR_UNKOWN ISSUE" Bấm "Add Exception" để sử dụng chứng chỉ này. o Một cửa sổ xác nhận sẽ hiện ra, xác nhận ngoại lệ bằng cách nhấp vào "Confirm Security Exception".
Hình 3.5: Tình trạng web juice shop sau khi cài đặt proxy
Nhiệm vụ 5: Injection sử dụng HTTP PUT
- Mục tiêu của phần này là thực hiện một lỗ hổng injection đơn giản bằng cách sử dụng yêu cầu HTTP PUT Theo OWASP, hầu hết mọi nguồn dữ liệu đều có thể là một vector injection, bao gồm biến môi trường, tham số, các dịch vụ web bên ngoài và bên trong, và tất cả các loại người dùng Các lỗ hổng injection xảy ra khi kẻ tấn công có thể gửi dữ liệu độc hại tới một trình thông dịch Các lỗ hổng injection bao gồm nhưng không giới hạn trong các truy vấn SQL, LDAP, XPath hoặc NoSQL, các lệnh hệ điều hành, phân tích cú pháp XML, tiêu đề SMTP, các ngôn ngữ biểu thức và các truy vấn ORM Trong nhiệm vụ này, một yêu cầu PUT đơn giản sẽ được sử dụng để cập nhật dữ liệu trên một sản phẩm mà không cần truy cập vào giao diện trước của máy chủ web Nhiệm vụ này sẽ sử dụng curl Làm theo các bước để xác định sản phẩm và thử khai thác máy chủ bằng yêu cầu PUT Mục tiêu của nhiệm vụ này là để xem học viên có thể sửa đổi hoặc cập nhật sản phẩm hay không. o Tìm kiếm một sản phẩm, người dùng nên thấy rằng URL không thay đổi giữa các sản phẩm khác nhau Người dùng có thể xem tất cả chi tiết sản phẩm bằng cách điều hướng đến URL sau: https://192.168.99.100:3000/api/Products
Hình 3.6: Kết quả trang web /api/Products o Điều này cung cấp cho học viên một danh sách các ID sản phẩm và sẽ được sử dụng để sửa đổi dữ liệu trong các bước tiếp theo Chú ý đến "Nước cam" là ID sản phẩm 2 và chú ý đến mô tả. o Từ terminal trên máy tính của học viên, học viên sẽ sử dụng curl để xem các tùy chọn cho một sản phẩm cụ thể Nhập lệnh sau tại terminal: curl -X OPTIONS -D - http://192.168.99.100:3000/api/Products/2
Hình 3.7: Kết quả lệnh curl -x OPTIONS o Chú ý đến Access-Control-Methods, nếu học viên không chắc về các loại khác nhau thì cần phải xem lại các yêu cầu HTTP Việc chấp nhận PUT nên có nghĩa là chúng ta có thể đẩy các bản cập nhật thông qua terminal. o Từ terminal trên máy tính của học viên, nhập lệnh sau: curl -X PUT "http://192.168.99.100:3000/api/Products/2" -H "Content- Type: application/json" data-binary '{"description":"TEST"}'
Hình 3.8: Cập nhật thành công sản phẩm id: 2 o Kiểm tra trang Sản phẩm để xem liệu mô tả đã được cập nhật hay chưa URL sản phẩm là: https://192.168.99.100:3000/api/Products/
Hình 3.9: giá trị description ở id 2 đã thay đổi thành công thành “TEST” o Sửa lệnh curl PUT để thay đổi giá của sản phẩm có ID 8, đảm bảo rằng thay đổi giá được phản ánh trên trang web và đảm bảo rằng giá phù hợp ngay cả khi bạn thêm sản phẩm vào giỏ hàng.
Nhiệm vụ 6: Lỗ hổng Injection sử dụng đăng nhập người dùng (SQL
- Theo OWASP WSTG-INPV-05, kiểm thử SQL injection kiểm tra xem liệu có thể chèn dữ liệu vào ứng dụng để nó thực thi truy vấn SQL do người dùng điều khiển trong cơ sở dữ liệu hay không Các nhà kiểm thử tìm thấy một lỗ hổng SQL injection nếu ứng dụng sử dụng đầu vào của người dùng để tạo ra truy vấn SQL mà không có kiểm tra đầu vào đúng đắn Việc khai thác thành công lớp lỗ hổng này cho phép một người dùng trái phép truy cập hoặc thao tác dữ liệu trong cơ sở dữ liệu.
- Một cuộc tấn công SQL injection bao gồm việc chèn hoặc "tiêm" một truy vấn SQL một phần hoặc đầy đủ thông qua đầu vào dữ liệu hoặc được truyền từ máy khách (trình duyệt) đến ứng dụng web Một cuộc tấn công SQL injection thành công có thể đọc dữ liệu nhạy cảm từ cơ sở dữ liệu, thay đổi dữ liệu cơ sở dữ liệu (chèn / cập nhật / xóa), thực hiện các hoạt động quản trị trên cơ sở dữ liệu (như tắt DBMS), khôi phục nội dung của một tệp được cho trên hệ thống tệp của DBMS hoặc ghi tệp vào hệ thống tệp, và trong một số trường hợp, phát ra các lệnh đến hệ điều hành Các cuộc tấn công SQL injection là một loại cuộc tấn công injection, trong đó các lệnh SQL được tiêm vào đầu vào mặt phẳng dữ liệu để ảnh hưởng đến việc thực thi các lệnh SQL đã được xác định trước.
- OWASP cung cấp các bước để thực hiện kiểm thử SQL injection thông qua một số cuộc tấn công dựa trên injection Bước đầu tiên là thực hiện một cuộc tấn công SQL injection cổ điển hoặc tiêu chuẩn, sẽ được hoàn thành trong ví dụ 1 OWASP cũng giải thích rằng bạn cũng có thể bắt và tiêm các phiên bản được sửa đổi trong quá trình truyền, sẽ được xem xét trong ví dụ 2 Trong ví dụ cuối cùng, người học sẽ kết hợp những gì họ đã học được trong hai ví dụ đầu tiên và sẽ thực hiện các cuộc tấn công injection để vượt qua xác thực người dùng, điều này sẽ được xem xét trong ví dụ 3.
- Ví dụ 1 - SQL Injection cổ điển o SQL injection đơn giản sẽ là thử sử dụng lệnh dưới đây trong phần đăng nhập người dùng để xem kết quả trả về Không phải tất cả các lựa chọn dưới đây đều sẽ đưa ra kết quả; thường thì một phương pháp có thể hoạt động trong khi các phương pháp khác có thể không Lệnh là một dấu nháy đơn và hai dấu gạch ngang như sau.’ o Mã trên có thể cho ra một số thông tin o Loại tiêm mã SQL cơ bản tiếp theo sẽ sử dụng một chuỗi kết hợp Hãy thử đăng nhập với lệnh sau đây trong email và bất kỳ mật khẩu nào: 'or 1=1 o a' cho phép đăng nhập bằng tài khoản quản trị, sử dụng danh sách người dùng dưới đây, liệu có thể đăng nhập vào bất kỳ tài khoản khác nào chỉ bằng việc sử dụng chữ cái đầu tiên của họ và lệnh 1=1 không? o Các phần trên tập trung vào người dùng, hãy xem liệu trang sản phẩm hoặc trang tìm kiếm có dễ bị lỗi hay không Trang web sẽ tập trung vào URL sau đây: http://192.168.99.100:3000/#/search?q o q= cho phép chúng ta thao tác với dữ liệu Hãy thử thêm 1=1 sau dấu bằng, điều này có làm gì không? Trong các phiên bản SQL cũ hơn, điều này có thể trả về một lỗi, nhưng trang web này mới đủ, vì vậy nó làm được.
Hình 3.10: Không ra kết quả gì khi add 1=1 sau dấu bằng o Hãy thử sửa đổi tìm kiếm của bạn để sử dụng các ký tự sau hoặc kết hợp các ký tự sau: ' ) ( - = " o Dưới đây là hai URL khác nhau, so sánh hai URL và xem có sự khác biệt gì không http://192.168.99.100:3000/#/search?q=’)) http://192.168.99.100:3000/#/search
Hình 3.11: Có thể thấy trang web dùng q=‘)) không hiện ra kết quả nào
- Ví dụ 2 - Sửa đổi yêu cầu POST để tạo một tài khoản quản trị viên o Thực hiện các bước sau để chụp và sửa đổi yêu cầu POST khi tạo một người dùng mới. o Mở OWASP-ZAP và tạo một người dùng mới Đăng nhập với tài khoản người dùng mới. o Điều này sẽ đưa người học đến trang "Đăng ký người dùng" Điền thông tin sau đây: o Email: test@noemail.com o Password: Password#1 o Repeat Password: Password#1 o Security Question: Name of your favorite Pet? o Answer: Dogs
Hình 3.12: Thực hiện tạo tài khoản mới o Tìm request HTTP trong tab History được gọi là:
"http://192.168.99.100:3000/rest/user/whoami" Sao chép trường Authorization vào clipboard. o Tại phần Sites, điều hướng đến http://192.168.99.100:3000 -> user -> POST:Login Nhấp chuột phải, chọn Open/Resend with Request Editor. o Sửa đổi yêu cầu thành GET http://192.168.99.100:3000/api/Users/ Xóa trường Cookie và dán trường Tựa đề ủy quyền, mà cũng bao gồm một cookie mới. Thay đổi email thành một email mới duy nhất và nhấn Gửi Phản hồi sẽ liệt kê toàn bộ tài khoản người dùng Lưu ý: Bạn có thể đơn giản là làm một POST thay vì GET nếu bạn không muốn có danh sách tài khoản người dùng Làm điều này sẽ thêm tài khoản không phải quản trị viên mới vào hệ thống. o Cuối cùng, thêm các trường sau vào phần thân: "role":"admin" Người dùng sẽ được thêm, nhưng không có đảm bảo rằng trường "role" tồn tại hoặc rằng người dùng mới là một quản trị viên đầy đủ Nếu bạn nhận được lỗi người dùng không duy nhất, hãy thay đổi yêu cầu thành địa chỉ email mới.
- Ví dụ 3 - SQL Injection để bypass xác thực người dùng o Chỉ cần thêm một "' " vào cuối bất kỳ người dùng nào, điều này cho phép đăng nhập bằng bất kỳ mật khẩu nào. o Hãy thử đăng nhập với jim@juice.org' và sử dụng bất cứ điều gì cho mật khẩu. o Những người dùng khác nào dễ bị mắc kẹt trong việc bypass xác thực này? Sử dụng danh sách người dùng dưới đây và xem xét xem những người dùng nào sẽ cho phép kỹ thuật này hoạt động.
Nhiệm vụ 7: Web Injection giả mạo
- Ví dụ 1 - Phản hồi giả mạo o Trong trình duyệt Firefox, truy cập vào Customer feedback, nếu cần, đăng nhập với tên người dùng jim để xem trang này. o Trong trình duyệt Firefox, trong phần bình luận, để lại một bình luận Lưu ý tác giả Để lại một đánh giá và nhập kết quả
CAPTCHA, Nhưng không click Submit. o Trong OWASP ZAP, đảm bảo rằng bạn đã thiết lập các điểm dừng và bật chúng. o Trong trình duyệt Firefox, nhấp vào nút Submit. o Trong OWASP ZAP, bạn sẽ thấy rằng gửi đã bị chặn lại Trong phần thân của tin nhắn, bạn nên thấy một dòng giống như sau đây:
{"UserID:1, captchaId:1, captcha:30, comment: "comment entered (.org)", rating:4}
- Giải thích nội dung trên: o UserID: 1 - đây là ID người dùng đang đăng bình luận o captchaId: 1 - đây là câu hỏi captcha o captcha: 30 - đây là câu trả lời captcha o comment: "comment entered (.org)" - đây là bình luận được để lại o "rating": 4 - đây là điểm đánh giá được để lại o Sửa đổi User ID thành số 1 và cho phép tin nhắn đi qua. o Kiểm tra phản hồi và xem đường dẫn sau để xem liệu người dùng đó là người dùng mà bạn đăng nhập hay là Jim hoặc Admin đã đăng phản hồi URL là: http://192.168.99.100:3000/#/ administration
- Ví dụ 2 - Cập nhật nhiều đánh giá sản phẩm cùng lúc o Đăng nhập với bất kỳ người dùng nào để lấy Authorization từ o Gửi yêu cầu PATCH đến http://192.168.99.100:3000/rest/products/reviews với các tham số sau: o Trong phần thân:
{ "id": { "$ne": -1 }, "message": "NoSQL Injection!" } o Trong phần Tiêu đề - Phần Loại nội dung: application/json o Trong phần Tiêu đề - Phần Ủy quyền:
Bearer ? o Dấu ? sẽ là mã Authorization đã được lấy ở bước đầu tiên o Kiểm tra các hộp thoại chi tiết sản phẩm khác nhau để đảm bảo rằng tất cả các đánh giá đều có "NoSQL Injection" o Sửa đổi nhiệm vụ này và chèn một tin nhắn mới, xác minh nó hoạt động.
Nhiệm vụ 8: Chèn mã vào trang web
- Mục đích của nhiệm vụ này là để xem liệu chúng ta có thể yêu cầu trang web hoàn tiền cho chúng ta bằng cách chỉnh sửa đơn đặt hàng POST đơn giản.
- Ví dụ 1 - Đặt một đơn hàng o Hãy thử chèn mã sẽ buộc trang web hoàn tiền cho chúng ta khi đặt một đơn hàng. o Chuyển đến trang tìm kiếm sản phẩm trong khi có phần
"Inspector" của Firefox. o Thêm một mặt hàng vào giỏ hàng trống (giỏ hàng phải trống do việc thêm một mặt hàng vào giỏ hàng trống khác với việc thêm một mặt hàng vào giỏ hàng đã có các mặt hàng khác có mặt). o Trong OWASP Zap, bạn nên có thể xem lịch sử và bạn nên có thể xác định một yêu cầu POST đến URL sau: http://192.168.99.100:3000/api/BasketItems/1 o Chú ý quan trọng là số 1 là ID người dùng, vì vậy nó có thể khác với bạn o Bộ tải đơn hàng trông giống như sau:
{"ProductId":1,"BasketId":"1","quantity":1} o ProductId là sản phẩm trong giỏ hàng, BasketId là Id người dùng hiện tại, và quantity là số lượng sản phẩm. o Chúng ta có thể thay đổi đơn đặt hàng và gửi lại yêu cầu đến trang web Chọn một sản phẩm khác và trong phần số lượng, liệt kê một số âm Gửi lại yêu cầu và trang web sẽ chấp nhận đơn đặt hàng và chúng ta sẽ nhận được hoàn tiền.