SlideShare une entreprise Scribd logo
1  sur  169
Télécharger pour lire hors ligne
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
< / 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
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
¿ D E Q U É V A E S T A C H A R L A ?
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
¿ D E Q U É V A E S T A C H A R L A ?
@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).”
@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).”
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
¿ Q U É H A Y D E N U E V O , V I E J O ?
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
@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
@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
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
@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/
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
@ggdaniel
¿ Q U E H A D E N U E V O , V I E J O ?
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
@ggdaniel
N U E V A S R E G L A S
@ggdaniel
N U E V A S R E G L A S
@ggdaniel
N U E V A S R E G L A S
@ggdaniel
N U E V A S R E G L A S
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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, …
@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, …
@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: ….
@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
@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
@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
@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
@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
@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
@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
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
C R A W L I N O
@ggdaniel
¿ Q U É E S C R A W L I N O ?
@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
@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
@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.”
@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.”
@ggdaniel
L A S P R E S E N T A C I O N E S
@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
@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
@ggdaniel
¿ Q U É E S C R A W L I N O ?
https://github.com/crawlino
@ggdaniel
¿ Q U É E S C R A W L I N O ?
https://github.com/crawlino
Alpha
@ggdaniel
¿ Q U É E S C R A W L I N O ?
https://github.com/crawlino
CRAWLINO
Alpha
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
¿ P A R A Q U É
S I R V E ?
@ggdaniel
R E S U M E N R Á P I D O - C O N C E P T O
CRAWLINO
@ggdaniel
R E S U M E N R Á P I D O - C O N C E P T O
CRAWLINO
Definition
@ggdaniel
R E S U M E N R Á P I D O - C O N C E P T O
CRAWLINO
Definition
Actions
@ggdaniel
I N T E R N A L S - B R I E F
CRAWLINO
@ggdaniel
I N T E R N A L S - B R I E F
Crawlers
CRAWLINO
@ggdaniel
I N T E R N A L S - B R I E F
Crawlers Engine
CRAWLINO
@ggdaniel
I N T E R N A L S - B R I E F
Crawlers Engine Plugins
CRAWLINO
@ggdaniel
R E S U M E N R Á P I D O - E J E M P L O
CRAWLINO
@ggdaniel
R E S U M E N R Á P I D O - E J E M P L O
CRAWLINO
@ggdaniel
R E S U M E N R Á P I D O - E J E M P L O
CRAWLINO
Dónde
@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
@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é
@ggdaniel
C O N C E P T O - S T E P S
CRAWLINO
Dónde
Cómo
Qué
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@ggdaniel CRAWLINO
I N S T A L A N D O C R A W L I N O
@ggdaniel CRAWLINO
D E M O 1 - C R A W L E R S E N C I L L O
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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:
@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:
@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:
@ggdaniel
D E M O 2 - C R A W L E R Y F I L T R O S ( I )
CRAWLINO
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@ggdaniel
D E M O 3 - C R A W L E R Y F I L T R O S ( I I )
CRAWLINO
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@ggdaniel
V A R I A B L E S
CRAWLINO
@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
@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
@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
@ggdaniel
D E M O 6 - H O O K S
CRAWLINO
@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
@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
@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
@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
@ggdaniel
E J E M P L O 7 - R E U T I L I Z A C I Ó N
CRAWLINO
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
F U T U R O D E L
P R O Y E C T O
@ggdaniel CRAWLINO
P R Ó X I M A S V E R S I O N S
@ggdaniel CRAWLINO
P R Ó X I M A S V E R S I O N S
• Crear más plugins, generadores, hooks…
@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
@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
@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
@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
@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
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
C O N C L U S I O N E S
@ggdaniel CRAWLINO
C O N C L U S I O N E S
@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.
@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
@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 :)
@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 :)
@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 :)
https://www.linkedin.com/in/garciagarciadaniel @ggdaniel
¡ G R A C I A S !

Contenu connexe

Tendances

Tendances (16)

Diapositiva RRS
Diapositiva RRSDiapositiva RRS
Diapositiva RRS
 
Case Study - Optymalizacja Kampanii AdWords
Case Study - Optymalizacja Kampanii AdWordsCase Study - Optymalizacja Kampanii AdWords
Case Study - Optymalizacja Kampanii AdWords
 
Estrategias de marca en base al análisis competitivo
Estrategias de marca en base al análisis competitivoEstrategias de marca en base al análisis competitivo
Estrategias de marca en base al análisis competitivo
 
Joce (tic´s) 2
Joce (tic´s) 2Joce (tic´s) 2
Joce (tic´s) 2
 
Keyla clavijo (AVANCES TECNOLOGICOS)
Keyla clavijo (AVANCES TECNOLOGICOS)Keyla clavijo (AVANCES TECNOLOGICOS)
Keyla clavijo (AVANCES TECNOLOGICOS)
 
Software online
Software onlineSoftware online
Software online
 
SEO en Portales Verticales. Mi Experiencia [SEOPLUS 2018]
SEO en Portales Verticales. Mi Experiencia [SEOPLUS 2018]SEO en Portales Verticales. Mi Experiencia [SEOPLUS 2018]
SEO en Portales Verticales. Mi Experiencia [SEOPLUS 2018]
 
Presentación1
Presentación1Presentación1
Presentación1
 
Link Building por César Aparicio para #ClickSEO 2020
Link Building por César Aparicio para #ClickSEO 2020Link Building por César Aparicio para #ClickSEO 2020
Link Building por César Aparicio para #ClickSEO 2020
 
Distrito Municipal Capotillo
Distrito Municipal CapotilloDistrito Municipal Capotillo
Distrito Municipal Capotillo
 
Analisis de redes sociales online
Analisis de redes sociales onlineAnalisis de redes sociales online
Analisis de redes sociales online
 
Seguridad de la red
Seguridad de la redSeguridad de la red
Seguridad de la red
 
Comportamiento del usuario como factor de relevancia en SEO - Fernando Macia
Comportamiento del usuario como factor de relevancia en SEO - Fernando MaciaComportamiento del usuario como factor de relevancia en SEO - Fernando Macia
Comportamiento del usuario como factor de relevancia en SEO - Fernando Macia
 
5 ingredientes indispensables para hacer branding en los medios digitales
5 ingredientes indispensables para hacer branding en los medios digitales 5 ingredientes indispensables para hacer branding en los medios digitales
5 ingredientes indispensables para hacer branding en los medios digitales
 
Análisis de Datos SEO para el QUÉ y el CÚANDO [SOB 2018]
Análisis de Datos SEO para el QUÉ y el CÚANDO [SOB 2018]Análisis de Datos SEO para el QUÉ y el CÚANDO [SOB 2018]
Análisis de Datos SEO para el QUÉ y el CÚANDO [SOB 2018]
 
realidad nacional
realidad nacionalrealidad nacional
realidad nacional
 

Similaire à Rooted 2018 - Crawlino: The next level of crawling systems

Institución educativa trabajo
Institución educativa trabajoInstitución educativa trabajo
Institución educativa trabajo
anyiibg43
 
Institución educativa trabajo
Institución educativa trabajoInstitución educativa trabajo
Institución educativa trabajo
anyiibg43
 

Similaire à Rooted 2018 - Crawlino: The next level of crawling systems (20)

Requisitos de implementacion esbelta
Requisitos de implementacion esbelta Requisitos de implementacion esbelta
Requisitos de implementacion esbelta
 
Deck tapptime
Deck tapptimeDeck tapptime
Deck tapptime
 
Portafolio y CV Matias Vega Barrera
Portafolio y CV Matias Vega BarreraPortafolio y CV Matias Vega Barrera
Portafolio y CV Matias Vega Barrera
 
Aporte coronel ivan infor ma tica emaus 20_11_20
Aporte coronel ivan infor ma tica emaus 20_11_20Aporte coronel ivan infor ma tica emaus 20_11_20
Aporte coronel ivan infor ma tica emaus 20_11_20
 
Arquitectura Nicaraguense
Arquitectura NicaraguenseArquitectura Nicaraguense
Arquitectura Nicaraguense
 
Aparatos de alumbradopor hidemaro torres
Aparatos de alumbradopor hidemaro torresAparatos de alumbradopor hidemaro torres
Aparatos de alumbradopor hidemaro torres
 
metodos d ealumbrado kristhian fernandez
metodos d ealumbrado kristhian fernandezmetodos d ealumbrado kristhian fernandez
metodos d ealumbrado kristhian fernandez
 
