SlideShare a Scribd company logo
1 of 23
Download to read offline
PHP Object Injection in
Joomla...questo sconosciuto!
Napoli, 12 Ottobre 2013
PHP Object Injection in Joomla…questo sconosciuto! 2
About Me
●
Egidio Romano (aka EgiX)
●
Web Application Security Researcher dal 2007
●
Security Specialist presso Secunia dal 2013
● https://www.linkedin.com/in/romanoegidio
PHP Object Injection in Joomla…questo sconosciuto!
Agenda
●
PHP Object Injection
* La funzione “unserialize”
* OOP in PHP: autoloading e metodi magici
●
PHP Object Injection in Joomla
* CVE-2013-1453 e CVE-2013-3242
* Attacchi SQL Injection e Denial of Service
3
PHP Object Injection in Joomla…questo sconosciuto!
PHP Object Injection
●
Classe di vulnerabilità scoperta da Stefan Esser
nel 2009: “Shocking News in PHP Exploitation”
●
Successivamente rivisitata sempre da Esser
durante BlackHat USA 2010: “Utilizing Code
Reuse/ROP in PHP Application Exploits”
●
Ma da allora nessun'altra notizia a riguardo...
4
PHP Object Injection in Joomla…questo sconosciuto!
PHP Object Injection
...da Novembre 2011 ho iniziato a svolgere
ricerca su questo tipo di vulnerabilità:
●
CVE-2012-0694: SugarCRM <= 6.3.1
●
CVE-2012-0911: Tiki Wiki CMS <= 9.3
●
CVE-2012-5692: IP.Board <= 3.3.4
●
CVE-2013-1465: CubeCart <= 5.2.0
5
PHP Object Injection in Joomla…questo sconosciuto!
Il linguaggio PHP implementa un meccanismo di
serializzazione che permette di convertire in
formato stringa qualsiasi tipo di variabile
utilizzando la funzione “serialize”. A partire da
questa rappresentazione sotto forma di stringa
è possibile ricostruire la variabile a run-time
attraverso la funzione “unserialize”.
6
La funzione “unserialize”
PHP Object Injection in Joomla…questo sconosciuto!
Output:
7
La funzione “unserialize”
PHP Object Injection in Joomla…questo sconosciuto!
Output:
8
La funzione “unserialize”
PHP Object Injection in Joomla…questo sconosciuto!
http://php.net/manual/en/function.unserialize.php
9
La funzione “unserialize”
PHP Object Injection in Joomla…questo sconosciuto! 10
OOP in PHP: autoloading
Molti sviluppatori che producono applicazioni orientate agli
oggetti creano un file sorgente PHP per ogni classe
definita. Uno dei più grossi inconvenienti di questo
approccio è la necessità di mantenere una lunga lista di
inclusioni all'inizio di ogni script (un'inclusione per ogni
classe). In PHP 5, ciò non è più necessario, in quanto è
possibile definire una funzione __autoload() che viene
automaticamente invocata in caso si stia cercando di usare
una classe/interfaccia che non sia stata ancora definita.
http://php.net/manual/it/language.oop5.autoload.php
PHP Object Injection in Joomla…questo sconosciuto! 11
OOP in PHP: autoloading
PHP Object Injection in Joomla…questo sconosciuto! 12
OOP in PHP: metodi magici
I metodi magici sono sintatticamente riconoscibili
attraverso il doppio underscore (“__”) iniziale.
Essi sono metodi “speciali” che PHP invoca
implicitamente ed automaticamente in particolari
circostanze, ovvero al verificarsi di un evento.
http://php.net/manual/it/language.oop5.magic.php
PHP Object Injection in Joomla…questo sconosciuto! 13
OOP in PHP: metodi magici
Nome del metodo Invocato quando…
__construct viene creata una nuova istanza della classe
__destruct viene distrutta un’istanza
__call viene richiamato un metodo inaccessibile (nel
contesto di un oggetto)
__callStatic viene richiamato un metodo inaccessibile (nel
contesto statico)
__set viene usata in scrittura una proprietà inaccessibile
__get viene usata in lettura una proprietà inaccessibile
__sleep viene richiamata la funzione “serialize” con un’istanza
__wakeup viene richiamata la funzione “unserialize” con
un’istanza
__toString viene utilizzato un oggetto come una stringa
PHP Object Injection in Joomla…questo sconosciuto! 14
Un semplice esempio
PHP Object Injection in Joomla…questo sconosciuto!
PHP Object Injection in Joomla
●
CVE-2013-1453: questa vulnerabilità si trova nel
plugin di sistema “highlight”, all'interno del
file /plugins/system/highlight/highlight.php
●
CVE-2013-3242: questa vulnerabilità si trova nel
plugin di sistema “remember me”, all'interno del
file /plugins/system/remember/remember.php
15
PHP Object Injection in Joomla…questo sconosciuto!
CVE-2013-1453
16
PHP Object Injection in Joomla…questo sconosciuto!
CVE-2013-3242
17
PHP Object Injection in Joomla…questo sconosciuto! 18
PHP Object Injection in Joomla…questo sconosciuto! 19
PHP Object Injection in Joomla…questo sconosciuto! 20
Exploiting Joomla
Un attaccante potrebbe sfruttare entrambe le
vulnerabilità per condurre attacchi SQL Injection
e Denial of Service (DoS). Ciò è possibile
sfruttando il metodo distruttore della classe
“plgSystemDebug”, che a sua volta invoca il
metodo “get” sulla proprietà “params”:
PHP Object Injection in Joomla…questo sconosciuto! 21
Exploiting Joomla: SQL Injection
Un attacco SQL Injection è possibile sfruttando il metodo
“get” della classe “JCategories”, che alla linea 181 invoca il
metodo “_load”, all'interno del quale viene eseguita una
query SQL utilizzando alcune proprietà dell'oggetto:
PHP Object Injection in Joomla…questo sconosciuto! 22
Exploiting Joomla: Denial of Service
Un attacco Denial of Service è possibile sfruttando il
metodo “get” della classe “JInput”, che a sua volta invoca
il metodo “clean” sulla proprietà “filter”:
Utilizzando un oggetto di tipo “JCacheStorageFile” è
possibile cancellare ricorsivamente un'intera directory,
poiché il metodo “JCacheStorageFile::clean” invocherà il
metodo “_deleteFolder” passandogli come parametro una
stringa avente come prefisso la proprietà “_root”.
Dalla teoria
alla pratica...

