# WEB APPLICATION SECURITY WALKTHROUGH
---
###### tags: `TryHackMe` `Walkthrough`
## Giới thiệu
- Mỗi chúng ta đểu sử dụng các chương trình khác nhau trên máy tính. Nói chung, khi các chương trình chạy trên máy tính, chúng sẽ sử dụng bộ nhớ và bộ xử lý và để sử dụng một chương trình, chúng ta cần phải cài đặt nó. Nhưng hiện tại ta có những chương trình có thể chạy mà không cần phải cài đặt, đó chính là các ứng dụng web
- Ứng dụng web(web application) giống một "chương trình" nhưng ta không cần phải cài đặt chúng để sử dụng, miễn là ta có một trình duyệt web(web browser). Từ đó, thay vì phải cài đặt từng chương trình bạn cần, bạn chỉ cần duyệt qua các trang liên quan. Ví dụ về các ứng dụng web như: shopee, gmail, ...
- Ý tưởng xuất hiện ứng dụng web sẽ bắt nguồn từ việc một chương trình chạy từ một máy chủ từ xa. Máy chủ này sẽ chạy liên tục để phục vụ các khách hàng hay người dùng web. Web sẽ cung cấp các chức năng để người dùng có thể tương tác và khi người dùng tước tác máy chủ sẽ gửi chạy một loại chương trình cụ thể mà trình duyệt web có thể truy cập được.
- Vì vậy, trong quá trình thực hiện các chức năng, rất có khả năng hacker có thể tiến hành tấn công để khai thác thông tin của khách hàng từ cơ sở dữ liệu hay ăn cắp cookie,... Việc phát hiện lỗi và bảo mật lỗi cho trang web là việc cần thiết để đảm bảo tránh tổn thất cho công ty và cho khách hàng.
## Những lỗ hổng cơ bản trong bảo mật web
- Đa số những lỗ hổng đều được khai thác từ các chức năng mà trang web đưa cho người dùng, ví dụ như: đăng nhập, đăng ký, quên mật khẩu, tìm kiếm sản phẩm, thanh toán,... Ta sẽ đến với những lỗ hổng phổ biến nhất của bảo mật web.
### Lỗi Nhận dạng Và Xác thực (Identification and Authentication Failure)
- Nhận dạng đề cập đến khả năng xác định người dùng duy nhất. Ngược lại, xác thực đề cập đến khả năng chứng minh rằng người dùng chính là người dùng thực sự.
- Trang web phải yêu cầu xác thực và xác nhận danh tính trước khi có thể tiến vào trang web. Tuy nhiên, bước nãy có thể xảy ra nhiều điểm yếu khác nhau, giả dụ như:
+ Cho phép hacker brute-force (thử nhiều mật khẩu) bằng các công cụ tự động để tìm được thông tin hợp lệ
+ Cho phép đăng ký mật khẩu dễ đoán
+ Lưu trữ mật khẩu dưới dạng text thường, nếu hacker có được file password thì dễ dàng sẽ bị brute-force
### Lỗi Kiểm Soát Truy Cập (Broken Access Control)
- Kiểm soát truy cập đảm bảo rằng mỗi người dùng chỉ có thể truy cập các tệp (tài liệu, hình ảnh,...) liên quan đến vai trò hoặc công việc của họ. Những lỗi liên quan đến kiểm soát truy cập có thể kể đến như:
+ Không áp dụng nguyên tắc ***đặc quyền tối thiểu*** và cấp cho người dùng nhiều quyền truy cập hơn mức họ cần. Ví Dụ: một khách hàng trực tuyến có thể xem giá của các mặt hàng nhưng họ không nên có quyền thay đổi chúng.
+ Có thể xem hoặc sửa đổi tài khoản của người khác bằng cách sử dụng số nhận dạng duy nhất của tài khoản đó. Ví Dụ: thông qua ID,....
+ Có thể duyệt các trang yêu cầu xác thực (đăng nhập) với tư cách là người dùng chưa được xác thực.
### Injection
- Đây là lỗ hổng khi hacker có thể chèn mã độc hại vào một phần của đầu vào của họ( có thể là username, password,...). Một nguyên nhân của lỗ hổng này là do thiếu xác nhận hợp lệ và lọc đầu vào của người dùng.
### Lỗi Mật Mã (Cryptographic Failures)
- Việc mã hóa là để đảm bảo rằng không ai có thể đọc được dữ liệu nếu không biết khóa bí mật. Việc giải mã chuyển đổi bản mã trở lại thành bản ban đầu bằng khóa bí mật. Các ví dụ của lỗi mật mã có thể là:
+ Gửi dữ liệu nhạy cảm ở dạng văn bản, chẳng hạn như sử dụng HTTP thay vì HTTPS. HTTP là giao thức được sử dụng để truy cập web, trong khi HTTPS là phiên bản bảo mật của HTTP. Những người khác có thể đọc mọi thứ bạn gửi qua HTTP nhưng HTTPS thì không.
+ Dựa vào một thuật toán yếu.Ví dụ như: Một thuật toán mã hóa cũ là dịch từng ký tự một, mã hóa “TRYHACKME” thành “USZIBDLNF.” Thuật toán này rất dễ phá vỡ.
+ Sử dụng khóa mặc định hoặc khóa yếu cho các chức năng mật mã. Sẽ không khó để phá khóa mã hóa được sử dụng `1234` làm khóa bí mật.
## Ví dụ thực tế về bảo mật web:
- IDOR (INSECURE DIRECT OBJECT REFERENCE) là một lỗ hổng bảo mật mà trong đó người dùng có thể truy cập và thay đổi dữ liệu của bất kỳ người dùng nào khác có trong hệ thống.
- Giả sử như `https://store.tryhackme.thm/customers/user?id=16` sẽ trả lại người dùng bằng `id=16`. Kẻ tấn công sẽ thử các số khác và có thể truy cập vào các tài khoản người dùng khác. Nếu bạn là ID số 16 và ID số 17 là người dùng khác, bằng cách thay đổi ID thành 17, bạn có thể xem dữ liệu nhạy cảm thuộc về người dùng khác. Tương tự như vậy, họ có thể thay đổi ID thành 16 và xem dữ liệu thuộc về bạn.
- Ở lab này, ta sẽ đổi id của customer > 11, ta sẽ thấy không có, nên em tiếp tục để id từ 1 và hiện ra 1 số nhân viên, xong rồi em đã gặp nhân viên id số 9 đã thay đổi các đơn hàng, hoàn lại các đơn hàng và em đã có flag:
