SlideShare une entreprise Scribd logo
1  sur  28
Cuidado con lo que te comes Jose Palazón (a.k.a. palako)
' or 1=1-- ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
<script>alert(1);</script> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Que más? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
<input type=”file”> ,[object Object],<form   method = &quot;POST&quot;   enctype = &quot;multipart/form-data&quot; action = &quot;documentos.php&quot; > <label   for = &quot;doc&quot; > Documento: </label> <input   type = &quot;file&quot;   name = &quot;doc&quot;   id = &quot;doc&quot; /> <input   type = &quot;submit&quot;   name = &quot;enviar&quot;   value = &quot;Enviar&quot; /> </form>
globals if ( $doc ) { echo   &quot;<b>Nuevo documento a&ntilde;adido</b><br/>&quot; ; echo   &quot;tmp: &quot;  .  $doc  .  &quot;</br>&quot; ; echo   &quot;Nombre: &quot;  .  $doc_name  .  &quot;</br>&quot; ; echo   &quot;Tipo: &quot;  .  $doc_type  .  &quot;</br>&quot; ; echo   &quot;Tama&ntilde;o: &quot;  .  $doc_size  .  &quot;</br>&quot; ; copy ( $doc ,  $docsPath . $doc_name ); }
globals ,[object Object],[object Object],[object Object]
$_FILES if ( $_FILES ) { echo   &quot;<b>Nuevo documento a&ntilde;adido</b><br/>&quot; ; echo   &quot;tmp: &quot;  .  $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ] .  &quot;</br>&quot; ; echo   &quot;Nombre: &quot;  .  $_FILES [ &quot;doc&quot; ][ &quot;name&quot; ] .  &quot;</br>&quot; ; echo   &quot;Tipo: &quot;  .  $_FILES [ &quot;doc&quot; ][ &quot;type&quot; ] .  &quot;</br>&quot; ; echo   &quot;Tama&ntilde;o: &quot;  .  $_FILES [ &quot;doc&quot; ][ &quot;size&quot; ] .   &quot;</br>&quot; ; if ( is_uploaded_file ( $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ])) move_uploaded_file ( $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ],  $docsPath . $_FILES [ &quot;doc&quot; ][ &quot;name&quot; ]); else echo   &quot;<br/<b>ERROR: No se puede acceder al fichero</b><br/>&quot; ; }
Sin filtros ,[object Object],[object Object],[object Object],[object Object],[object Object]
$FILES[“doc”][“type”] function   tipoValido( $type ) { $tiposValidos   =  array (    'image/jpeg' ,   'image/gif'  ,   'image/png'  ,   'image/bmp'  ,   'application/pdf' ,   'text/plain' ); return ( in_array ( $type ,  $tiposValidos )); }
$_FILES[“doc”][“type”] ,[object Object],[object Object]
mime_content_type function   tipoValido2( $doc ) { $tiposValidos   =  array (    'image/jpeg' ,   'image/gif'  ,   'image/png'  ,   'image/bmp'  ,   'application/pdf' ,   'text/plain' ); return ( in_array ( trim ( mime_content_type ( $doc )), $tiposValidos )); }
mime_content_type ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
$files[“doc”][“name”] function  extensionValida( $docName ) { $extensionesProhibidas   =  array (    'php' ,   ); $partes  =  split ( &quot;&quot; ,  $docName ); if  ( count ( $partes )>1) return (! in_array ( $partes [1], $extensionesProhibidas )); return ( false ); }
extensiones prohibidas ,[object Object],[object Object],[object Object]
eregi() function  extensionValida2( $docName ) { $extensionesValidas   =  array (    'jpg' ,   'gif'  ,   'png'  ,   'bmp'  ,   'pdf' ,   'txt' ); foreach ( $extensionesValidas   as   $ext ) if ( eregi ( $ext ,  $docName )) return ( true ); return ( false );    }
eregi() ,[object Object],[object Object],[object Object]
extensiones permitidas function  extensionValida3( $docName ) { $extensionesValidas   =  array (    'jpg' ,   'gif'  ,   'png'  ,   'bmp'  ,   'pdf' ,   'txt' ); $partes  =  split ( &quot;&quot; ,  $docName ); if  ( count ( $partes )>1) return ( in_array ( $partes [1],  $extensionesValidas )); return ( false ); }
extensiones permitidas ,[object Object],[object Object],[object Object]
¿que tiene de malo un .txt? function  extensionValida4( $docName ) { $extensionesProhibidas   =  array (    'php' ,   'php3' ,   'php4' ,   'php5' ,   'inc' ,   'shtml'   ); $partes  =  split ( &quot;&quot; ,  $docName ); if  ( count ( $partes )>1) return (! in_array ( $partes [ count ( $partes )-1], $extensionesProhibidas )); return ( false ); }
¿Que tiene de malo un .txt? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Vivimos para los retos hacking Reto V. Fase II.
Reto V. Fase II. ,[object Object],[object Object],[object Object],[object Object],[object Object]
Reto V. Fase II. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Reto V. Fase II ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Reto V. Fase II ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Reto V. Fase II ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Reto V. Fase II ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Contenu connexe