More Related Content

What's hot

Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects PracticesGrUSP
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 

What's hot (9)

Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects Practices
 
Java 8
Java 8Java 8
Java 8
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Logging
LoggingLogging
Logging
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
iContract
iContractiContract
iContract
 
Introduzione a Python
Introduzione a PythonIntroduzione a Python
Introduzione a Python
 
iOS_Course_6
iOS_Course_6iOS_Course_6
iOS_Course_6
 

Viewers also liked

A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENS
A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENSA ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENS
A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENSAnasc16
 
Nganampa anwernekenhe information brochure march 2015
Nganampa anwernekenhe   information brochure march 2015Nganampa anwernekenhe   information brochure march 2015
Nganampa anwernekenhe information brochure march 2015Desart Inc
 
What Makes a Successful Podiatrist in Private Practice
What Makes a Successful Podiatrist in Private PracticeWhat Makes a Successful Podiatrist in Private Practice
What Makes a Successful Podiatrist in Private PracticeSCHOFIELD MATTHEW
 
Self Directed Project in Kinesiology
Self Directed Project in KinesiologySelf Directed Project in Kinesiology
Self Directed Project in KinesiologyPhilip Yan
 
League of Legends Global Study
League of Legends Global StudyLeague of Legends Global Study
League of Legends Global StudyAndrew H. Yim
 
I know what you will buy next summer
I know what you will buy next summerI know what you will buy next summer
I know what you will buy next summerStijn Geuens
 
Nganampa presentation march 2015
Nganampa presentation   march 2015Nganampa presentation   march 2015
Nganampa presentation march 2015Desart Inc
 
Desart board governance notes
Desart board governance notesDesart board governance notes
Desart board governance notesDesart Inc
 
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen Prinzip
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen PrinzipIst Cola light leichter als Cola? Experimente mit dem Archimedischen Prinzip
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen PrinzipVincent Leuenberger
 
Inventory Planning & Inventory Management
Inventory Planning & Inventory ManagementInventory Planning & Inventory Management
Inventory Planning & Inventory ManagementMatthew William
 
The Importance of Being Social
The Importance of Being SocialThe Importance of Being Social
The Importance of Being SocialDesart Inc
 

Viewers also liked (16)

Catalogo antorchas mig 2014 2015
Catalogo antorchas mig 2014 2015Catalogo antorchas mig 2014 2015
Catalogo antorchas mig 2014 2015
 
Ethnography
EthnographyEthnography
Ethnography
 
A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENS
A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENSA ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENS
A ESTÉTICA BAIANA CONTEMPORÂNEA: PIERCINGS E TATUAGENS
 
MY CV
MY CVMY CV
MY CV
 
Nganampa anwernekenhe information brochure march 2015
Nganampa anwernekenhe   information brochure march 2015Nganampa anwernekenhe   information brochure march 2015
Nganampa anwernekenhe information brochure march 2015
 
Final project 390b
Final project 390bFinal project 390b
Final project 390b
 
What Makes a Successful Podiatrist in Private Practice
What Makes a Successful Podiatrist in Private PracticeWhat Makes a Successful Podiatrist in Private Practice
What Makes a Successful Podiatrist in Private Practice
 