Trabajos de izaje con excavadora de alto riesgo.pptx
Trabajos de izaje con excavadora de alto riesgo.pptxTrabajos de izaje con excavadora de alto riesgo.pptx
Trabajos de izaje con excavadora de alto riesgo.pptx
 
Caña yestabulaciones.
Caña yestabulaciones.Caña yestabulaciones.
Caña yestabulaciones.
 
ABP - Aprendizaje Basado en problemas frente a la Clase Magistral en la enseñ...
ABP - Aprendizaje Basado en problemas frente a la Clase Magistral en la enseñ...ABP - Aprendizaje Basado en problemas frente a la Clase Magistral en la enseñ...
ABP - Aprendizaje Basado en problemas frente a la Clase Magistral en la enseñ...
 
Base de datos
Base de datosBase de datos
Base de datos
 
Curso: Cómo dar a conocer tu empresa sin gastarte un dineral en #publicidad
Curso: Cómo dar a conocer tu empresa sin gastarte un dineral en #publicidadCurso: Cómo dar a conocer tu empresa sin gastarte un dineral en #publicidad
Curso: Cómo dar a conocer tu empresa sin gastarte un dineral en #publicidad
 
Folleto cofaso
Folleto cofasoFolleto cofaso
Folleto cofaso
 
Marcos
MarcosMarcos
Marcos
 
Informatica y convergencia tecnologica en el diseño g rafico
Informatica y convergencia tecnologica en el diseño g raficoInformatica y convergencia tecnologica en el diseño g rafico
Informatica y convergencia tecnologica en el diseño g rafico
 
Michelle cueva
Michelle cuevaMichelle cueva
Michelle cueva
 
Res277
Res277Res277
Res277
 
Institución educativa trabajo
Institución educativa trabajoInstitución educativa trabajo
Institución educativa trabajo
 
Institución educativa trabajo
Institución educativa trabajoInstitución educativa trabajo
Institución educativa trabajo
 
Estructura proteinas
Estructura proteinasEstructura proteinas
Estructura proteinas
 

Plus de Daniel Garcia (a.k.a cr0hn)

Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azulScapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
Daniel Garcia (a.k.a cr0hn)
 

Plus de Daniel Garcia (a.k.a cr0hn) (20)

Sonatype DevSecOps Leadership forum 2020
Sonatype DevSecOps Leadership forum 2020Sonatype DevSecOps Leadership forum 2020
Sonatype DevSecOps Leadership forum 2020
 
Rooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CDRooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CD
 
12 tricks to avoid hackers breaks your CI / CD
12 tricks to avoid hackers breaks your  CI / CD12 tricks to avoid hackers breaks your  CI / CD
12 tricks to avoid hackers breaks your CI / CD
 
Security in AWS Lambdas - NavajaNegra CON 2018
Security in AWS Lambdas - NavajaNegra CON 2018Security in AWS Lambdas - NavajaNegra CON 2018
Security in AWS Lambdas - NavajaNegra CON 2018
 
Ingenieria social aplicada: Mucho mas fácil de lo que parece
Ingenieria social aplicada: Mucho mas fácil de lo que pareceIngenieria social aplicada: Mucho mas fácil de lo que parece
Ingenieria social aplicada: Mucho mas fácil de lo que parece
 
Ingeniería social aplicada: Mucho más fácil de lo que parece
Ingeniería social aplicada: Mucho más fácil de lo que pareceIngeniería social aplicada: Mucho más fácil de lo que parece
Ingeniería social aplicada: Mucho más fácil de lo que parece
 
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker imagesRootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
 
Identificando y rompiendo servicios de las 4 capas de TCP/IP
Identificando y rompiendo servicios de las 4 capas de TCP/IPIdentificando y rompiendo servicios de las 4 capas de TCP/IP
Identificando y rompiendo servicios de las 4 capas de TCP/IP
 
Security in NodeJS applications
Security in NodeJS applicationsSecurity in NodeJS applications
Security in NodeJS applications
 
RootedCON 2016 - Broker & MQ injection
RootedCON 2016 - Broker & MQ injectionRootedCON 2016 - Broker & MQ injection
RootedCON 2016 - Broker & MQ injection
 
Hacking y python: Hacking de redes con Python
Hacking y python: Hacking de redes con PythonHacking y python: Hacking de redes con Python
Hacking y python: Hacking de redes con Python
 