Tendances

Php03 variables externas
Php03 variables externasPhp03 variables externas
Php03 variables externas
Julio Pari
 

Tendances (20)

Desarrollo web ágil con Python y Django
Desarrollo web ágil con Python y DjangoDesarrollo web ágil con Python y Django
Desarrollo web ágil con Python y Django
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
3 curso php
3 curso php3 curso php
3 curso php
 
Script dofus
Script dofusScript dofus
Script dofus
 
Gonzalo lopez miranda
Gonzalo lopez mirandaGonzalo lopez miranda
Gonzalo lopez miranda
 
Taller I Coreis Python 10112009
Taller I Coreis Python 10112009Taller I Coreis Python 10112009
Taller I Coreis Python 10112009
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 
The Original Hacker número 8.
The Original Hacker número 8.The Original Hacker número 8.
The Original Hacker número 8.
 
Php basico
Php basicoPhp basico
Php basico
 
Exposicion de php
Exposicion de phpExposicion de php
Exposicion de php
 
Iniciacion a PHP (I)
Iniciacion a PHP (I)Iniciacion a PHP (I)
Iniciacion a PHP (I)
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Como generar un archivo doc desde php
Como generar un archivo doc desde phpComo generar un archivo doc desde php
Como generar un archivo doc desde php
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Ficheros Php
Ficheros PhpFicheros Php
Ficheros Php
 
Php03 variables externas
Php03 variables externasPhp03 variables externas
Php03 variables externas
 
PHP's FIG and PSRs
PHP's FIG and PSRsPHP's FIG and PSRs
PHP's FIG and PSRs
 
Manual PHP 7
Manual PHP 7Manual PHP 7
Manual PHP 7
 
4.Programación con PHP y MySQL
4.Programación con PHP y MySQL4.Programación con PHP y MySQL
4.Programación con PHP y MySQL
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 

En vedette

En vedette (11)

Asegúr@IT II - Análisis Forense Memoria Ram
Asegúr@IT II - Análisis Forense Memoria RamAsegúr@IT II - Análisis Forense Memoria Ram
Asegúr@IT II - Análisis Forense Memoria Ram
 
CyberCamp 2015: Low Hanging Fruit
CyberCamp 2015: Low Hanging FruitCyberCamp 2015: Low Hanging Fruit
CyberCamp 2015: Low Hanging Fruit
 
Asegúr@IT II - Seguridad en VoiP
Asegúr@IT II - Seguridad en VoiPAsegúr@IT II - Seguridad en VoiP
Asegúr@IT II - Seguridad en VoiP
 
Asegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivosAsegúr@IT III - Ataques SQL Injection masivos
Asegúr@IT III - Ataques SQL Injection masivos
 
Informática64 - Metadata Security
Informática64 - Metadata SecurityInformática64 - Metadata Security
Informática64 - Metadata Security
 
Pitufo Isa Server 2 K6
Pitufo Isa Server 2 K6Pitufo Isa Server 2 K6
Pitufo Isa Server 2 K6
 
Seguridad Wifi
Seguridad WifiSeguridad Wifi
Seguridad Wifi
 
Análisis Forense Metadatos
Análisis Forense MetadatosAnálisis Forense Metadatos
Análisis Forense Metadatos
 
Cazando Cibercriminales con: OSINT + Cloud Computing + Big Data
Cazando Cibercriminales con: OSINT + Cloud Computing + Big DataCazando Cibercriminales con: OSINT + Cloud Computing + Big Data
Cazando Cibercriminales con: OSINT + Cloud Computing + Big Data
 
No me indexes que me cacheo
No me indexes que me cacheoNo me indexes que me cacheo
No me indexes que me cacheo
 
Libro de Seguridad en Redes
Libro de Seguridad en RedesLibro de Seguridad en Redes
Libro de Seguridad en Redes
 

Similaire à Asegúr@IT II - Seguridad en Web

tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
octabio
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
Javier P.
 

