Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Rooted 2018 - Crawlino: The next level of crawling systems

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 169 Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (16)

Similares a Rooted 2018 - Crawlino: The next level of crawling systems (20)

Anuncio

Más de Daniel Garcia (a.k.a cr0hn) (20)

Más reciente (20)

Anuncio

Rooted 2018 - Crawlino: The next level of crawling systems

  1. 1. T H E N E X T L E V E L O F T H E C R A W L I N G S Y S T E M S C R A W L I N O
  2. 2. < / S P A M > M E ( C R 0 H N ) < / S P A M > • C r e a t o r / c o - c r e a t o r m a n y s e c u r i t y t o o l s • S e c u r i t y r e s e a r c h e r / e t h i c a l h a c k i n g • C h a p t e r L e a d e r O W A S P M a d r i d • P y t h o n d e v e l o p e r y t e a c h e r • W o r k i n g o n B B V A - L a b s https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
  3. 3. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel ¿ D E Q U É V A E S T A C H A R L A ?
  4. 4. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel ¿ D E Q U É V A E S T A C H A R L A ?
  5. 5. @ggdaniel ¿ Q U É E S U N C R A W L E R ? "A Web crawler, sometimes called a spider, is an Internet bot that systematically browses the World Wide Web, typically for the purpose of Web indexing (web spidering).”
  6. 6. @ggdaniel ¿ Q U É E S U N C R A W L E R ? "A Web crawler, sometimes called a spider, is an Internet bot that systematically browses the World Wide Web, typically for the purpose of Web indexing (web spidering).”
  7. 7. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel ¿ Q U É H A Y D E N U E V O , V I E J O ?
  8. 8. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  9. 9. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ? • Frameworks farragosos • Necesitas sabre programar (más o menos bien) • Solo para web
  10. 10. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ? • Frameworks farragosos • Necesitas sabre programar (más o menos bien) • Solo para web • Horribles de mantener
  11. 11. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  12. 12. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  13. 13. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  14. 14. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ? https://jarroba.com/scraping-java-jsoup-ejemplos/
  15. 15. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  16. 16. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  17. 17. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel C R E E M O S N U E V A S R E G L A S
  18. 18. @ggdaniel N U E V A S R E G L A S
  19. 19. @ggdaniel N U E V A S R E G L A S
  20. 20. @ggdaniel N U E V A S R E G L A S
  21. 21. @ggdaniel N U E V A S R E G L A S
  22. 22. @ggdaniel N U E V A S R E G L A S R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L
  23. 23. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L N U E V A S R E G L A S
  24. 24. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B N U E V A S R E G L A S
  25. 25. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B N U E V A S R E G L A S
  26. 26. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A N U E V A S R E G L A S
  27. 27. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A N U E V A S R E G L A S
  28. 28. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A R E G L A - 4 : N O R E I N V E N T A R L A R U E D A N U E V A S R E G L A S
  29. 29. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L
  30. 30. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L
  31. 31. @ggdaniel R E G L A - 1 : P R O G R A M A R D E B E R Í A S E R O P C I O N A L
  32. 32. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B
  33. 33. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B
  34. 34. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B Port: 22
  35. 35. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B Port: 22 Ports: 8000, …
  36. 36. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B Port: 22 Ports: 8000, … Port: 5673, …
  37. 37. @ggdaniel R E G L A - 2 : U N C R A W L E R N O S O L O E S W E B Port: 22 Ports: 8000, … Port: 5673, … Ports: ….
  38. 38. @ggdaniel R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A
  39. 39. @ggdaniel R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A Legibilidad
  40. 40. @ggdaniel R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A Legibilidad Fácil de aprender
  41. 41. @ggdaniel R E G L A - 3 : L A M A N T E N I B I L I D A D E S U N A M Á X I M A Legibilidad Fácil de aprender
  42. 42. @ggdaniel R E G L A - 4 : N O R E I N V E N T A R L A R U E D A
  43. 43. @ggdaniel R E G L A - 4 : N O R E I N V E N T A R L A R U E D A
  44. 44. @ggdaniel R E G L A - 4 : N O R E I N V E N T A R L A R U E D A
  45. 45. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel C R A W L I N O
  46. 46. @ggdaniel ¿ Q U É E S C R A W L I N O ?
  47. 47. @ggdaniel ¿ Q U É E S C R A W L I N O ? Un sistema de crawling desarrollado desde cero… …que cumple las 4 reglas
  48. 48. @ggdaniel ¿ Q U É E S C R A W L I N O ? Un sistema de crawling desarrollado desde cero… …que cumple las 4 reglas
  49. 49. @ggdaniel E N O T R A S P A L A B R A S … “Una navaja suiza que nos permite crear herramientas y automatizaciones usando ficheros de definición de reglas.”
  50. 50. @ggdaniel E N O T R A S P A L A B R A S … “Una navaja suiza que nos permite crear herramientas y automatizaciones usando ficheros de definición de reglas.”
  51. 51. @ggdaniel L A S P R E S E N T A C I O N E S
  52. 52. @ggdaniel L A S P R E S E N T A C I O N E S C r a w l i n o
  53. 53. @ggdaniel L A S P R E S E N T A C I O N E S C r a w l i n o
  54. 54. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino
  55. 55. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino Alpha
  56. 56. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino CRAWLINO Alpha
  57. 57. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel ¿ P A R A Q U É S I R V E ?
  58. 58. @ggdaniel R E S U M E N R Á P I D O - C O N C E P T O CRAWLINO
  59. 59. @ggdaniel R E S U M E N R Á P I D O - C O N C E P T O CRAWLINO Definition
  60. 60. @ggdaniel R E S U M E N R Á P I D O - C O N C E P T O CRAWLINO Definition Actions
  61. 61. @ggdaniel I N T E R N A L S - B R I E F CRAWLINO
  62. 62. @ggdaniel I N T E R N A L S - B R I E F Crawlers CRAWLINO
  63. 63. @ggdaniel I N T E R N A L S - B R I E F Crawlers Engine CRAWLINO
  64. 64. @ggdaniel I N T E R N A L S - B R I E F Crawlers Engine Plugins CRAWLINO
  65. 65. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO
  66. 66. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO
  67. 67. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO Dónde
  68. 68. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO Dónde Cómo
  69. 69. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO Dónde Cómo Qué
  70. 70. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué
  71. 71. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono
  72. 72. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I GStep 1
  73. 73. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I G S O U R C E S Step 1 Step 2
  74. 74. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I G S O U R C E S I N P U T Step 1 Step 2 Step 3
  75. 75. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I G S O U R C E S I N P U T E X T R A C T O R S Step 1 Step 2 Step 3 Step 4
  76. 76. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L Step 1 Step 2 Step 3 Step 4 Step 5
  77. 77. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué De qué manera Qué retengo Cómo reacciono C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L Step 1 Step 2 Step 3 Step 4 Step 5 Step 6 H O O K S
  78. 78. @ggdaniel M O D E L O D E F A S E S C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L Crawling global config actions Steps Locations where to get the data How to get the data What data want to extract Action to take after executionH O O K S How to store data in a database CRAWLINO
  79. 79. @ggdaniel E J E M P L O - E N U M E R A C I Ó N D E U S U A R I O S C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L - Steps http://my_web_site.com/login.php?user=X web Regex: finding 200 Notify by eMail Store results in MongoDB CRAWLINO H O O K S
  80. 80. @ggdaniel E J E M P L O - E S C A N E O D E P U E R T O S C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L - Steps 239.12.1.239 Open Socket Finding port status ‘open’ Notify by slack Store results in MongoDB CRAWLINO H O O K S
  81. 81. @ggdaniel E J E M P L O - E X P L O T A C I Ó N V U L N E R A B I L I D A D E S C O N F I G S O U R C E S I N P U T E X T R A C T O R S M O D E L - Steps www.my_server.com domain Get apache specific version Launch Metasploit Store results in MongoDB CRAWLINO H O O K S
  82. 82. @ggdaniel CRAWLINO I N S T A L A N D O C R A W L I N O
  83. 83. @ggdaniel CRAWLINO D E M O 1 - C R A W L E R S E N C I L L O
  84. 84. @ggdaniel CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=1 001.yaml D E M O 1 - C R A W L E R S E N C I L L O
  85. 85. @ggdaniel CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=1 001.yaml > crawlino -v rooted/001.yaml > python dummy_site_ids.py Server: Crawlino command: D E M O 1 - C R A W L E R S E N C I L L O
  86. 86. @ggdaniel I N T R O D U C C I Ó N A L O S G E N E R A D O R E S CRAWLINO
  87. 87. @ggdaniel I N T R O D U C C I Ó N A L O S G E N E R A D O R E S • Capaces de generar datos. • Empotrados en el propio fichero de definición CRAWLINO
  88. 88. @ggdaniel I N T R O D U C C I Ó N A L O S G E N E R A D O R E S • Capaces de generar datos. • Empotrados en el propio fichero de definición CRAWLINO • Generadores actuales: ➡ Textos aleatorios ➡ Rangos numéricos ➡ Valores específicos ➡ Wordlists
  89. 89. @ggdaniel CRAWLINO D E M O 1 - C R A W L E R S E N C I L L O + G E N E R A D O R E S
  90. 90. @ggdaniel CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 10) 002.yaml D E M O 1 - C R A W L E R S E N C I L L O + G E N E R A D O R E S
  91. 91. @ggdaniel CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 10) 002.yaml D E M O 1 - C R A W L E R S E N C I L L O + G E N E R A D O R E S
  92. 92. @ggdaniel CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 10) 002.yaml > crawlino -v rooted/002.yaml > python dummy_site_ids.py Server: Crawlino command: D E M O 1 - C R A W L E R S E N C I L L O + G E N E R A D O R E S
  93. 93. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I ) CRAWLINO
  94. 94. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) 003.yaml
  95. 95. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) 003.yaml
  96. 96. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) 003.yaml > crawlino -v rooted/003.yaml > nc -v -l -k 10000 Server: Crawlino command:
  97. 97. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) 003.yaml > crawlino -w processes -c 10 -v rooted/003.yaml > nc -v -l -k 10000 Server: Crawlino command:
  98. 98. @ggdaniel D E M O 1 - C R A W L E R E X T E N S O + G E N E R A D O R E S ( I I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) 003.yaml > crawlino -w processes -c 10 -v rooted/003.yaml > nc -v -l -k 10000 Server: Crawlino command:
  99. 99. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO
  100. 100. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404
  101. 101. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404 Paso 1 - Probar en Postman
  102. 102. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404
  103. 103. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 20) extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: result inputVar: status_code rules: - type: regex config: order: 1 expressions: - 200 Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404
  104. 104. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 20) extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: result inputVar: status_code rules: - type: regex config: order: 1 expressions: - 200 Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404
  105. 105. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO name: SimpleWebRequest description: Do a simple HTTP request sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 20) extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: result inputVar: status_code rules: - type: regex config: order: 1 expressions: - 200 > crawlino -v rooted/004.yaml > python dummy_site_ids.py Server: Crawlino command: Supuesto 1 El servicio dummy_site_ids que devolverá un código 200 un el id sea 9. En otro caso devolverá un 404
  106. 106. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO Supuesto 2 Igual que supuesto 1, pero además, queremos obtener valor del id que ha devuelto 200
  107. 107. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO Supuesto 2 Igual que supuesto 1, pero además, queremos obtener valor del id que ha devuelto 200
  108. 108. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO name: SimpleWebRequest sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 20) extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: result report: request.url inputVar: status_code rules: - type: regex config: order: 1 expressions: - 200 Supuesto 2 Igual que supuesto 1, pero además, queremos obtener valor del id que ha devuelto 200
  109. 109. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO name: SimpleWebRequest sources: - type: web config: url: http: //127.0.0.1:10000 input: type: web config: httpMethod: GET url: /?id=$generator(numeric, 1, 20) extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: result report: request.url inputVar: status_code rules: - type: regex config: order: 1 expressions: - 200 > crawlino -v rooted/005.yaml > python dummy_site_ids.py Server: Crawlino command: Supuesto 2 Igual que supuesto 1, pero además, queremos obtener valor del id que ha devuelto 200
  110. 110. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO
  111. 111. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO Supuesto 3 Quiero hacer un bruteforzing de usuario / contraseña. El sitio web me devolverá el texto “Autentication done” si el user / pass es correcto
  112. 112. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO Paso 1 - Probar en Postman Supuesto 3 Quiero hacer un bruteforzing de usuario / contraseña. El sitio web me devolverá el texto “Autentication done” si el user / pass es correcto
  113. 113. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO Supuesto 3 Quiero hacer un bruteforzing de usuario / contraseña. El sitio web me devolverá el texto “Autentication done” si el user / pass es correcto
  114. 114. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO name: SimpleWebRequest sources: - type: web config: url: http: //127.0.0.1:11000 input: type: web config: httpMethod: POST contentType: json data: '{"user": "admin", "password": "$generator(wordlist, password-small)"}' url: /user/auth extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: myVar inputVar: content report: request.data rules: - type: regex config: order: 1 expressions: - Authentication done Supuesto 3 Quiero hacer un bruteforzing de usuario / contraseña. El sitio web me devolverá el texto “Autentication done” si el user / pass es correcto
  115. 115. @ggdaniel D E M O 3 - C R A W L E R Y F I L T R O S ( I I ) CRAWLINO name: SimpleWebRequest sources: - type: web config: url: http: //127.0.0.1:11000 input: type: web config: httpMethod: POST contentType: json data: '{"user": "admin", "password": "$generator(wordlist, password-small)"}' url: /user/auth extractors: - ruleSet: name: rule1 description: check if server returns 200 mapTo: myVar inputVar: content report: request.data rules: - type: regex config: order: 1 expressions: - Authentication done > crawlino -v rooted/006.yaml > python dummy_site_user_auth.py Server: Crawlino command: Supuesto 3 Quiero hacer un bruteforzing de usuario / contraseña. El sitio web me devolverá el texto “Autentication done” si el user / pass es correcto
  116. 116. @ggdaniel D E M O 4 - C R A W L E R Y O T R O S P R O T O C O L O S ( I ) CRAWLINO
  117. 117. @ggdaniel D E M O 4 - C R A W L E R Y O T R O S P R O T O C O L O S ( I ) CRAWLINO Supuesto 4 Quiero hacer un escaneo de puertos de un Host
  118. 118. @ggdaniel D E M O 4 - C R A W L E R Y O T R O S P R O T O C O L O S ( I ) CRAWLINO Supuesto 4 Quiero hacer un escaneo de puertos de un Host
  119. 119. @ggdaniel D E M O 4 - C R A W L E R Y O T R O S P R O T O C O L O S ( I ) CRAWLINO name: BasicScrappingCrawler sources: - type: domain config: domain: 127.0.0.1 input: type: raw_socket config: port: $generator(numeric, 9999, 10010) proto: tcp timeout: 0.05 extractors: - ruleSet: name: rule1 description: detect an open port mapTo: myVar report: original inputVar: status rules: - type: regex config: expressions: - open Supuesto 4 Quiero hacer un escaneo de puertos de un Host
  120. 120. @ggdaniel D E M O 4 - C R A W L E R Y O T R O S P R O T O C O L O S ( I ) CRAWLINO name: BasicScrappingCrawler sources: - type: domain config: domain: 127.0.0.1 input: type: raw_socket config: port: $generator(numeric, 9999, 10010) proto: tcp timeout: 0.05 extractors: - ruleSet: name: rule1 description: detect an open port mapTo: myVar report: original inputVar: status rules: - type: regex config: expressions: - open > crawlino -v rooted/007.yaml > python dummy_site_ids.py Server: Crawlino command: Supuesto 4 Quiero hacer un escaneo de puertos de un Host
  121. 121. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L O S ( I I ) CRAWLINO
  122. 122. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L O S ( I I ) CRAWLINO Supuesto 5 Detectar puerto del servidor Redis abierto y comprobar si se ha ejecutado un comando
  123. 123. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L O S ( I I ) CRAWLINO Supuesto 5 Detectar puerto del servidor Redis abierto y comprobar si se ha ejecutado un comando
  124. 124. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L O S ( I I ) CRAWLINO name: RedisBasicScan sources: - type: domain config: domain: 127.0.0.1 input: type: raw_socket config: port: $generator(numeric, 6378, 6380) proto: tcp timeout: 0.05 data: "$4rnINFOrn" extractors: - ruleSet: name: rule1 description: detect an open port mapTo: redisVersion report: group inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) Supuesto 5 Detectar puerto del servidor Redis abierto y comprobar si se ha ejecutado un comando
  125. 125. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L O S ( I I ) CRAWLINO name: RedisBasicScan sources: - type: domain config: domain: 127.0.0.1 input: type: raw_socket config: port: $generator(numeric, 6378, 6380) proto: tcp timeout: 0.05 data: "$4rnINFOrn" extractors: - ruleSet: name: rule1 description: detect an open port mapTo: redisVersion report: group inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) > crawlino -v rooted/008.yaml > docker run -d -p 6379:6379 redis Server: Crawlino command: Supuesto 5 Detectar puerto del servidor Redis abierto y comprobar si se ha ejecutado un comando
  126. 126. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L S ( I I ) CRAWLINO
  127. 127. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L S ( I I ) CRAWLINO Supuesto 6 Queremos detectar redis abiertos en un rango de red
  128. 128. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L S ( I I ) CRAWLINO Supuesto 6 Queremos detectar redis abiertos en un rango de red
  129. 129. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L S ( I I ) CRAWLINO name: RedisBasicScan sources: - type: ip config: ip: 127.0.0.$generator(numeric, 1, 4) input: type: raw_socket config: port: 6379 proto: tcp timeout: 0.05 data: "$4rnINFOrn" extractors: - ruleSet: name: rule1 description: detect an open port mapTo: redisVersion report: host inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) Supuesto 6 Queremos detectar redis abiertos en un rango de red
  130. 130. @ggdaniel D E M O 5 - C R A W L E R Y O T R O S P R O T O C O L S ( I I ) CRAWLINO name: RedisBasicScan sources: - type: ip config: ip: 127.0.0.$generator(numeric, 1, 4) input: type: raw_socket config: port: 6379 proto: tcp timeout: 0.05 data: "$4rnINFOrn" extractors: - ruleSet: name: rule1 description: detect an open port mapTo: redisVersion report: host inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) > crawlino -v rooted/009.yaml > docker run -d -p 6379:6379 redis Server: Crawlino command: Supuesto 6 Queremos detectar redis abiertos en un rango de red
  131. 131. @ggdaniel V A R I A B L E S CRAWLINO
  132. 132. @ggdaniel V A R I A B L E S • Crawlino es capaz de resolver variables de entorno en el fichero de configuración CRAWLINO
  133. 133. @ggdaniel V A R I A B L E S • Crawlino es capaz de resolver variables de entorno en el fichero de configuración CRAWLINO • La variables pueden ser pasadas por el propio sistema operativo o a través de Crawlino
  134. 134. @ggdaniel V A R I A B L E S • Crawlino es capaz de resolver variables de entorno en el fichero de configuración CRAWLINO • La variables pueden ser pasadas por el propio sistema operativo o a través de Crawlino
  135. 135. @ggdaniel D E M O 6 - H O O K S CRAWLINO
  136. 136. @ggdaniel D E M O 6 - H O O K S CRAWLINO Supuesto 7 Queremos enviar un mail que nos notifique Redis abiertos en nuestra red
  137. 137. @ggdaniel D E M O 6 - H O O K S CRAWLINO 010.yaml Supuesto 7 Queremos enviar un mail que nos notifique Redis abiertos en nuestra red
  138. 138. @ggdaniel D E M O 6 - H O O K S CRAWLINO name: RedisBasicScan … extractors: - ruleSet: name: rule1 mapTo: redisVersion report: host inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) hooks: - type: mail config: from: $FROM_MAIL$ to: $TO_MAIL$ subject: Host with Redis open! bodyField: redisVersion server: user: $FROM_MAIL$ smtp: smtp.gmail.com password: $MAIL_PASSWORD$ 010.yaml Supuesto 7 Queremos enviar un mail que nos notifique Redis abiertos en nuestra red
  139. 139. @ggdaniel D E M O 6 - H O O K S CRAWLINO name: RedisBasicScan … extractors: - ruleSet: name: rule1 mapTo: redisVersion report: host inputVar: data rules: - type: regex config: reportGroup: 2 expressions: - (redis_version:)([d.]+)(r) hooks: - type: mail config: from: $FROM_MAIL$ to: $TO_MAIL$ subject: Host with Redis open! bodyField: redisVersion server: user: $FROM_MAIL$ smtp: smtp.gmail.com password: $MAIL_PASSWORD$ 010.yaml > docker run -d -p 6379:6379 redis Server: Crawlino command: > crawlino -e FROM_MAIL=cr0hn@cr0hn.com -e TO_MAIL=daniel@abirtone.com -E .env -v rooted/010.yaml Supuesto 7 Queremos enviar un mail que nos notifique Redis abiertos en nuestra red
  140. 140. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N CRAWLINO
  141. 141. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N CRAWLINO Supuesto 8 Quiero reutilizar definiciones de crawlers anteriores. Completas o parciales
  142. 142. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C O M P L E T O CRAWLINO
  143. 143. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C O M P L E T O CRAWLINO name: BaseWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: $TARGER$:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) base-crawler.yaml
  144. 144. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C O M P L E T O CRAWLINO name: BaseWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: $TARGER$:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) base-crawler.yaml
  145. 145. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C O M P L E T O CRAWLINO name: BaseWebRequest description: Do a simple HTTP request tags: - general - basic sources: - type: web config: url: $TARGER$:10000 input: type: web config: httpMethod: GET timeout: 0.2 httpHeaders: Host: $generator(random, string, 20, 20) url: /?id=$generator(numeric, 1, 10) base-crawler.yaml name: MyCustomCrawler description: My custom crawler tags: - custom extends: base-crawler.yaml input: config: httpHeaders: Content-Type: application/x- www-form- urlencoded my-crawler.yaml
  146. 146. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : P A R T I A L S CRAWLINO
  147. 147. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : P A R T I A L S CRAWLINO - type: web config: url: $TARGER$:10000 partial-port-1000.yaml
  148. 148. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : P A R T I A L S CRAWLINO - type: web config: url: $TARGER$:10000 partial-port-1000.yaml - type: mail config: from: $FROM_MAIL$ to: $TO_MAIL$ subject: Host with Redis open! bodyField: redisVersion server: user: $FROM_MAIL$ smtp: smtp.gmail.com password: $MAIL_PASSWORD$ partial-mail.yaml
  149. 149. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : P A R T I A L S CRAWLINO - type: web config: url: $TARGER$:10000 partial-port-1000.yaml name: MyCustomPartialCrawler sources: - type: $import(partial-port-1000) input: type: raw_socket config: port: 6379 proto: tcp timeout: 0.05 data: "$4rnINFOrn" hooks: - type: $import(partial-mail) my-partial-crawler.yaml - type: mail config: from: $FROM_MAIL$ to: $TO_MAIL$ subject: Host with Redis open! bodyField: redisVersion server: user: $FROM_MAIL$ smtp: smtp.gmail.com password: $MAIL_PASSWORD$ partial-mail.yaml
  150. 150. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C A T Á L O G O CRAWLINO
  151. 151. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C A T Á L O G O CRAWLINO Búsqueda de crawlers completos > crawlino-search crawler redis-scanner
  152. 152. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C A T Á L O G O CRAWLINO Búsqueda de crawlers completos > crawlino-search crawler redis-scanner Búsqueda de partials > crawlino-search partial slack
  153. 153. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N : : C A T Á L O G O CRAWLINO Búsqueda de crawlers completos > crawlino-search crawler redis-scanner Búsqueda de partials > crawlino-search partial slack Búsqueda de plugins > crawlino-search plugins metasploit
  154. 154. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel F U T U R O D E L P R O Y E C T O
  155. 155. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S
  156. 156. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks…
  157. 157. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks… • Trabajo en modo distribuido y multi-máquina
  158. 158. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks… • Trabajo en modo distribuido y multi-máquina • Modo servidor con API
  159. 159. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks… • Trabajo en modo distribuido y multi-máquina • Modo servidor con API • Interceptar Hooks de Github / Bitbucket cuando se produce un PUSH
  160. 160. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks… • Trabajo en modo distribuido y multi-máquina • Modo servidor con API • Interceptar Hooks de Github / Bitbucket cuando se produce un PUSH • Repositorio centralizador de Plugins y Crawlers de ejemplo
  161. 161. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S • Crear más plugins, generadores, hooks… • Trabajo en modo distribuido y multi-máquina • Modo servidor con API • Interceptar Hooks de Github / Bitbucket cuando se produce un PUSH • Repositorio centralizador de Plugins y Crawlers de ejemplo Beta Beta Beta
  162. 162. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel C O N C L U S I O N E S
  163. 163. @ggdaniel CRAWLINO C O N C L U S I O N E S
  164. 164. @ggdaniel CRAWLINO C O N C L U S I O N E S • La cosas, si no nos hacen pensar más de lo necesario, mejor.
  165. 165. @ggdaniel CRAWLINO C O N C L U S I O N E S • La cosas, si no nos hacen pensar más de lo necesario, mejor. • NO está todo inventado
  166. 166. @ggdaniel CRAWLINO C O N C L U S I O N E S • La cosas, si no nos hacen pensar más de lo necesario, mejor. • NO está todo inventado • Cuando enviéis una charla a un conferencia… tened el proyecto algo avanzado :)
  167. 167. @ggdaniel CRAWLINO C O N C L U S I O N E S • La cosas, si no nos hacen pensar más de lo necesario, mejor. • NO está todo inventado • Y, respecto a crawlino… • Cuando enviéis una charla a un conferencia… tened el proyecto algo avanzado :)
  168. 168. @ggdaniel CRAWLINO C O N C L U S I O N E S • La cosas, si no nos hacen pensar más de lo necesario, mejor. • NO está todo inventado • Y, respecto a crawlino… • Cuando enviéis una charla a un conferencia… tened el proyecto algo avanzado :)
  169. 169. https://www.linkedin.com/in/garciagarciadaniel @ggdaniel ¡ G R A C I A S !

×