Cybercamp 2015 - Python, hacking y sec-tools desde las trincheras
Cybercamp 2015 - Python, hacking y sec-tools desde las trincherasCybercamp 2015 - Python, hacking y sec-tools desde las trincheras
Cybercamp 2015 - Python, hacking y sec-tools desde las trincheras
 
Tu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridadTu DevOp me da trabajo: Soy auditor de seguridad
Tu DevOp me da trabajo: Soy auditor de seguridad
 
Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azulScapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
Scapy: Crear un Frankenstein de red y hacerlo pasar por el príncipe azul
 
Topera: Evadiendo Snort con IPv6
Topera: Evadiendo Snort con IPv6Topera: Evadiendo Snort con IPv6
Topera: Evadiendo Snort con IPv6
 
III Hack and beers: evadiendo técnicas de fingerprinting en Linux y Wordpress
III Hack and beers: evadiendo técnicas de fingerprinting en Linux y WordpressIII Hack and beers: evadiendo técnicas de fingerprinting en Linux y Wordpress
III Hack and beers: evadiendo técnicas de fingerprinting en Linux y Wordpress
 
GoLismero: The Web Knife
GoLismero: The Web KnifeGoLismero: The Web Knife
GoLismero: The Web Knife
 
El poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácilEl poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácil
 
Cybercam 2014
Cybercam 2014Cybercam 2014
Cybercam 2014
 
Introduccion muy básica a Python
Introduccion muy básica a PythonIntroduccion muy básica a Python
Introduccion muy básica a Python
 

Dernier

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Dernier (10)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 

Rooted 2018 - Crawlino: The next level of crawling systems

  • 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. < / 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
  • 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. @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. 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. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 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. @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. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 12. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 13. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 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. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 16. @ggdaniel ¿ Q U E H A D E N U E V O , V I E J O ?
  • 18. @ggdaniel N U E V A S R E G L A S
  • 19. @ggdaniel N U E V A S R E G L A S
  • 20. @ggdaniel N U E V A S R E G L A S
  • 21. @ggdaniel N U E V A S R E G L A S
  • 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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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
  • 46. @ggdaniel ¿ Q U É E S C R A W L I N O ?
  • 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. @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. @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. @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. @ggdaniel L A S P R E S E N T A C I O N E S
  • 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. @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. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino
  • 55. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino Alpha
  • 56. @ggdaniel ¿ Q U É E S C R A W L I N O ? https://github.com/crawlino CRAWLINO Alpha
  • 58. @ggdaniel R E S U M E N R Á P I D O - C O N C E P T O CRAWLINO
  • 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. @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. @ggdaniel I N T E R N A L S - B R I E F CRAWLINO
  • 62. @ggdaniel I N T E R N A L S - B R I E F Crawlers CRAWLINO
  • 63. @ggdaniel I N T E R N A L S - B R I E F Crawlers Engine CRAWLINO
  • 64. @ggdaniel I N T E R N A L S - B R I E F Crawlers Engine Plugins CRAWLINO
  • 65. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO
  • 66. @ggdaniel R E S U M E N R Á P I D O - E J E M P L O CRAWLINO
  • 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. @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. @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. @ggdaniel C O N C E P T O - S T E P S CRAWLINO Dónde Cómo Qué
  • 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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @ggdaniel CRAWLINO I N S T A L A N D O C R A W L I N O
  • 83. @ggdaniel CRAWLINO D E M O 1 - C R A W L E R S E N C I L L O
  • 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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @ggdaniel D E M O 2 - C R A W L E R Y F I L T R O S ( I ) CRAWLINO
  • 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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @ggdaniel V A R I A B L E S CRAWLINO
  • 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. @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. @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. @ggdaniel D E M O 6 - H O O K S CRAWLINO
  • 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. @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. @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. @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. @ggdaniel E J E M P L O 7 - R E U T I L I Z A C I Ó N CRAWLINO
  • 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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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. @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
  • 155. @ggdaniel CRAWLINO P R Ó X I M A S V E R S I O N S
  • 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. @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. @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. @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. @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. @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
  • 163. @ggdaniel CRAWLINO C O N C L U S I O N E S
  • 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. @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. @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. @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. @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 :)