Nứt nó! Điểm nổi bật từ KringleCon 5: Nhẫn vàng

Nứt nó! Điểm nổi bật từ KringleCon 5: Nhẫn vàng

Vừa học vừa vui tại Thử thách hack ngày lễ SANS 2022 – hãy chuẩn bị tinh thần cho một chuyến đi bẻ khóa ở Bắc Cực khi tôi phá vỡ kế hoạch xấu xa của Grinchum và lấy lại năm chiếc nhẫn vàng

Đây là năm đầu tiên tôi tham gia vào Thử thách hack ngày lễ SANS và đó là một vụ nổ. Thông qua một loạt 16 thử thách từ dễ đến khó, tôi đã thực hành phân tích lưu lượng truy cập mạng đáng ngờ và nhật ký PowerShell, viết quy tắc Suricata, thoát ra khỏi một bộ chứa docker, tìm các khóa bị rò rỉ để khai thác một Đường dẫn GitLab CI/CD và một người dùng AWS, tiến hành Tấn công thực thể bên ngoài XMLvà hack một hợp đồng thông minh để mua một mã thông báo không thể thay thế.

Phần tuyệt vời nhất của trải nghiệm này là nó đã giới thiệu cho tôi các công cụ và công nghệ mới, từ đó mở rộng kiến ​​thức về an ninh mạng của tôi hơn nữa. Ở đây, tôi chia sẻ một vài điểm nổi bật từ việc giải quyết các thách thức.

Sự định hướng

Mỗi người tham gia đều nhận được một hình đại diện để điều hướng môi trường trò chơi điện tử trong trình duyệt được đặt ở Bắc Cực:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Trong quá trình định hướng, bạn nhận được một ví tiền điện tử mà trò chơi sử dụng để thưởng KringleCoins khi hoàn thành các thử thách và bạn sử dụng ví này trong thử thách cuối cùng để hack một hợp đồng thông minh. Thật thú vị, trò chơi theo dõi tất cả các giao dịch KringleCoin trong chuỗi khối Ethereum, nghĩa là một bản ghi đầy đủ về tiến trình của bạn cũng được lưu trữ trong chuỗi khối này.

Vào vòng đầu tiên của trò chơi.

1. Nhẫn Tolkien

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Việc tìm kiếm Chiếc nhẫn Tolkien yêu cầu tôi phải vận dụng các cơ phân tích nhật ký của mình.

Wireshark lừa đảo

Đầu tiên, tôi đã sử dụng Wireshark để phân tích dữ liệu được cung cấp .pcap tập tin đã tiết lộ một máy chủ tại adv.epostoday[.]uk tải tập tin Ref_Sept24-2020.zip vào máy tính:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Nhìn trộm bên trong tệp ZIP, tôi tìm thấy một tệp thực thi có tên Tham chiếu_Sept24-2020.scr đã kích hoạt hai phát hiện trong ESET Endpoint Security: BAT/Người chạy.ES Generik.TAGTBG. Phần mềm độc hại này cuối cùng dẫn đến một tệp thực thi độc hại chạy trong bộ nhớ có tên config.dll và được phát hiện bởi ESET Trình quét bộ nhớ nâng cao as Win32/Dridex.DD.

Nhật ký sự kiện Windows

Tiếp theo, tôi đã phân tích được cung cấp .evtx tệp chứa nhật ký PowerShell với Trình xem sự kiện. Mặc dù có các công cụ khác để phân tích nhật ký PowerShell, nhưng nếu những kẻ tấn công biết cách sử dụng các tệp nhị phân sống ngoài đất liền để nằm dưới radar, thì những người bảo vệ cũng nên thành thạo các công cụ gốc mà hệ điều hành cung cấp.

Vì nhật ký chứa 10,434 sự kiện nên tôi đã nhóm các sự kiện theo ngày rồi chạy tác vụ Tìm để tìm bất kỳ sự kiện nào chứa sự kiện $ nhân vật. Trong PowerShell, $ được sử dụng để tạo và tham chiếu biến. Tôi phát hiện thấy một cuộc tấn công xảy ra vào ngày 24 tháng 2022 năm XNUMX, khi kẻ tấn công chạy đoạn mã sau:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Có vẻ như kẻ tấn công đã tìm thấy một công thức bí mật, đánh tráo thành phần bí mật của mật ong cho dầu cá, rồi tạo một tệp công thức mới. Điều này đã kích hoạt một sự kiện có ID là 4104, viết tắt của việc thực thi các lệnh PowerShell từ xa. Vì vậy, tôi đã lọc các sự kiện theo ID này, giúp tôi tìm các sự kiện độc hại bổ sung nhanh hơn.

Đua thuyền Suricata