Similaire à Asegúr@IT II - Seguridad en Web (20)

Curso de Django | Django Course
Curso de Django | Django CourseCurso de Django | Django Course
Curso de Django | Django Course
 
Taller II Coreis Python 13112009
Taller II Coreis Python 13112009Taller II Coreis Python 13112009
Taller II Coreis Python 13112009
 
Código Bonito con PHP
Código Bonito con PHPCódigo Bonito con PHP
Código Bonito con PHP
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
 
Formularios
FormulariosFormularios
Formularios
 
PHP
PHPPHP
PHP
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
LFI & RFI
LFI & RFI LFI & RFI
LFI & RFI
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
OWASP y seguridad WordPress
OWASP y seguridad WordPressOWASP y seguridad WordPress
OWASP y seguridad WordPress
 
Clases de php
Clases de phpClases de php
Clases de php
 
Varnish para meros mortales
Varnish para meros mortalesVarnish para meros mortales
Varnish para meros mortales
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
 
Plone en La Jornada
Plone en La JornadaPlone en La Jornada
Plone en La Jornada
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Documentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrezDocumentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrez
 
Crear modulos
Crear modulosCrear modulos
Crear modulos
 

Plus de Chema Alonso

Plus de Chema Alonso (20)

Índice Pentesting con Kali 2.0
Índice Pentesting con Kali 2.0Índice Pentesting con Kali 2.0
Índice Pentesting con Kali 2.0
 
Configurar y utilizar Latch en Magento
Configurar y utilizar Latch en MagentoConfigurar y utilizar Latch en Magento
Configurar y utilizar Latch en Magento
 
New Paradigms of Digital Identity: Authentication & Authorization as a Servic...
New Paradigms of Digital Identity: Authentication & Authorization as a Servic...New Paradigms of Digital Identity: Authentication & Authorization as a Servic...
New Paradigms of Digital Identity: Authentication & Authorization as a Servic...
 
CritoReto 4: Buscando una aguja en un pajar
CritoReto 4: Buscando una aguja en un pajarCritoReto 4: Buscando una aguja en un pajar
CritoReto 4: Buscando una aguja en un pajar
 
Dorking & Pentesting with Tacyt
Dorking & Pentesting with TacytDorking & Pentesting with Tacyt
Dorking & Pentesting with Tacyt
 
Pentesting con PowerShell: Libro de 0xWord
Pentesting con PowerShell: Libro de 0xWordPentesting con PowerShell: Libro de 0xWord
Pentesting con PowerShell: Libro de 0xWord
 
Foca API v0.1
Foca API v0.1Foca API v0.1
Foca API v0.1
 
Recuperar dispositivos de sonido en Windows Vista y Windows 7
Recuperar dispositivos de sonido en Windows Vista y Windows 7Recuperar dispositivos de sonido en Windows Vista y Windows 7
Recuperar dispositivos de sonido en Windows Vista y Windows 7
 
It's a Kind of Magic
It's a Kind of MagicIt's a Kind of Magic
It's a Kind of Magic
 
Ingenieros y hackers
Ingenieros y hackersIngenieros y hackers
Ingenieros y hackers
 
Cuarta Edición del Curso Online de Especialización en Seguridad Informática p...
Cuarta Edición del Curso Online de Especialización en Seguridad Informática p...Cuarta Edición del Curso Online de Especialización en Seguridad Informática p...
Cuarta Edición del Curso Online de Especialización en Seguridad Informática p...
 
Auditoría de TrueCrypt: Informe final fase II
Auditoría de TrueCrypt: Informe final fase IIAuditoría de TrueCrypt: Informe final fase II
Auditoría de TrueCrypt: Informe final fase II
 
El juego es el mismo
El juego es el mismoEl juego es el mismo
El juego es el mismo
 
El Hardware en Apple ¿Es tan bueno?
El Hardware en Apple ¿Es tan bueno?El Hardware en Apple ¿Es tan bueno?
El Hardware en Apple ¿Es tan bueno?
 
Latch en Linux (Ubuntu): El cerrojo digital
Latch en Linux (Ubuntu): El cerrojo digitalLatch en Linux (Ubuntu): El cerrojo digital
Latch en Linux (Ubuntu): El cerrojo digital
 
Hacking con Python
Hacking con PythonHacking con Python
Hacking con Python
 
Shuabang Botnet
Shuabang BotnetShuabang Botnet
Shuabang Botnet
 
Tu iPhone es tan (in)seguro como tu Windows
Tu iPhone es tan (in)seguro como tu WindowsTu iPhone es tan (in)seguro como tu Windows
Tu iPhone es tan (in)seguro como tu Windows
 