Self Directed Project in Kinesiology
Self Directed Project in KinesiologySelf Directed Project in Kinesiology
Self Directed Project in Kinesiology
 
League of Legends Global Study
League of Legends Global StudyLeague of Legends Global Study
League of Legends Global Study
 
I know what you will buy next summer
I know what you will buy next summerI know what you will buy next summer
I know what you will buy next summer
 
Nganampa presentation march 2015
Nganampa presentation   march 2015Nganampa presentation   march 2015
Nganampa presentation march 2015
 
Desart board governance notes
Desart board governance notesDesart board governance notes
Desart board governance notes
 
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen Prinzip
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen PrinzipIst Cola light leichter als Cola? Experimente mit dem Archimedischen Prinzip
Ist Cola light leichter als Cola? Experimente mit dem Archimedischen Prinzip
 
Inventory Planning & Inventory Management
Inventory Planning & Inventory ManagementInventory Planning & Inventory Management
Inventory Planning & Inventory Management
 
The Importance of Being Social
The Importance of Being SocialThe Importance of Being Social
The Importance of Being Social
 
Nesi̇be AYDIN
Nesi̇be AYDINNesi̇be AYDIN
Nesi̇be AYDIN
 

Similar to PHP Object Injection in Joomla...questo sconosciuto!

Speech Wordcamp 2010 - Giovambattista Fazioli
Speech Wordcamp 2010 - Giovambattista FazioliSpeech Wordcamp 2010 - Giovambattista Fazioli
Speech Wordcamp 2010 - Giovambattista FazioliNicola Ballotta
 
Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Giancarlo Valente
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniBackdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniSalvatore Lentini
 
PHP, non lo stesso vecchio linguaggio
PHP, non lo stesso vecchio linguaggioPHP, non lo stesso vecchio linguaggio
PHP, non lo stesso vecchio linguaggioMassimiliano Arione
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
Cyber Defense - How to find and manage zero-days
Cyber Defense - How to find and manage zero-days Cyber Defense - How to find and manage zero-days
Cyber Defense - How to find and manage zero-days Simone Onofri
 

Similar to PHP Object Injection in Joomla...questo sconosciuto! (11)

Speech Wordcamp 2010 - Giovambattista Fazioli
Speech Wordcamp 2010 - Giovambattista FazioliSpeech Wordcamp 2010 - Giovambattista Fazioli
Speech Wordcamp 2010 - Giovambattista Fazioli
 
Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioniBackdoor Coding: Analisi di una semplice backdoor e prime applicazioni
Backdoor Coding: Analisi di una semplice backdoor e prime applicazioni
 
PHP, non lo stesso vecchio linguaggio
PHP, non lo stesso vecchio linguaggioPHP, non lo stesso vecchio linguaggio
PHP, non lo stesso vecchio linguaggio
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
sicurezza e php
sicurezza e phpsicurezza e php
sicurezza e php
 
Cyber Defense - How to find and manage zero-days
Cyber Defense - How to find and manage zero-days Cyber Defense - How to find and manage zero-days
Cyber Defense - How to find and manage zero-days
 