Bài tập cuối cùng cho Tolkien Ring là viết bốn quy tắc Suricata để giám sát lưu lượng mạng để phát hiện sự phá hoại của Dridex:

cảnh báo dns $HOME_NET bất kỳ -> bất kỳ bất kỳ (thông báo:"Tra cứu DNS không hợp lệ đã biết, có thể bị nhiễm Dridex"; dns.query; nội dung:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

cảnh báo http 192.185.57.242 bất kỳ <> bất kỳ bất kỳ (thông điệp:"Điều tra các kết nối đáng ngờ, có thể lây nhiễm Dridex"; sid:2; rev:1;)

cảnh báo tls bất kỳ -> bất kỳ bất kỳ (thông điệp:"Điều tra chứng chỉ xấu, có thể nhiễm Dridex"; tls.cert_subject; nội dung:"CN=nghedbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

cảnh báo http bất kỳ bất kỳ -> bất kỳ bất kỳ (thông báo:"Chức năng JavaScript đáng ngờ, có thể bị nhiễm Dridex"; file_data; nội dung:"let byte Characters = atob"; sid:4; rev:1;)

Theo thứ tự, các quy tắc này bắt tra cứu DNS cho adv.epostoday[.]uk, kết nối đến địa chỉ IP 192.185.57 [.] 242, việc sử dụng máy chủ độc hại nghebellith.Icanwepeh[.]nagoya được xác định thông qua tên chung (CN) trong chứng chỉ TLS và việc sử dụng JavaScript A đến B() chức năng giải mã một chuỗi nhị phân chứa dữ liệu được mã hóa base64 trên máy khách.

Hoàn thành ba thử thách này đã mang lại cho tôi Chiếc nhẫn Tolkien:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đến hồi chuông thứ hai.

2. Nhẫn yêu tinh

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Những thử thách nổi bật nhất đối với Elfen Ring là Vượt ngục và CI/CD vui nhộn.

Nhà tù thoát

Vượt ngục là một lời nhắc nhở nghiêm khắc rằng việc cấp quyền root cho người dùng trong vùng chứa Docker cũng tốt như cấp quyền root trên hệ thống máy chủ. Thử thách là thoát ra khỏi thùng chứa. Chà, dễ dàng thực hiện khi bạn đã root:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Là người dùng root, tôi đã liệt kê các bảng phân vùng cho thiết bị và sau đó gắn hệ thống tệp máy chủ, cấp cho tôi toàn quyền truy cập vào máy chủ. Bây giờ tôi có thể tìm kiếm chìa khóa, chìa khóa này sẽ nằm trong thư mục chính như được tiết lộ bởi các gợi ý trong trò chơi:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

CI/CD vui vẻ

Mặc dù điều đó diễn ra nhanh chóng, nhưng Jolly CI/CD khiến tôi mất nhiều thời gian nhất để tìm ra. Đầu tiên, chúng tôi được cấp một kho lưu trữ Git để sao chép qua HTTP:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Từ URL, tôi có thể thấy rằng tên của kho lưu trữ là wordpress.flag.net.internal, vì vậy tôi đã chuyển đến kho lưu trữ và tìm thấy một trang web WordPress. Tôi đã kiểm tra xem trang web có hoạt động không:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Yup, trang web đã hoạt động. Tôi tò mò liệu có khóa nào bị rò rỉ trong lịch sử mã nguồn không. Nếu có, tôi sẽ có thể đẩy các chỉnh sửa vào mã nguồn. Vì vậy, tôi đã chạy git-log:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Từ các thông điệp cam kết, có vẻ như một cam kết đã được thực hiện sau khi thêm nội dung để khắc phục sự cố. Đã đến lúc kiểm tra cam kết trước:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Tuyệt vời, tôi tìm thấy một .ssh thư mục với các phím. Hãy sao chép các khóa đó và định cấu hình tác nhân SSH và người dùng Git để xem liệu tôi có thể mạo danh chủ sở hữu của các khóa đó không:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Bây giờ, hãy quay lại nhánh chính và kiểm tra xem chúng ta có thể đẩy một thay đổi nhỏ vào mã nguồn hay không (sử dụng nano, tôi chỉ cần thêm khoảng trắng vào một trong các tệp):

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Vì vậy, tôi đã hoàn thành phần đầu tiên của thử thách bằng cách mạo danh một trong những nhà phát triển WordPress, nhưng trang web có còn hoạt động sau khi tôi đẩy không?

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Lần đẩy của tôi đã thay đổi điều gì đó vì giờ đây trang web đã chuyển hướng đến cổng 8080.

Cho đến bây giờ, tôi đã bỏ qua phần CI/CD của thử thách, đây sẽ là chìa khóa để hoàn thành nó. Kho lưu trữ chứa một .gitlab-ci.yml tệp, tệp này cung cấp cấu hình cho đường dẫn GitLab CI/CD. Mỗi khi bạn đẩy vào kho lưu trữ, hệ thống CI/CD sẽ khởi động và một Người chạy GitLab thực thi các tập lệnh trong tệp YML này. Tôi nghĩ điều đó cũng tốt như đạt được khả năng thực thi mã từ xa trên máy chủ nơi GitLab Runner được cài đặt.

Nhìn kỹ hơn, tôi thấy một rsync tập lệnh sao chép tất cả các tệp từ kho lưu trữ Git sang thư mục trên máy chủ web mà từ đó trang web được phục vụ. Lúc đầu, tôi đã cố gắng sử dụng rsync để đảo ngược luồng dữ liệu bằng cách sao chép tất cả các tệp từ máy chủ web sang kho lưu trữ Git, nhưng không thành công.

Sau rất nhiều thử nghiệm giả thuyết, cuối cùng tôi đã có cái nhìn sâu sắc mang tính đột phá của mình: Thay vì cố gắng “sửa chữa” trang web WordPress hoặc chạy các tập lệnh độc hại thông qua hệ thống xây dựng, hãy phục vụ một trang web làm rò rỉ thông tin từ máy chủ web. Bên trong index.php (nằm ở cấp cao nhất của kho lưu trữ), tôi có thể nhận xét mã tải trang web WordPress và chạy các lệnh PHP thăm dò máy chủ web.

Thật vậy, tôi thậm chí có thể chạy các lệnh shell với PHP. tôi thấy rằng passthru () làm việc dễ dàng.

In index.php, Tôi đã sử dụng // để bình luận ra hai dòng và tôi đã thêm passthru('ls -la /'); trên dòng cuối cùng. Điều này tạo ra một trang web liệt kê tất cả các tệp trong thư mục gốc của máy chủ web:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Sau đó, tôi đẩy thay đổi này vào kho lưu trữ Git và hệ thống GitLab CI/CD đảm nhiệm việc cập nhật trang web cho tôi:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

À, chiếc nhẫn Elfen phải ở trong cờ.txt! Tôi lặp lại các bước trước, nhưng lần này sử dụng passthru('cat /flag.txt'); tiết lộ Chiếc nhẫn Elfen vào lần tiếp theo tôi yêu cầu trang web:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đến hồi chuông thứ ba.

3. Vòng mạng

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Thử thách thú vị nhất đối với tôi là Mở cửa mỏ Boria, mặc dù Suối nguồn của Glamtariel rất thú vị khi cũng đưa ra các câu đố.

Mở Cửa Mỏ Boria

Trong Open Boria Mine Door, chúng tôi đã được cung cấp sáu chân hoặc các thử thách nhỏ để vượt qua xác thực đầu vào hoặc một Chính sách bảo mật nội dung để kết nối các đường ống vào và ra giữa các chốt, bao gồm cả việc khớp màu đường ống. Đối với hầu hết các ghim, tôi đã sử dụng HTML để viết danh sách các chữ 'o' kết nối. Đây là giải pháp cuối cùng của tôi:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chân 1

Không có xác thực cho Pin 1, vì vậy đây chỉ là vấn đề đơn giản về HTML và CSS nội tuyến:

Chân 2

Chân 2 có Chính sách bảo mật nội dung không cho phép JavaScript nhưng cho phép CSS nội tuyến, vì vậy đó không phải là vấn đề đối với phương pháp của tôi:

Chân 3

Pin 3 có Chính sách bảo mật nội dung không cho phép CSS nhưng cho phép JavaScript nội tuyến, vì vậy tôi đã sử dụng JavaScript để thay đổi kiểu thay thế:

Chân 4

Chân 4 không có Chính sách bảo mật nội dung, nhưng nó có chức năng sanitizeInput ở phía máy khách sẽ loại bỏ dấu ngoặc kép, dấu ngoặc đơn, dấu ngoặc nhọn bên trái và dấu ngoặc nhọn bên phải. Mẹo ở đây là nhận ra rằng chức năng này không được kích hoạt bằng cách gửi biểu mẫu, mà bởi làm mờ biến cố. Nói cách khác, di chuyển chuột ra khỏi trường nhập liệu đã kích hoạt làm mờ sự kiện, vệ sinh mọi đầu vào. Giải pháp là gửi biểu mẫu bằng cách nhấn nút đăng ký hạng mục thi phím, đồng thời chú ý không di chuyển con trỏ chuột ra ngoài giới hạn của trường nhập liệu:

Chân 5

Pin 5 có cùng vệ sinhĐầu vào chức năng và bỏ qua cùng với Chính sách bảo mật nội dung cấm CSS nội tuyến, nhưng cho phép JavaScript nội tuyến:

Chân 6

Cuối cùng, Pin 6 không làm sạch đầu vào, nhưng nó đã sử dụng Chính sách bảo mật nội dung nghiêm ngặt hơn cấm cả CSS và JavaScript nội tuyến. Giải pháp của tôi là sử dụng HTML không dùng nữa để lấy các kiểu tôi cần và sử dụng bảng thay vì danh sách:

Đài phun nước Glamtariel

Đài phun nước Glamtariel là một cơ hội để thực hành Các cuộc tấn công thực thể bên ngoài XML (XXE). Tìm hiểu cách xác định thực thể XML tùy chỉnh, xác định thực thể yêu cầu tệp từ máy chủ và thêm thực thể đó dưới dạng tải trọng vào yêu cầu HTTP không khó. Phần khó nhất là tìm ra các câu đố trong trò chơi để tìm ra đường dẫn đến các tệp mà máy chủ sẽ bị rò rỉ. Đây là yêu cầu đột phá tiết lộ vị trí của chiếc nhẫn vàng:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Tôi xin đưa ra hai bài học rút ra từ thử thách này. Đầu tiên, sử dụng Trình chuyển đổi loại nội dung mở rộng trong Ợ hơi để chuyển đổi tải trọng JSON sang XML. Thứ hai, hãy thử đặt tải trọng XXE vào các thẻ khác nhau – tôi đã mất một thời gian dài để nhận ra rằng tất cả những gì tôi phải làm là đặt &xx; tải trọng trong loại yêu cầu thẻ thay vì imgThả tag.

Đến hồi chuông thứ tư.

4. Vòng Mây

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Chơi cho Cloud Ring là bước đột phá của người mới bắt đầu vào Giao diện dòng lệnh (CLI) của Dịch vụ web Amazon (AWS).

Điểm nổi bật của loạt thử thách này là sử dụng nấm cục để tìm thông tin xác thực AWS trong kho lưu trữ Git, sau đó khai thác chúng để xác thực là người dùng AWS. Kẻ tấn công đến được vị trí này có thể sử dụng tôi là tôi các lệnh để truy vấn các chính sách áp dụng cho người dùng và do đó tài sản đám mây nào có thể được truy cập và lạm dụng.

Đến hồi chuông thứ năm.

5. Vòng lửa rực cháy

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Phần mang tính hướng dẫn nhất của loạt thử thách này là tìm hiểu về Cây Merkle để khai thác một hợp đồng thông minh và có tên trong danh sách bán trước để mua mã thông báo không thể thay thế (NFT). Ở đây, thách thức là khám phá các giá trị bằng chứng, cùng với địa chỉ ví của tôi và giá trị gốc của Cây Merkle, đã chứng minh việc tôi được đưa vào danh sách bán trước.

Sau một vài nỗ lực không thành công để cung cấp các giá trị bằng chứng, tôi nhận ra rằng tôi sẽ không bao giờ có thể tìm ra các giá trị bằng chứng cho giá trị gốc được cung cấp vì không có cách nào để biết tất cả các giá trị lá được sử dụng để tính toán nó. Tôi cần thay đổi giá trị gốc để có thể cung cấp Cây Merkle hợp lệ.

Sử dụng Công cụ của giáo sư QPetabyte, Tôi đã tạo một Cây Merkle từ hai lá bao gồm địa chỉ ví của tôi và địa chỉ ví BSRS_nft hợp đồng thông minh mà tôi đã tìm thấy bằng cách sử dụng Blockchain Explorer trong trò chơi ở khối hai của chuỗi khối Ethereum của trò chơi. Công cụ đã tạo ra giá trị gốc của cây này và giá trị bằng chứng cho địa chỉ ví của tôi. Sau đó, tôi đã sử dụng Burp để chặn yêu cầu đến máy chủ và thay đổi giá trị gốc mặc định để tôi có thể gửi Cây Merkle hợp lệ. Đây là thể thao NFT đã mua với giá cố định là 100 KringleCoins:

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Một mẫu vật xấu xí thực sự.

Thức

Đã bẻ khóa nó! Điểm nổi bật từ KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Xin gửi lời cảm ơn chân thành đến những người tổ chức Thử thách hack kỳ nghỉ SANS vì đã giúp tôi mở mang đầu óc theo những cách mới và giúp nâng cao kiến ​​thức về an ninh mạng của tôi. Tôi không chỉ mong chờ thử thách của năm tới mà thậm chí tôi sẽ thử các phiên bản 2020 và 2021 của thử thách này. Và nếu bạn chưa từng tham gia thử thách này trước đây, tôi hy vọng những điểm nổi bật này đã thu hút sự quan tâm của bạn.

Dấu thời gian:

Thêm từ Chúng tôi sống An ninh