Ở phần 2 này, chúng ta sẽ tiếp tục khai thác các lỗ hổng khác trong OWASP Top 10 trên Tryhackme. Nếu bạn chưa biết OWASP là gì thì có thể đọc tại đây.
Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
TryHackMe: Thử thách OWASP Top 10 [Phần 2]
Nhiệm vụ 11: [Mức độ nghiêm trọng 3] Rò rỉ dữ liệu nhạy cảm
Đã đến lúc áp dụng những gì bạn đã học được vào thực tế rồi.
# 1 Dev có để lại một ghi chú chỉ ra rằng có dữ liệu nhạy cảm trong một thư mục nào đó.
Tên của thư mục đó là gì?
Truy cập vào trang web và bạn sẽ thấy mục đăng nhập.
Vào trang đăng nhập.
Kiểm tra mã nguồn của web.
Các bạn có thấy cái mà mình đang thấy không :v.
Đáp án: /assets
# 2 Truy cập đến thư mục bạn đã tìm thấy. Và tìm file có khả năng chứa dữ liệu nhạy cảm
Truy cập vào thư mục assets.
Thành công rồi đó.
Đáp án: webapp.db
# 3 Khai thác file chứa dữ liệu nhạy cảm và tìm mã băm mật khẩu
Chúng ta có thể thấy rằng có một cơ sở dữ liệu SQlite trong thư mục hiện tại.
Để truy cập nó, mình sử dụng lệnh sqlite3 <database-name>
Từ đây, chúng ta có thể xem các bảng trong cơ sở dữ liệu bằng cách sử dụng lệnh .tables:
Mình có thể kết xuất tất cả dữ liệu ra khỏi bảng, nhưng mình sẽ không biết ý nghĩa của mỗi cột trừ khi xem thông tin bảng. Trước tiên, hãy sử dụng lệnh PRAGMA table_info(customers);
để xem thông tin bảng, sau đó sử dụng lệnh SELECT * FROM customers;
để kết xuất thông tin khỏi bảng:
Giờ chúng ta đã tìm ra được mã băm rồi đó.
Đáp án: 6eea9b7ef19179a06954edd0f6c05ceb
#4 Bẻ khóa mã băm
Để tìm ra mật khẩu dưới dạng văn bản thuần thì các bạn truy cập vào trang crackstation tại đây.
Crackstation hoạt động bằng cách sử dụng một danh sách từ điển lớn. Nếu mật khẩu không có trong danh sách từ thì Crackstation sẽ không thể bẻ khóa mã băm.
Nếu Crackstation không bẻ khóa được mã băm này, thì hàm băm đó đã được thiết kế đặc biệt để không thể bẻ khóa được.
Đáp án: qwertyuiop
#5 Đăng nhập với tư cách là admin và tìm flag
Sử dụng tài khoản và mật khẩu đã tìm được để đăng nhập vào tài khoản admin.
Đáp án: THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}
Nhiệm vụ 13: [Mức độ nghiêm trọng 4] XML External Entity
#1 XML là viết tắt của từ gì?
Đáp án : Extensible Markup Language.
#2 Có bắt buộc phải mở đầu XML trong các tài liệu XML không?
Đáp án : Không
#3 Chúng ta có thể xác thực các tài liệu XML dựa trên một lược đồ không?
Đáp án : Có
#4 Làm thế nào để chỉ định phiên bản XML và cách mã hóa trong tài liệu XML?
Đáp án : XML Prolog
Nhiệm vụ 14: [Mức độ nghiêm trọng 4] XML External Entity — DTD
Trước khi bắt đầu tìm hiểu về XXE, chúng ta sẽ phải hiểu DTD trong XML là gì.
Đầu tiên tìm hiêu cách DTD xác thực XML. Đây là ý nghĩa của tất cả các thuật ngữ được sử dụng trong note.dtd
!DOCTYPE note – Xác định phần tử gốc của tài liệu có tên note
!ELEMENT note – Xác định phần tử note phải chứa các thành phần: “to, from, heading, body”
!ELEMENT to – Xác định phần tử thuộc loại “#PCDATA”
!ELEMENT from – Xác định phần tử có kiểu “#PCDATA”
!ELEMENT heading – Xác định phần tử tiêu đề thuộc loại “#PCDATA”
!ELEMENT body – Xác định phần tử nội dung thuộc loại “#PCDATA”
LƯU Ý: #PCDATA có nghĩa là parseable character data (dữ liệu ký tự có thể phân tích cú pháp).
# 1 Làm thế nào để xác định một ROOT element?
Đáp án: !ELEMENT
# 2 Xác định ROOT element như thế nào?
Đáp án: !DOCTYPE
# 3 Xác định ENTITY mới như thế nào?
Đáp án: !ENTITY
Nhiệm vụ 15 [Mức độ nghiêm trọng 4] XML External Entity — XXE Payload
1) Payload đầu tiên mà chúng ta sẽ thấy rất đơn giản. Nếu bạn đã đọc những nhiệm vụ trước đó thì bạn sẽ payload này.
<!DOCTYPE replace [<!ENTITY name “feast”> ]> <userInfo> <firstName>falcon</firstName> <lastName>&name;</lastName> </userInfo>
Chúng ta đang xác định một ENTITY và gán cho nó giá trị feast. Tiếp, chúng ta sẽ sử dụng ENTITY đó trong code.
2) Chúng ta cũng có thể sử dụng XXE để đọc một số tệp từ hệ thống bằng cách xác định ENTITY và sử dụng từ khóa SYSTEM
<?xml version=”1.0"?> <!DOCTYPE root [<!ENTITY read SYSTEM ‘file:////cat /etc/passwd>]> <root>&read;</root>
Chúng ta xác định ENTITY với giá trị là `SYSTEM` và đường dẫn của tệp.
Nếu mình sử dụng payload này thì một trang web dễ bị tấn công bởi XXE (thông thường) sẽ hiển thị nội dung của tệp /etc/passwd.
Theo cách tương tự, chúng ta có thể sử dụng loại payload này để đọc các tệp khác.
Nhiệm vụ 16: [Mức độ nghiêm trọng 4] Đối tượng bên ngoài XML – Exploiting
#3 Tên của người dùng trong /etc/passwd là gì?
<?xml version="1.0"?> <!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]> <root>&read;</root>
Đáp án: falcon
#4 Khóa SSH của falcon nằm ở đâu?
Tìm kiếm trên mạng xem khóa SSH được lưu ở đâu.
Đáp án: /home/falcon/.ssh/id_rsa
#5 18 ký tự đầu tiên trong private key của falcon là gì?
<?xml version=”1.0"?> <!DOCTYPE root [<!ENTITY read SYSTEM ‘file:////home/falcon/.ssh/id_rsa>]> <root>&read;</root>
Đáp án: MIIEogIBAAKCAQEA7b
Nhiệm vụ 18: [Mức độ nghiêm trọng 5] Broken Access Control (Thử thách IDOR)
IDOR, hoặc Insecure Direct Object Reference (tham chiếu đối tượng trực tiếp không an toàn), là hành động khai thác cấu hình sai trong cách xử lý đầu vào của người dùng, để truy cập vào các tài nguyên mà thông thường bạn không thể truy cập. IDOR là một loại lỗ hổng kiểm soát truy cập.
Ví dụ: giả sử chúng ta đang đăng nhập vào tài khoản ngân hàng của mình và sau khi tự xác thực chính xác, chúng ta sẽ được đưa đến một URL như sau https://example.com/bank?account_number=1234. Trên trang đó, mình có thể xem tất cả các chi tiết ngân hàng quan trọng của bả thân và người dùng sẽ làm bất cứ điều gì họ cần làm và suy nghĩ không có gì sai.
Tuy nhiên, có một vấn đề lớn tiềm ẩn ở đây, một tin tặc có thể thay đổi thông số account_number thành một số khác như 1235 và nếu trang web được định cấu hình không chính xác, thì hacker sẽ có quyền truy cập vào thông tin ngân hàng của người khác (như vụ metap).
#1 Đọc và hiểu cách IDOR hoạt động.
#2 Triển khai và truy cập http://10.10.220.97 – Đăng nhập với tên người dùng là noot và mật khẩu là test1234.
Mình đã thử tăng dần số sau note = 1 theo thứ tự, nhưng nó không xảy ra. Nhưng khi thử số 0 thì lại có kết quả.
Đáp án: flag{fivefourthree}
Nhiệm vụ 19: [Mức độ nghiêm trọng 6] Cấu hình sai bảo mật
Cấu hình sai bảo mật (Security Misconfiguration)
Cấu hình sai bảo mật khác với 10 lỗ hổng OWASP hàng đầu khác, bởi vì lỗi này chỉ xảy ra khi bạn cấu hình sai bảo mật hệ thống.
Cấu hình sai bảo mật bao gồm:
Các quyền được cấu hình kém trên các dịch vụ đám mây, chẳng hạn như nhóm S3 bật các tính năng không cần thiết, như dịch vụ, trang, tài khoản hoặc đặc quyền của tài khoản mặc định với mật khẩu không thay đổi, thông báo lỗi quá chi tiết và cho phép kẻ tấn công tìm hiểu thêm về hệ thống, không sử dụng HTTP security headers hoặc tiết lộ quá nhiều chi tiết trong Server: HTTP header.
Lỗ hổng này thường có thể dẫn đến nhiều lỗ hổng khác hơn, chẳng hạn như thông tin xác thực mặc định cho phép bạn truy cập vào dữ liệu nhạy cảm, XXE hoặc chèn lệnh trên các trang quản trị.
Máy ảo trong nhiệm vụ này tập trung vào mật khẩu mặc định. Đây là một ví dụ cụ thể về cấu hình sai bảo mật. Bạn nên thay đổi bất kỳ mật khẩu mặc định nào trong hệ thống.
Mật khẩu mặc định rất phổ biến trong các thiết bị nhúng và Internet of Things, và phần lớn các chủ sở hữu thiết bị không thay đổi các mật khẩu này.
Mức độ rủi ro về thông tin xác thực mặc định còn tùy theo quan điểm của kẻ tấn công. Chúng có thể truy cập vào trang quản trị, các dịch vụ được thiết kế cho quản trị viên hệ thống hoặc nhà sản xuất, hoặc thậm chí cơ sở hạ tầng mạng cũng có thể vô cùng hữu ích trong việc tấn công doanh nghiệp. Từ việc tiếp xúc dữ liệu đến RCE dễ dàng, ảnh hưởng của thông tin xác thực mặc định có thể rất nghiêm trọng.
Vào tháng 10 năm 2016, Dyn (một nhà cung cấp DNS) đã bị DDoS bởi một trong những cuộc tấn công DDoS đáng nhớ nhất trong 10 năm qua. Lưu lượng truy cập chủ yếu đến từ Internet of Things và các thiết bị mạng như bộ định tuyến và modem, bị nhiễm phần mềm độc hại Mirai.
Phần mềm độc hại đã xâm nhập vào hệ thống như thế nào? Bằng mật khẩu mặc định. Phần mềm độc hại có danh sách chứa 63 cặp username/password và tin tặc sẽ cố gắng đăng nhập vào các dịch vụ telnet bị lộ.
Các cuộc tấn công DDoS rất đáng chú ý vì nó đã khiến nhiều trang web và dịch vụ lớn bị gián đoạn. Amazon, Twitter, Netflix, GitHub, Xbox Live, PlayStation Network và nhiều dịch vụ khác đã offline trong vài giờ trong 3 đợt tấn công DDoS vào Dyn.
Ví dụ thực tế: Máy ảo này bị cấu hình sai bảo mật, như một lỗi của danh sách 10 lỗ hổng hàng đầu của OWASP.
Triển khai VM và xâm nhập bằng cách khai thác cấu hình sai bảo mật (Security Misconfiguration)!
#1 Triển khai VM (Máy ảo)
# 2 Xâm nhập vào ứng dụng web và tìm flag
Chúng ta có thể nghiên cứu username và mật khẩu mặc định là gì của pensive notes.
Xem mình tìm thấy gì nào.
Đáp án:
thm{4b9513968fd564a87b28aa1f9d672e17}
Nhiệm vụ 20: [Mức độ nghiêm trọng 7] Cross-site Scripting (XSS)
Giải thích XSS
Cross-site scripting, còn được gọi là XSS là một lỗ hổng bảo mật thường thấy trong các ứng dụng web. Đây là một kiểu tiêm code có thể cho phép kẻ tấn công thực thi các tập lệnh độc hại và khiến nó thực thi trên máy của nạn nhân.
Một ứng dụng web dễ bị tấn công bởi XSS nếu nó sử dụng đầu vào của người dùng mà chưa được lọc. XSS có thể sử dụng trong Javascript, VBScript, Flash và CSS. Có ba loại XSS web chính:
Stored XSS: Là loại XSS nguy hiểm nhất. Đây là nơi bắt nguồn một chuỗi mã độc từ cơ sở dữ liệu của trang web. Điều này thường xảy ra khi một trang web lấy đầu vào từ người dùng mà chưa được lọc (loại bỏ “các ký tự đặc biệt” của người dùng nhập) khi được chèn vào cơ sở dữ liệu.
Reflected XSS: Payload độc hại là một phần request của victims đối với trang web. Trang web bao gồm payload này để phản hồi lại người dùng. Tóm lại, kẻ tấn công cần lừa nạn nhân nhấp vào URL để thực thi payload độc hại.
DOM-Based XSS: DOM là viết tắt của Document Object Model và là một giao diện lập trình cho các tài liệu HTML và XML. Nó giúp các chương trình có thể thay đổi cấu trúc, kiểu và nội dung tài liệu. Trang web là một tài liệu và tài liệu này có thể được hiển thị trong cửa sổ trình duyệt hoặc dưới dạng mã nguồn HTML.
Để biết thêm các giải thích và bài tập XSS, hãy đọc bài viết này.
XSS Payloads
Hãy nhớ rằng, XSS là một lỗ hổng có thể bị lợi dụng để thực thi Javascript độc hại trên máy của nạn nhân. Một số loại payload phổ biến được sử dụng:
- Cửa sổ Popup (<script>alert(“Hello World”)</script>) – Tạo cửa sổ bật lên thông báo Hello World trên trình duyệt của người dùng.
- Viết HTML (document.write) – Ghi đè HTML của trang web để thêm code của riêng bạn.
- XSS Keylogger (http://www.xss-payloads.com/payloads/scripts/simplekeylogger.js.html) – Bạn có thể ghi lại tất cả các lần gõ phím của người dùng, ghi lại mật khẩu của họ và các thông tin nhạy cảm khác mà họ nhập vào trang web.
- Port scanning (http://www.xss-payloads.com/payloads/scripts/portscanapi.js.html) – Một máy quét cổng local mini.
XSS-Payloads.com (http://www.xss-payloads.com/) là một trang web có payload, công cụ, tài liệu liên quan đến XSS nhiều thứ khác nữa. Bạn có thể tải các payload XSS chụp ảnh nhanh từ webcam hoặc thậm chí port scanner.
Các thử thách XSS
Máy ảo đi kèm với nhiệm vụ này dựa trên DOM, có Reflected và Stored XSS. Giờ hãy triển khai máy ảo và bắt đầu khai thác lỗ hổng XSS nào.
#1 Triển khai VM (Máy ảo)
#2 Truy cập http://10.10.193.134/reflected và tạo một payload reflected XSS để tạo cửa sổ popup “Hello“.
Viết Script:
<script>alert(“hello”)</script>
Đáp án: ThereIsMoreToXSSThanYouThink
#3 Trên cùng một trang reflective, tạo một payload XSS bật cửa sổ popup chứa địa chỉ IP của bạn.
<script>alert(window.location.hostname)</script>
Đáp án: ReflectiveXss4TheWin
#4 Truy cập đến http://10.10.193.134/stored và tạo tài khoản.
<html><body><p>I am a emre</p></body></html>
![TryHackMe: Thử thách OWASP Top 10 [Phần 2] 64 1 Wz0R4YSqwLTQY6eCR Z QA](https://anonyviet.com/wp-content/uploads/2021/10/1_Wz0R4YSqwLTQY6eCR_Z-QA.png)
![TryHackMe: Thử thách OWASP Top 10 [Phần 2] 65 1 sUATI3UMA1spt04QaZlQ6A](https://anonyviet.com/wp-content/uploads/2021/10/1_sUATI3UMA1spt04QaZlQ6A.png)
<script>alert(document.cookie)</script>
![TryHackMe: Thử thách OWASP Top 10 [Phần 2] 66 1 ZhYeauKp7I37YM3VB5mnDA](https://anonyviet.com/wp-content/uploads/2021/10/1_ZhYeauKp7I37YM3VB5mnDA.png)
![TryHackMe: Thử thách OWASP Top 10 [Phần 2] 67](https://anonyviet.com/wp-content/uploads/2021/10/1_x1aoTA_p7kMLrklB4vsLGA.png)
<script>document.querySelector(‘#thm-title’).textContent = ‘I am a hacker’</script>
![TryHackMe: Thử thách OWASP Top 10 [Phần 2] 68 1 sZc6XOzp2eRYrShI1iyd1A](https://anonyviet.com/wp-content/uploads/2021/10/1_sZc6XOzp2eRYrShI1iyd1A.jpg)