Python 4 Pentest

Pentest

Abreviação de Penetration Test, é um método para avaliar a segurança de um sistema ou rede. simulando um ataque malicioso. Buscando vulnerabilidades, falhas de configuração, pontos de fragilidade no hardware/software.

Podendo ser adotados testes de caixa preta, onde o pentester não tem conhecimento sobre sobre a infraestrutura a ser testada, e testes de caixa branca, onde o "atacante" possui detalhes técnicos sobre a infraestrutura.

Ataques

De acrodo com a Open Web Application Security Project (OWASP), os dez riscos mais críticos para uma aplicação web em 2017, foram os seguintes.

  • Injeções
  • Falha de autenticação
  • Cross-site scripting(XSS)
  • Exposição de dados sensíveis
  • Entidades Externas de XML
  • Quebra de controle de autenticação
  • Configuração incorreta de segurança
  • Deserialização insegura

SQL Injection

É um método onde o atacante pode criar ou alterar comandos SQL, buscando acesso ao banco de dados. É mais efetivo em aplicações que que recebem input do usuário, que combinado com alguns parâmetros geram uma query SQL.

Com Python, podemos injetar alguns vetores de ataque na aplicação e analisar a saída para descobrir possibilidades de ataque.


import mechanize

url = "http://www.webscantest.com/datastore/search_by_id.php"

request = mechanize.Browser()

request.open(url)

request.select_form(nr=0)

request["id"] = "1 OR 1=1"

response = request.submit()

content = response.read()
print content				

					

Checking Headers


import requests

response = requests.get('http://g1.globo.com/pb/paraiba/', timeout=5)

print('####Headers Response####')
for header, value in response.headers.items():
    print(header, '--->',  value)

print('####Header Request####')
for header, value in response.request.headers.items():
    print(header, '--->',  value)
					

G1 Paraíba


####Headers response####
via ---> 4.1 CachOS
x-content-type-options ---> nosniff
x-bip ---> 541849223 ah22 41 03
cache-control ---> max-age=15
content-type ---> text/html; charset=utf-8
x-frame-options ---> SAMEORIGIN
age ---> 2
x-varnish ---> 541849223 550873270
vary ---> X-Forwarded-Proto, Accept-Encoding, User-Agent
date ---> Wed, 31 Jan 2018 21:15:04 GMT
x-xss-protection ---> 1; mode=block
expires ---> Wed, 31 Jan 2018 21:15:19 GMT
content-encoding ---> gzip
content-length ---> 65878
connection ---> keep-alive
accept-ranges ---> bytes
####Header request####
Accept ---> */*
Accept-Encoding ---> gzip, deflate, compress
User-Agent ---> python-requests/2.2.1 CPython/3.4.3 Linux/3.13.0-24-generic

					

python.org.br


expires ---> Wed, 31 Jan 2018 21:23:51 GMT
content-type ---> text/html; charset=utf-8
server ---> GitHub.com
date ---> Wed, 31 Jan 2018 21:13:51 GMT
cache-control ---> max-age=600
vary ---> Accept-Encoding
content-encoding ---> gzip
x-github-request-id ---> A585:43CC:12A5358:1A210B1:5A72318F
last-modified ---> Thu, 25 Jan 2018 23:41:14 GMT
access-control-allow-origin ---> *
----Header request----
User-Agent ---> python-requests/2.2.1 CPython/3.4.3 Linux/3.13.0-24-generic
Accept-Encoding ---> gzip, deflate, compress
Accept ---> */*

					

BuiltWith

pip install builtwith


import builtwith
builtwith.parse('https://roadsec.com.br/')
					

{'javascript-frameworks': ['jQuery'],
'web-servers': ['Nginx'],
'font-scripts': ['Google Font API']}
					

Beautiful Soup

Coletando Links


from bs4 import BeautifulSoup
import requests

r = requests.get('https://roadsec.com.br/')

data = r.text

soup = BeautifulSoup(data)

for link in soup.find_all('a'):
    print(link.get('href'))
					

/sobre/
/calendario-2018
/joaopessoa2018/
/belem2018/
/fortaleza2018/
/brasilia2018/
/blog-montauk/?author=#show-archive
/blog-montauk/2012/6/11/latest-article#comments-5052176b84aeb45fa5cfcca7
/blog-montauk/?author=#show-archive
/blog-montauk/2012/6/11/latest-article#comments-5052176b84aeb45fa5cfcca7
https://twitter.com/roadsec
http://instagram.com/roadsec
http://www.facebook.com/roadsec
/patrocinio
/rssp17-privacidade-e-termos-de-uso
http://www.roadsec.com.br/conduta
/imprensa
/arquivo
/contato
https://twitter.com/roadsec
http://instagram.com/roadsec
http://www.facebook.com/roadsec
http://flipside.com.br
https://www.latam.com/pt_br/
				

Port Scan


					
import socket

portas = [21, 23, 80, 443, 8080]

for porta in portas:
    cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    cliente.settimeout(0.1)
    codigo = cliente.connect_ex(('127.0.0.1', porta))
    if codigo == 0:
        print(porta, 'OPEN')
				

Perguntas

newtonjgaliza@gmail.com

github.com/newtongaliza


print('Muito Obrigado')