Codemotion ES 2014: Love Always Takes Care & Humility
Codemotion ES 2014: Love Always Takes Care & HumilityCodemotion ES 2014: Love Always Takes Care & Humility
Codemotion ES 2014: Love Always Takes Care & Humility
 
Analizando la efectividad de ataques de correlación pasivos en la red de ano...
Analizando la efectividad de ataques de correlación pasivos en la red de ano...Analizando la efectividad de ataques de correlación pasivos en la red de ano...
Analizando la efectividad de ataques de correlación pasivos en la red de ano...
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (12)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

Asegúr@IT II - Seguridad en Web

  • 1. Cuidado con lo que te comes Jose Palazón (a.k.a. palako)
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. globals if ( $doc ) { echo &quot;<b>Nuevo documento a&ntilde;adido</b><br/>&quot; ; echo &quot;tmp: &quot; . $doc . &quot;</br>&quot; ; echo &quot;Nombre: &quot; . $doc_name . &quot;</br>&quot; ; echo &quot;Tipo: &quot; . $doc_type . &quot;</br>&quot; ; echo &quot;Tama&ntilde;o: &quot; . $doc_size . &quot;</br>&quot; ; copy ( $doc , $docsPath . $doc_name ); }
  • 7.
  • 8. $_FILES if ( $_FILES ) { echo &quot;<b>Nuevo documento a&ntilde;adido</b><br/>&quot; ; echo &quot;tmp: &quot; . $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ] . &quot;</br>&quot; ; echo &quot;Nombre: &quot; . $_FILES [ &quot;doc&quot; ][ &quot;name&quot; ] . &quot;</br>&quot; ; echo &quot;Tipo: &quot; . $_FILES [ &quot;doc&quot; ][ &quot;type&quot; ] . &quot;</br>&quot; ; echo &quot;Tama&ntilde;o: &quot; . $_FILES [ &quot;doc&quot; ][ &quot;size&quot; ] . &quot;</br>&quot; ; if ( is_uploaded_file ( $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ])) move_uploaded_file ( $_FILES [ &quot;doc&quot; ][ &quot;tmp_name&quot; ], $docsPath . $_FILES [ &quot;doc&quot; ][ &quot;name&quot; ]); else echo &quot;<br/<b>ERROR: No se puede acceder al fichero</b><br/>&quot; ; }
  • 9.
  • 10. $FILES[“doc”][“type”] function tipoValido( $type ) { $tiposValidos = array ( 'image/jpeg' , 'image/gif' , 'image/png' , 'image/bmp' , 'application/pdf' , 'text/plain' ); return ( in_array ( $type , $tiposValidos )); }
  • 11.
  • 12. mime_content_type function tipoValido2( $doc ) { $tiposValidos = array ( 'image/jpeg' , 'image/gif' , 'image/png' , 'image/bmp' , 'application/pdf' , 'text/plain' ); return ( in_array ( trim ( mime_content_type ( $doc )), $tiposValidos )); }
  • 13.
  • 14. $files[“doc”][“name”] function extensionValida( $docName ) { $extensionesProhibidas = array ( 'php' , ); $partes = split ( &quot;&quot; , $docName ); if ( count ( $partes )>1) return (! in_array ( $partes [1], $extensionesProhibidas )); return ( false ); }
  • 15.
  • 16. eregi() function extensionValida2( $docName ) { $extensionesValidas = array ( 'jpg' , 'gif' , 'png' , 'bmp' , 'pdf' , 'txt' ); foreach ( $extensionesValidas as $ext ) if ( eregi ( $ext , $docName )) return ( true ); return ( false ); }
  • 17.
  • 18. extensiones permitidas function extensionValida3( $docName ) { $extensionesValidas = array ( 'jpg' , 'gif' , 'png' , 'bmp' , 'pdf' , 'txt' ); $partes = split ( &quot;&quot; , $docName ); if ( count ( $partes )>1) return ( in_array ( $partes [1], $extensionesValidas )); return ( false ); }
  • 19.
  • 20. ¿que tiene de malo un .txt? function extensionValida4( $docName ) { $extensionesProhibidas = array ( 'php' , 'php3' , 'php4' , 'php5' , 'inc' , 'shtml' ); $partes = split ( &quot;&quot; , $docName ); if ( count ( $partes )>1) return (! in_array ( $partes [ count ( $partes )-1], $extensionesProhibidas )); return ( false ); }
  • 21.
  • 22. Vivimos para los retos hacking Reto V. Fase II.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.