PHP Object Injection in Joomla...questo sconosciuto!

  • 1. PHP Object Injection in Joomla...questo sconosciuto! Napoli, 12 Ottobre 2013
  • 2. PHP Object Injection in Joomla…questo sconosciuto! 2 About Me ● Egidio Romano (aka EgiX) ● Web Application Security Researcher dal 2007 ● Security Specialist presso Secunia dal 2013 ● https://www.linkedin.com/in/romanoegidio
  • 3. PHP Object Injection in Joomla…questo sconosciuto! Agenda ● PHP Object Injection * La funzione “unserialize” * OOP in PHP: autoloading e metodi magici ● PHP Object Injection in Joomla * CVE-2013-1453 e CVE-2013-3242 * Attacchi SQL Injection e Denial of Service 3
  • 4. PHP Object Injection in Joomla…questo sconosciuto! PHP Object Injection ● Classe di vulnerabilità scoperta da Stefan Esser nel 2009: “Shocking News in PHP Exploitation” ● Successivamente rivisitata sempre da Esser durante BlackHat USA 2010: “Utilizing Code Reuse/ROP in PHP Application Exploits” ● Ma da allora nessun'altra notizia a riguardo... 4
  • 5. PHP Object Injection in Joomla…questo sconosciuto! PHP Object Injection ...da Novembre 2011 ho iniziato a svolgere ricerca su questo tipo di vulnerabilità: ● CVE-2012-0694: SugarCRM <= 6.3.1 ● CVE-2012-0911: Tiki Wiki CMS <= 9.3 ● CVE-2012-5692: IP.Board <= 3.3.4 ● CVE-2013-1465: CubeCart <= 5.2.0 5
  • 6. PHP Object Injection in Joomla…questo sconosciuto! Il linguaggio PHP implementa un meccanismo di serializzazione che permette di convertire in formato stringa qualsiasi tipo di variabile utilizzando la funzione “serialize”. A partire da questa rappresentazione sotto forma di stringa è possibile ricostruire la variabile a run-time attraverso la funzione “unserialize”. 6 La funzione “unserialize”
  • 7. PHP Object Injection in Joomla…questo sconosciuto! Output: 7 La funzione “unserialize”
  • 8. PHP Object Injection in Joomla…questo sconosciuto! Output: 8 La funzione “unserialize”
  • 9. PHP Object Injection in Joomla…questo sconosciuto! http://php.net/manual/en/function.unserialize.php 9 La funzione “unserialize”
  • 10. PHP Object Injection in Joomla…questo sconosciuto! 10 OOP in PHP: autoloading Molti sviluppatori che producono applicazioni orientate agli oggetti creano un file sorgente PHP per ogni classe definita. Uno dei più grossi inconvenienti di questo approccio è la necessità di mantenere una lunga lista di inclusioni all'inizio di ogni script (un'inclusione per ogni classe). In PHP 5, ciò non è più necessario, in quanto è possibile definire una funzione __autoload() che viene automaticamente invocata in caso si stia cercando di usare una classe/interfaccia che non sia stata ancora definita. http://php.net/manual/it/language.oop5.autoload.php
  • 11. PHP Object Injection in Joomla…questo sconosciuto! 11 OOP in PHP: autoloading
  • 12. PHP Object Injection in Joomla…questo sconosciuto! 12 OOP in PHP: metodi magici I metodi magici sono sintatticamente riconoscibili attraverso il doppio underscore (“__”) iniziale. Essi sono metodi “speciali” che PHP invoca implicitamente ed automaticamente in particolari circostanze, ovvero al verificarsi di un evento. http://php.net/manual/it/language.oop5.magic.php
  • 13. PHP Object Injection in Joomla…questo sconosciuto! 13 OOP in PHP: metodi magici Nome del metodo Invocato quando… __construct viene creata una nuova istanza della classe __destruct viene distrutta un’istanza __call viene richiamato un metodo inaccessibile (nel contesto di un oggetto) __callStatic viene richiamato un metodo inaccessibile (nel contesto statico) __set viene usata in scrittura una proprietà inaccessibile __get viene usata in lettura una proprietà inaccessibile __sleep viene richiamata la funzione “serialize” con un’istanza __wakeup viene richiamata la funzione “unserialize” con un’istanza __toString viene utilizzato un oggetto come una stringa
  • 14. PHP Object Injection in Joomla…questo sconosciuto! 14 Un semplice esempio
  • 15. PHP Object Injection in Joomla…questo sconosciuto! PHP Object Injection in Joomla ● CVE-2013-1453: questa vulnerabilità si trova nel plugin di sistema “highlight”, all'interno del file /plugins/system/highlight/highlight.php ● CVE-2013-3242: questa vulnerabilità si trova nel plugin di sistema “remember me”, all'interno del file /plugins/system/remember/remember.php 15
  • 16. PHP Object Injection in Joomla…questo sconosciuto! CVE-2013-1453 16
  • 17. PHP Object Injection in Joomla…questo sconosciuto! CVE-2013-3242 17
  • 18. PHP Object Injection in Joomla…questo sconosciuto! 18
  • 19. PHP Object Injection in Joomla…questo sconosciuto! 19
  • 20. PHP Object Injection in Joomla…questo sconosciuto! 20 Exploiting Joomla Un attaccante potrebbe sfruttare entrambe le vulnerabilità per condurre attacchi SQL Injection e Denial of Service (DoS). Ciò è possibile sfruttando il metodo distruttore della classe “plgSystemDebug”, che a sua volta invoca il metodo “get” sulla proprietà “params”:
  • 21. PHP Object Injection in Joomla…questo sconosciuto! 21 Exploiting Joomla: SQL Injection Un attacco SQL Injection è possibile sfruttando il metodo “get” della classe “JCategories”, che alla linea 181 invoca il metodo “_load”, all'interno del quale viene eseguita una query SQL utilizzando alcune proprietà dell'oggetto:
  • 22. PHP Object Injection in Joomla…questo sconosciuto! 22 Exploiting Joomla: Denial of Service Un attacco Denial of Service è possibile sfruttando il metodo “get” della classe “JInput”, che a sua volta invoca il metodo “clean” sulla proprietà “filter”: Utilizzando un oggetto di tipo “JCacheStorageFile” è possibile cancellare ricorsivamente un'intera directory, poiché il metodo “JCacheStorageFile::clean” invocherà il metodo “_deleteFolder” passandogli come parametro una stringa avente come prefisso la proprietà “_root”.