First we want to run a initial nmap scan to see what ports are open and what services are on those ports.
nmap -sC -sV -oA nmap/init 10.129.141.123
-sC: run default nmap scripts
-sV: detect service version
-oA: output all formats to nmap/initial
We get back the following information:
Port 21: running vsftpd version 3.0.3
Port 22: running OpenSSH version 8.2p1 Ubuntu 4ubuntu0.2
Port 80: running gunicorn web server
init.nmap
# Nmap 7.92 scan initiated Tue Mar 22 18:25:26 2022 as: nmap -sC -sV -oA nmap/init 10.129.141.123Nmap scan report for 10.129.141.123Host is up (0.039s latency).Not shown:997 closed tcp ports (reset)PORT STATE SERVICE VERSION21/tcp open ftp vsftpd 3.0.322/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:| 3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)| 25696:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)|_ 256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)80/tcp open http gunicorn| fingerprint-strings:| FourOhFourRequest:| HTTP/1.0404 NOT FOUND| Server: gunicorn| Date: Tue, 22 Mar 202222:25:38 GMT| Connection: close| Content-Type: text/html; charset=utf-8| Content-Length:232| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">| <title>404 Not Found</title>| <h1>Not Found</h1>| <p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>| GetRequest:| HTTP/1.0200 OK| Server: gunicorn| Date: Tue, 22 Mar 202222:25:33 GMT| Connection: close| Content-Type: text/html; charset=utf-8| Content-Length:19386| <!DOCTYPE html>| <html class="no-js" lang="en">| <head>| <meta charset="utf-8">| <meta http-equiv="x-ua-compatible" content="ie=edge">| <title>Security Dashboard</title>| <meta name="viewport" content="width=device-width, initial-scale=1">| <link rel="shortcut icon" type="image/png" href="/static/images/icon/favicon.ico">| <link rel="stylesheet" href="/static/css/bootstrap.min.css">| <link rel="stylesheet" href="/static/css/font-awesome.min.css">| <link rel="stylesheet" href="/static/css/themify-icons.css">| <link rel="stylesheet" href="/static/css/metisMenu.css">| <link rel="stylesheet" href="/static/css/owl.carousel.min.css">| <link rel="stylesheet" href="/static/css/slicknav.min.css">| <!-- amchar| HTTPOptions:| HTTP/1.0200 OK| Server: gunicorn| Date: Tue, 22 Mar 202222:25:33 GMT| Connection: close| Content-Type: text/html; charset=utf-8| Allow: GET, OPTIONS, HEAD| Content-Length:0| RTSPRequest:| HTTP/1.1400 Bad Request| Connection: close| Content-Type: text/html| Content-Length:196| <html>| <head>| <title>Bad Request</title>| </head>| <body>| <h1><p>Bad Request</p></h1>| Invalid HTTP Version 'Invalid HTTP Version: 'RTSP/1.0''| </body>|_ </html>|_http-title: Security Dashboard|_http-server-header: gunicorn1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :SF-Port80-TCP:V=7.92%I=7%D=3/22%Time=623A4CDD%P=x86_64-pc-linux-gnu%r(GetRSF:equest,1480,"HTTP/1\.0\x20200\x20OK\r\nServer:\x20gunicorn\r\nDate:\x20SF:Tue,\x2022\x20Mar\x202022\x2022:25:33\x20GMT\r\nConnection:\x20close\r\SF:nContent-Type:\x20text/html;\x20charset=utf-8\r\nContent-Length:\x20193SF:86\r\n\r\n<!DOCTYPE\x20html>\n<html\x20class=\"no-js\"\x20lang=\"en\">\SF:n\n<head>\n\x20\x20\x20\x20<meta\x20charset=\"utf-8\">\n\x20\x20\x20\x2SF:0<meta\x20http-equiv=\"x-ua-compatible\"\x20content=\"ie=edge\">\n\x20\SF:x20\x20\x20<title>Security\x20Dashboard</title>\n\x20\x20\x20\x20<meta\SF:x20name=\"viewport\"\x20content=\"width=device-width,\x20initial-scale=SF:1\">\n\x20\x20\x20\x20<link\x20rel=\"shortcut\x20icon\"\x20type=\"imageSF:/png\"\x20href=\"/static/images/icon/favicon\.ico\">\n\x20\x20\x20\x20<SF:link\x20rel=\"stylesheet\"\x20href=\"/static/css/bootstrap\.min\.css\">SF:\n\x20\x20\x20\x20<link\x20rel=\"stylesheet\"\x20href=\"/static/css/fonSF:t-awesome\.min\.css\">\n\x20\x20\x20\x20<link\x20rel=\"stylesheet\"\x20SF:href=\"/static/css/themify-icons\.css\">\n\x20\x20\x20\x20<link\x20rel=SF:\"stylesheet\"\x20href=\"/static/css/metisMenu\.css\">\n\x20\x20\x20\x2SF:0<link\x20rel=\"stylesheet\"\x20href=\"/static/css/owl\.carousel\.min\.SF:css\">\n\x20\x20\x20\x20<link\x20rel=\"stylesheet\"\x20href=\"/static/cSF:ss/slicknav\.min\.css\">\n\x20\x20\x20\x20<!--\x20amchar")%r(HTTPOptionSF:s,B3,"HTTP/1\.0\x20200\x20OK\r\nServer:\x20gunicorn\r\nDate:\x20Tue,\x2SF:022\x20Mar\x202022\x2022:25:33\x20GMT\r\nConnection:\x20close\r\nContenSF:t-Type:\x20text/html;\x20charset=utf-8\r\nAllow:\x20GET,\x20OPTIONS,\x2SF:0HEAD\r\nContent-Length:\x200\r\n\r\n")%r(RTSPRequest,121,"HTTP/1\.1\x2SF:0400\x20Bad\x20Request\r\nConnection:\x20close\r\nContent-Type:\x20textSF:/html\r\nContent-Length:\x20196\r\n\r\n<html>\n\x20\x20<head>\n\x20\x20SF:\x20\x20<title>Bad\x20Request</title>\n\x20\x20</head>\n\x20\x20<body>\SF:n\x20\x20\x20\x20<h1><p>Bad\x20Request</p></h1>\n\x20\x20\x20\x20InvaliSF:d\x20HTTP\x20Version\x20'Invalid\x20HTTP\x20Version:\x20'RTSPSF:/1\.0''\n\x20\x20</body>\n</html>\n")%r(FourOhFourRequest,189SF:,"HTTP/1\.0\x20404\x20NOT\x20FOUND\r\nServer:\x20gunicorn\r\nDate:\x20TSF:ue,\x2022\x20Mar\x202022\x2022:25:38\x20GMT\r\nConnection:\x20close\r\nSF:Content-Type:\x20text/html;\x20charset=utf-8\r\nContent-Length:\x20232\SF:r\n\r\n<!DOCTYPE\x20HTML\x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x203\.2\x20SF:Final//EN\">\n<title>404\x20Not\x20Found</title>\n<h1>Not\x20Found</h1>SF:\n<p>The\x20requested\x20URL\x20was\x20not\x20found\x20on\x20the\x20serSF:ver\.\x20If\x20you\x20entered\x20the\x20URL\x20manually\x20please\x20chSF:eck\x20your\x20spelling\x20and\x20try\x20again\.</p>\n");Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .# Nmap done at Tue Mar 22 18:27:36 2022 -- 1 IP address (1 host up) scanned in 130.52 seconds
Enumeration
Checking out the webserver I see that I am logged in as the user Nathan
It also appears that I can see netstat information from the server this is running on
The IP Config page shows that I am in fact looking at the box I just enumerated and this is not output from another server
Looking at the security snapshots page I notice something interesting in the address bar
Setting the data value from 1 to 0 I get non-zero values for the number of packets
Opening up the pcap that is downloaded in wireshark I almost immediately spot a username and password
Credentials
Username: nathan
Password: Buck3tH4TF0RM3!
Initial Access
These credentials worked for ssh
I am unable to run sudo as the user nathan on the box so I am going to transfer over linpeas using updog
Running linpeas.sh I notice python3.8 has capabilities for setuid
Exploitation
Going to gtfobins I can see we have an easy way to root wth python
Using this command I was able to get root
Lessons Learned
Never allow binaries that can run another binary to have the linux CAP_SETUID capability set as it can be used to escalate privileges and maintain persistence
SSH Should require more than just a password for login