Python e seus desafios
Mini curso Python
Jhonathan Davi A.K.A jh00nbr
 Pesquisador independente de segurança no grupo Insightl4b
 Desenvolvedor Python e R
 Finalista no Hackaflag 2016
 Membro de Elite do time de capture the flag RTFM (Red Team Freakin' Maniacs).
 Membro e pesquisador na equipe Inurl Brasil
 Github: https://github.com/jh00nbr/
 Blog: http://lab.insightsecurity.com.br / http://blog.inurl.com.br
 Email: jdavi@insightsecurity.com.br
 Twitter: @jh00nbr
>> Introdução
• Python é uma linguagem de programação extremamente poderosa e
fácil de aprender.
• É uma linguagem ideal para scripting dada a sua sintaxe elegante e o
fato de ser uma linguagem interpretada.
• É completamente Open Source.
• Possui uma extensa documentação na web para dar suporte aos
iniciantes.
>> Características
• Interpretada
• Fácil e simples
• Sintaxes limpas
• Diversas bibliotecas inclusas
• Interativa
>> Informações
• Os arquivos são identificados com a extensão “.py” (arquivo.py)
• Não há declaração de tipo de variaveis, nem abertura e fechamento
de chaves. Porem, a identaçãoe extremamente importante!!
• Para comentar uma linha, basta inserir “#” no início da linha
>> Scripts em Python
• Um programa Python é uma coleção de arquivos .py
• Podem ser organizados em módulos ou pacotes
Jubileu.py import modulos.py
>> Identação
for x in xrange(0,1336):
print x+1
print x+1
São utilizados 4 espaços na identação.
>> Help
• Ajuda interativa: help()
• Ajuda sobre algum objeto: help(object)
• Propriedades dos objetos: dir(object)
• Tipo dos objetos: type(object)
>> Operações
• Soma (+)
• Multipicação (*)
• Divisão (/)
• Potência (**): pode ser usada para calcular a raiz, através de
expoentes fracionários (exemplo: 100 ** 0.5)
• Positivo (+)
• Negativo (-)
>> Operações lógicas:
• Menor (<)
• Maior (>)
• Menor ou igual (<=)
• Maior ou igual (>=)
• Igual (==)
• Diferente (!=)
>> Listas
Listas são coleções heterogêneas de objetos, que podem ser de qualquer tipo, inclusive
outras listas As listas no Python são mutáveis, podendo ser alteradas aqualquer
momento
As listas são objetos que guardam valores indexados por números (iniciados em 0)
inteiros
• lista = ['a', 'b', 3, 'd']
• >>> lista[0]
• 3
• >>> lista[3]
• 'd'
>> Manipulando Listas
• Inserção de um elemento
>>> lista.append(obj) # insere no final
>>> lista.insert(i, obj) # insere no indice i
• Ordenação de uma lista
>>> lista.sort()
• Revertendo a lista
• >>> lista.reverse()
Manipulando Listas
Retirando elementos
>>> lista.pop() #retorna e remove último elemento
>>> lista.pop(0)#retorna e remove o primeiro
Concatenando Lista
‘’.join(lista)
Removendo Item
>>> lista.remove(“string”)
Manipulando Listas
Criando dicionario com listas
É possivel criar um dicionario apartir de duas listas
>>> lista = [“A”,”B”,”C”]
>>> lista2 = [2,3,4]
>>> dict(zip(lista,lista2))
{“A”:2, ”B”:3, ”C”:4}
>> Manipulando Listas
Funções builtin
• sum(lista): retorna a soma dos elementos da lista
• zip(lista1, lista2): retorna uma sequência de tuplas
• enumerate(lista): retorna uma sequência de tuplas (i, elem)
>> Tuplas
• Sequência de dados heterôgeneos, assim como listas
• A grande diferença: tuplas são imutáveis
>>> t = (1,2,3)
>>> t[0]
• 1
>>> t[1] = 4
>> Dicionários
>>> d = {}
>>> d['chave'] = 1337
>>> d[10] = 'abc'
>>> d[(1,2,3)] = [1, 3, {'a':1, 'b':2}]
Métodos úteis
>>> d.keys() # lista de chaves
>>> d.values() # lista de valores
>>> d.items() # lista de tuplas (chave, valor)
>> Strings (Textos)
A inicialização de strings pode ser:
Com aspas simples ou duplas
Em várias linhas consecutivas, desde que seja entre três aspas
>> Strings (Textos)
Concatenação
>>> “String1” + “String2” + “String3”
String1String2String3
Repetição
>>> “Bolsonaro2018” * 4
Busca
>>> “Trump” in “EUA”
True
>> Strings (Textos) - Métodos
 len()
str()
 etc...
 Fatiando Strings
Podemos “fatiar” pedaços de um string utilizando o operador ‘:’
>>> word = “Palavrao”
>>> word[0:7]
Palavra
Funções
• Funções sempre serão iniciadas pela palavra def seguida do nome da
função e seus argumentos:
def nome_da_funcao(arg1, arg2,...):
<cmds>
return <expr>
Dynamic-Dispatch com Dicionários
Funções também são objetos
>>> def sqr(x): return x*x
>>> f = sqr
>>> f(2)
4
• Funções anônimas com lambda
>>> sqr = lambda x: x*x
>>> sqr(2)
4
>> Tratamento de Erro com Exceções
• Exceções são uma forma de alto nível para lidar com erros quando
uma operação pode dar erro nós tentamos fazê-la prevendo os
possíveis erros para que possamos tratá-los
try:
v = dicionario[“trump"]
except KeyError, e:
print '“trump" não é uma chave válida ', e
>> Expressões booleanas
Operadores de comparação
==, <=, >=, <>, !=, is [not]
Operadores booleanos
not, and, or
Operador de teste de pertinência
[not] in
if e in lista: print "pertence"
Encadeamento
if 1 < x < 10:
print "x entre 1 e 10"
>> Expressões booleanas
• None, [], {}, (), '' e 0 são considerados como False
>> Laços de repetição
• Laço while:
while <cond>:
<cmds>
>> Laços de repetição
• Laço FOR:
for i in xrange():
print type(i)
Função xrange(start, end)
>> Estruturas de Controle:
if-else
E muito comum em um programa que certos conjuntos de instruções sejam executados de forma
condicional, em casos como validar entradas de dados, por exemplo.
If <condicao>:
<bloco de código>
elif <condicao>:
<bloco de código>
else:
<bloco de código>
Ok, lets go!
Resolvendo alguns webs challenges online, utilizando a linguagem Python.
https://ctflearn.com/header.php
https://www.root-me.org
http://canyouhack.it/Content/Challenges/Web/Web2.php
http://lab.shellterlabs.com:32860/
http://shellterlabs.com/pt/ctf-master

Python e seus desafios

  • 1.
    Python e seusdesafios Mini curso Python
  • 2.
    Jhonathan Davi A.K.Ajh00nbr  Pesquisador independente de segurança no grupo Insightl4b  Desenvolvedor Python e R  Finalista no Hackaflag 2016  Membro de Elite do time de capture the flag RTFM (Red Team Freakin' Maniacs).  Membro e pesquisador na equipe Inurl Brasil  Github: https://github.com/jh00nbr/  Blog: http://lab.insightsecurity.com.br / http://blog.inurl.com.br  Email: jdavi@insightsecurity.com.br  Twitter: @jh00nbr
  • 3.
    >> Introdução • Pythoné uma linguagem de programação extremamente poderosa e fácil de aprender. • É uma linguagem ideal para scripting dada a sua sintaxe elegante e o fato de ser uma linguagem interpretada. • É completamente Open Source. • Possui uma extensa documentação na web para dar suporte aos iniciantes.
  • 4.
    >> Características • Interpretada •Fácil e simples • Sintaxes limpas • Diversas bibliotecas inclusas • Interativa
  • 5.
    >> Informações • Osarquivos são identificados com a extensão “.py” (arquivo.py) • Não há declaração de tipo de variaveis, nem abertura e fechamento de chaves. Porem, a identaçãoe extremamente importante!! • Para comentar uma linha, basta inserir “#” no início da linha
  • 6.
    >> Scripts emPython • Um programa Python é uma coleção de arquivos .py • Podem ser organizados em módulos ou pacotes Jubileu.py import modulos.py
  • 7.
    >> Identação for xin xrange(0,1336): print x+1 print x+1 São utilizados 4 espaços na identação.
  • 8.
    >> Help • Ajudainterativa: help() • Ajuda sobre algum objeto: help(object) • Propriedades dos objetos: dir(object) • Tipo dos objetos: type(object)
  • 9.
    >> Operações • Soma(+) • Multipicação (*) • Divisão (/) • Potência (**): pode ser usada para calcular a raiz, através de expoentes fracionários (exemplo: 100 ** 0.5) • Positivo (+) • Negativo (-)
  • 10.
    >> Operações lógicas: •Menor (<) • Maior (>) • Menor ou igual (<=) • Maior ou igual (>=) • Igual (==) • Diferente (!=)
  • 11.
    >> Listas Listas sãocoleções heterogêneas de objetos, que podem ser de qualquer tipo, inclusive outras listas As listas no Python são mutáveis, podendo ser alteradas aqualquer momento As listas são objetos que guardam valores indexados por números (iniciados em 0) inteiros • lista = ['a', 'b', 3, 'd'] • >>> lista[0] • 3 • >>> lista[3] • 'd'
  • 12.
    >> Manipulando Listas •Inserção de um elemento >>> lista.append(obj) # insere no final >>> lista.insert(i, obj) # insere no indice i • Ordenação de uma lista >>> lista.sort() • Revertendo a lista • >>> lista.reverse()
  • 13.
    Manipulando Listas Retirando elementos >>>lista.pop() #retorna e remove último elemento >>> lista.pop(0)#retorna e remove o primeiro Concatenando Lista ‘’.join(lista) Removendo Item >>> lista.remove(“string”)
  • 14.
    Manipulando Listas Criando dicionariocom listas É possivel criar um dicionario apartir de duas listas >>> lista = [“A”,”B”,”C”] >>> lista2 = [2,3,4] >>> dict(zip(lista,lista2)) {“A”:2, ”B”:3, ”C”:4}
  • 15.
    >> Manipulando Listas Funçõesbuiltin • sum(lista): retorna a soma dos elementos da lista • zip(lista1, lista2): retorna uma sequência de tuplas • enumerate(lista): retorna uma sequência de tuplas (i, elem)
  • 16.
    >> Tuplas • Sequênciade dados heterôgeneos, assim como listas • A grande diferença: tuplas são imutáveis >>> t = (1,2,3) >>> t[0] • 1 >>> t[1] = 4
  • 17.
    >> Dicionários >>> d= {} >>> d['chave'] = 1337 >>> d[10] = 'abc' >>> d[(1,2,3)] = [1, 3, {'a':1, 'b':2}] Métodos úteis >>> d.keys() # lista de chaves >>> d.values() # lista de valores >>> d.items() # lista de tuplas (chave, valor)
  • 18.
    >> Strings (Textos) Ainicialização de strings pode ser: Com aspas simples ou duplas Em várias linhas consecutivas, desde que seja entre três aspas
  • 19.
    >> Strings (Textos) Concatenação >>>“String1” + “String2” + “String3” String1String2String3 Repetição >>> “Bolsonaro2018” * 4 Busca >>> “Trump” in “EUA” True
  • 20.
    >> Strings (Textos)- Métodos  len() str()  etc...  Fatiando Strings Podemos “fatiar” pedaços de um string utilizando o operador ‘:’ >>> word = “Palavrao” >>> word[0:7] Palavra
  • 21.
    Funções • Funções sempreserão iniciadas pela palavra def seguida do nome da função e seus argumentos: def nome_da_funcao(arg1, arg2,...): <cmds> return <expr>
  • 22.
    Dynamic-Dispatch com Dicionários Funçõestambém são objetos >>> def sqr(x): return x*x >>> f = sqr >>> f(2) 4 • Funções anônimas com lambda >>> sqr = lambda x: x*x >>> sqr(2) 4
  • 23.
    >> Tratamento deErro com Exceções • Exceções são uma forma de alto nível para lidar com erros quando uma operação pode dar erro nós tentamos fazê-la prevendo os possíveis erros para que possamos tratá-los try: v = dicionario[“trump"] except KeyError, e: print '“trump" não é uma chave válida ', e
  • 24.
    >> Expressões booleanas Operadoresde comparação ==, <=, >=, <>, !=, is [not] Operadores booleanos not, and, or Operador de teste de pertinência [not] in if e in lista: print "pertence" Encadeamento if 1 < x < 10: print "x entre 1 e 10"
  • 25.
    >> Expressões booleanas •None, [], {}, (), '' e 0 são considerados como False
  • 26.
    >> Laços derepetição • Laço while: while <cond>: <cmds>
  • 27.
    >> Laços derepetição • Laço FOR: for i in xrange(): print type(i) Função xrange(start, end)
  • 28.
    >> Estruturas deControle: if-else E muito comum em um programa que certos conjuntos de instruções sejam executados de forma condicional, em casos como validar entradas de dados, por exemplo. If <condicao>: <bloco de código> elif <condicao>: <bloco de código> else: <bloco de código>
  • 29.
    Ok, lets go! Resolvendoalguns webs challenges online, utilizando a linguagem Python.
  • 30.