Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

1

Share

Download to read offline

El poder de los reptiles: Hacer herramientas de hacking es fácil

Download to read offline

Hacer herramientas de hacking no es complicado. Estas

Related Books

Free with a 30 day trial from Scribd

See all

El poder de los reptiles: Hacer herramientas de hacking es fácil

  1. 1. El poder de los reptiles Hacer herramientas de hacking es fácil
  2. 2. >>> print(Me) https://twitter.com/ggdaniel http://cr0hn.com/me/ https://github.com/cr0hn/navajanegra
  3. 3. Aviso… • Las ideas aquí presentadas son fruto de la experiencia e investigación propia. • Las soluciones presentadas pueden no ser las mejores. Éstas son son solo mis propuestas
  4. 4. ¿Por qué?
  5. 5. ¿Por qué? Hackers != desarrolladores
  6. 6. ¿Por qué? Hackers != desarrolladores
  7. 7. ¿Por qué? Hackers != desarrolladores
  8. 8. ¿Por qué? Las herramientas de hacking muy mal diseñadas (en general) Aplicaciones no re-usables. Buenas prácticas… ¿qué es eso? Tolerancia a fallos pésima Obsesión por reinventar la rueda… Hackers != desarrolladores
  9. 9. ¿Por qué? Las herramientas de hacking muy mal diseñadas (en general) Aplicaciones no re-usables. Buenas prácticas… ¿qué es eso? Tolerancia a fallos pésima Obsesión por reinventar la rueda… why?! :) Hackers != desarrolladores
  10. 10. ¿De qué va esta charla? Hacer movidas tope chungas con Python Nociones de esenciales de desarrollo Buenas prácticas Como hacer puzzles de frameworks y cómo unirlos
  11. 11. ¿De qué va esta charla? Hacer movidas tope chungas con Python Nociones de esenciales de desarrollo Buenas prácticas Como hacer puzzles de frameworks y cómo unirlos Cómo hacer caca en Python
  12. 12. ¿Qué vas a aprender? Nociones de buenas prácticas Organizar y crear tu herramienta de hacking Casos concretos de uso Ejemplos prácticos de cada uso
  13. 13. ¿Porqué Python? Fácil Desarrollo muy rápido Infinidad de librerías Código limpio Buena relación: tiempo desarrollo / rendimiento
  14. 14. ¿Porqué Python 3.x? Python 2.7.x No será evolucionado Muchos problemas de unicode, textos, core… Python 3 Es el futuro de Python Incluye infinidad de nuevas características muy interesantes
  15. 15. ¡Manos a la obra!
  16. 16. Muchas herramientas no pueden ser usadas con un “import” Usarlas en nuestro código puede ser muy complicado Solo pueden ser usadas en linea de comandos Problema 1
  17. 17. Solución 1 Una correcta estructuración del proyecto Diseñar nuestra aplicación pensando en la potabilidad
  18. 18. Cómo 1 Wfuzz theHardvester
  19. 19. Cómo 1 Wfuzz theHardvester
  20. 20. Cómo 1
  21. 21. Cómo 1 lib
  22. 22. Cómo 1 lib
  23. 23. Cómo 1 lib doc
  24. 24. Cómo 1 lib doc
  25. 25. Cómo 1 lib doc bin
  26. 26. Cómo 1 lib doc bin
  27. 27. Cómo 1
  28. 28. Cómo 1
  29. 29. Cómo 1
  30. 30. Cómo 1 setup.py
  31. 31. Cómo 1 setup.py
  32. 32. Cómo 1 setup.py LICENSE
  33. 33. Cómo 1 setup.py LICENSE
  34. 34. Cómo 1 setup.py LICENSE README.rst
  35. 35. Cómo 1 setup.py LICENSE README.rst
  36. 36. Cómo 1 setup.py LICENSE README.rst __init__.py
  37. 37. Cómo 1 setup.py LICENSE README.rst __init__.py
  38. 38. Problema 2 Añadir nuevos parámetros de entrada Cada cambio implica modificar mucho del código
  39. 39. Problema 2
  40. 40. Problema 2
  41. 41. Problema 2 Verbosity
  42. 42. Problema 2 Verbosity
  43. 43. Problema 2 Verbosity 1
  44. 44. Problema 2 Verbosity 1 2
  45. 45. Solución 2 Objeto contenedor de parámetros de aplicación Posibilidad de comprobación exhaustiva de los parámetros
  46. 46. Cómo 2
  47. 47. Cómo 2
  48. 48. Cómo 2
  49. 49. Cómo 2 1
  50. 50. Problema 3 Obtención de resultados de ejecución no es sencilla El mejor de los casos: parsear XML/JSON/YAML…
  51. 51. Problema 3
  52. 52. Problema 3
  53. 53. Problema 3 is_2_multiple
  54. 54. Problema 3 is_2_multiple
  55. 55. Problema 3 is_2_multiple1 2 3
  56. 56. Solución 3 Objeto contenedor de resultados. Abstracción de resultado del formato de salida: XML/JSON…
  57. 57. Cómo 3
  58. 58. Cómo 3
  59. 59. Cómo 3
  60. 60. Cómo 3 1
  61. 61. Problema 4 Cada nueva UI implica cambiar mucho código. Inclusión de nueva funcionalidad no es sencilla. La aplicación no puede ser usada como librería.
  62. 62. Problema 4
  63. 63. Problema 4
  64. 64. Problema 4
  65. 65. Solución 4
  66. 66. Solución 4
  67. 67. Solución 4 API
  68. 68. Solución 4 API
  69. 69. Cómo 4 setup.py LICENSE README.rst __init__.py
  70. 70. Cómo 4 setup.py LICENSE README.rst __init__.py api.py
  71. 71. Cómo 4 setup.py LICENSE README.rst __init__.py api.py
  72. 72. Cómo 4
  73. 73. Cómo 4
  74. 74. Cómo 4
  75. 75. Cómo 4
  76. 76. Cómo 4
  77. 77. Cómo 4
  78. 78. Cómo 4 1 2
  79. 79. Problema 5 Mostrar información por pantalla con un print(…) Añadir nuevas localizaciones, además del print(…) Enviar información a 2 localizaciones concurrentemente
  80. 80. Problema 5
  81. 81. Problema 5
  82. 82. Problema 5
  83. 83. Problema 5
  84. 84. Problema 5 1
  85. 85. Problema 5 1 2
  86. 86. Problema 5
  87. 87. Problema 5
  88. 88. Problema 5
  89. 89. Problema 5
  90. 90. Problema 5 1 2
  91. 91. Problema 5
  92. 92. Problema 5
  93. 93. Problema 5 1 3 2 4
  94. 94. Solución 5 Punto de entrada unificado a los medios de salida
  95. 95. Solución 5
  96. 96. Solución 5 Hello world
  97. 97. Solución 5 Hello world
  98. 98. Cómo 5
  99. 99. Cómo 5 1 2 3
  100. 100. Cómo 5
  101. 101. Cómo 5
  102. 102. Cómo 5
  103. 103. Cómo 5
  104. 104. Problema 6 Instalar dependencias es muy tedioso Cada dependencias tiene su web oficial y su forma de instalarse
  105. 105. Solución 6 Usar pip para instalar dependencias Usar un fichero de dependencias: requirements.txt
  106. 106. Cómo 6 setup.py LICENSE README.rst __init__.py api.py
  107. 107. Cómo 6 setup.py LICENSE README.rst __init__.py requirements.txt api.py
  108. 108. Cómo 6 setup.py LICENSE README.rst __init__.py api.py requirements.txt
  109. 109. Cómo 6
  110. 110. Cómo 6
  111. 111. Problema 7 Las dependencias cruzadas entre proyectos. Varias versiones de una misma libraría en el sistema. Acceso como administrador.
  112. 112. Solución 7
  113. 113. Solución 7 ¿Un espacio virtual…?
  114. 114. Solución 7 ¿Un espacio virtual…?
  115. 115. Solución 7 ¿Un espacio virtual…?
  116. 116. Solución 7 ¿Un espacio virtual…?
  117. 117. Solución 7 ¿Un espacio virtual…?
  118. 118. Solución 7 ¿Un espacio virtual…?
  119. 119. Solución 7 ¿Un espacio virtual…?
  120. 120. Solución 7 ¿Un espacio virtual…?
  121. 121. Solución 7 ¿Un espacio virtual…?
  122. 122. Solución 7 ¿Un espacio virtual…?
  123. 123. Solución 7 ¿Un espacio virtual…?
  124. 124. Solución 7 ¿Un espacio virtual…?
  125. 125. Solución 7 ¿Un espacio virtual…?
  126. 126. Solución 7 ¿Un espacio virtual…?
  127. 127. Solución 7 ¿Y en Python?
  128. 128. Cómo 7
  129. 129. Cómo 7
  130. 130. Problema 8 Python es mucho más lento que otros lenguajes No no tiene coroutines integradas en el framework
  131. 131. Problema 8 Python es mucho más lento que otros lenguajes No no tiene coroutines integradas en el framework ¡¡¡¿¿Co..rru..ti….. queeee??!!!
  132. 132. Problema 8 Python es mucho más lento que otros lenguajes No no tiene coroutines integradas en el framework ¡¡¡¿¿Co..rru..ti….. queeee??!!!
  133. 133. Problema 8
  134. 134. Problema 8 def hello_coroutine(…): return get_web_page(…)
  135. 135. Problema 8 def hello_coroutine(…): return get_web_page(…) … hello_coroutine() … Run!
  136. 136. Problema 8 def hello_coroutine(…): return get_web_page(…) … hello_coroutine() … Run! get_web_page() 1
  137. 137. Problema 8 def hello_coroutine(…): return get_web_page(…) … hello_coroutine() … Run! get_web_page() 1 <—Respuesta
  138. 138. Problema 8 def hello_coroutine(…): return get_web_page(…) … hello_coroutine() … Run! get_web_page() 1 return get_web_page() <—Respuesta 2
  139. 139. Solución 8 Usar la librería asyncio (a.k.a. Tulip), incluida en Python 3.4 Instalarla en versiones anteriores de Python 3.4
  140. 140. Cómo 8
  141. 141. Cómo 8
  142. 142. Cómo 8 Bloqueo
  143. 143. Cómo 8 Bloqueo
  144. 144. Cómo 8 Bloqueo NO bloqueante
  145. 145. Problema 9 Python NO tiene multithreading real. Los hilos no son realmente hilos, sino una simulación. GIL (Global Interpreter Lock) CTRL+C
  146. 146. Problema 9 GIL thread 1 T0 thread 2
  147. 147. Problema 9 GIL thread 1 T1 thread 2
  148. 148. Problema 9 GIL thread 1 T2 thread 2
  149. 149. Problema 9 GIL thread 1 thread 2 T3
  150. 150. Problema 9 GIL thread 1 thread 2 T4
  151. 151. Solución 9 Usar multiprocessing
  152. 152. Cómo 9 Multithreading
  153. 153. Cómo 9 Multithreading
  154. 154. Cómo 9 Multithreading
  155. 155. Cómo 9 Multiprocessing
  156. 156. Cómo 9 Multiprocessing
  157. 157. Cómo 9 Multiprocessing
  158. 158. Problema 10 Ejecución de tareas en backgound Ejecución de procesos muy costosos computacionalmente Creación un flujo de información entre tareas
  159. 159. Solución 10 Usar Celery
  160. 160. Solución 10 Pero… ¿Qué es eso de Celery? ¿Se come?
  161. 161. Solución 10 Pero… ¿Qué es eso de Celery? ¿Se come?
  162. 162. Solución 10 Gestor de tareas distribuido
  163. 163. Consumidor3 Solución 10 Tarea Generadora Consumidor1 Consumidor2 Gestor de colas Conceptualmente
  164. 164. Consumidor3 Solución 10 Tarea Generadora Consumidor1 Consumidor2 Gestor de colas Conceptualmente
  165. 165. Consumidor3 Solución 10 Tarea Generadora Consumidor1 Consumidor2 Gestor de colas Conceptualmente
  166. 166. Consumidor3 Solución 10 Tarea Generadora Consumidor1 Consumidor2 Gestor de colas Conceptualmente
  167. 167. Registrar visita Solución 10 Enviar email Enviar email Caso concreto
  168. 168. Registrar visita Solución 10 Enviar email Enviar email Caso concreto send_mail(“text”)
  169. 169. Registrar visita Solución 10 Enviar email Enviar email Caso concreto send_mail(“text”)
  170. 170. Registrar visita Solución 10 Enviar email Enviar email Caso concreto send_mail(“text”)
  171. 171. Registrar visita Solución 10 Enviar email Enviar email Caso concreto send_mail(“text”)
  172. 172. Cómo 10 Tasks Servidor broker
  173. 173. Cómo 10
  174. 174. Cómo 10
  175. 175. Cómo 10
  176. 176. Cómo 10
  177. 177. Cómo 10 celery.py
  178. 178. Cómo 10 celery.py
  179. 179. Cómo 10
  180. 180. Cómo 10 main_task.py
  181. 181. Cómo 10 main_task.py
  182. 182. Cómo 10 main_task.py __init__.py
  183. 183. Cómo 10 main_task.py __init__.py
  184. 184. Cómo 10 celery.py
  185. 185. Cómo 10 celery.py __init__.py
  186. 186. Cómo 10 celery.py __init__.py
  187. 187. Cómo 10 celery.py __init__.py celeryconfig.py.py
  188. 188. Cómo 10 celery.py __init__.py celeryconfig.py
  189. 189. Cómo 10 celeryconfig.py
  190. 190. Cómo 10 celeryconfig.py
  191. 191. Cómo 10 celeryconfig.py
  192. 192. Cómo 10 celery.py
  193. 193. Cómo 10 celery.py
  194. 194. Cómo 10 celery.py
  195. 195. Cómo 10 main_task.py
  196. 196. Cómo 10 main_task.py
  197. 197. Cómo 10 main_task.py
  198. 198. Cómo 10 “pseudo-demo”
  199. 199. Cómo 10 “pseudo-demo”
  200. 200. Cómo 10 “pseudo-demo”
  201. 201. Cómo 10 “pseudo-demo”
  202. 202. Cómo 10 “pseudo-demo”
  203. 203. Problema 11 Quiero que se ejecuten tareas cada X tiempo
  204. 204. Solución 11 Usar Celery beat
  205. 205. Cómo 11 celeryconfig.py
  206. 206. Cómo 11 celeryconfig.py
  207. 207. Cómo 11 celeryconfig.py
  208. 208. Cómo 11 celeryconfig.py
  209. 209. Cómo 11 celeryconfig.py
  210. 210. Cómo 11 celeryconfig.py
  211. 211. Cómo 11 celeryconfig.py
  212. 212. Mini ejemplo: Análisis de Malware “cutre”
  213. 213. Mini ejemplo Celery + Yara
  214. 214. Mini ejemplo main_task.py
  215. 215. Mini ejemplo main_task.py
  216. 216. Mini ejemplo main_task.py
  217. 217. Mini ejemplo main_task.py export.py
  218. 218. Mini ejemplo main_task.py export.py
  219. 219. Mini ejemplo start.py
  220. 220. Mini ejemplo start.py
  221. 221. ¡ Gracias ! https://github.com/cr0hn/navajanegra
  • themarianas

    Jun. 25, 2019

Hacer herramientas de hacking no es complicado. Estas

Views

Total views

898

On Slideshare

0

From embeds

0

Number of embeds

32

Actions

Downloads

75

Shares

0

Comments

0

Likes

1

×