Você está na página 1de 23

Pentest com Python

Instrutor:Vitor Mazuco

http://facebook.com/vitormazuco

Email:vitor.mazuco@gmail.com

WebSite:http://vmzsolutions.com.br
Entendendo o ataque de injeção SQL por um script Python

Todos os ataques de injeção SQL podem ser executados

manualmente. No entanto, você pode usar a programação

Python para automatizar o ataque. Para obter o nome de

usuário e a senha de um site, devemos ter a URL da página do

console de administração ou login. O cliente não fornece o link

para a página do terminal do administrador no site.


Entendendo o ataque de injeção SQL por um script Python

O nosso alvo, pode ser qualquer site no google com o google

hacking (inurl login.php) que contenha as palavras login.php ou

login.html ou até mesmo o seu alvo pode ser um OWASP com o

Bodgelt (http://192.168.1.163/bodgeit/login.jsp).
Entendendo o ataque de injeção SQL por um script Python

Vamos analisar o arquivo, login1.py, para encontrar a página de

login para sites em PHP. Nesse código é importado o httplib e o

shelve. A variável url armazena o URL do site inserido pelo

usuário. A variável url2 armazena somente o nome de domínio

ou o endereço IP. A instrução s =

shelve.open("vitor.mazuco",writeback=True) abre o arquivo vitor.mazuco

que contém uma lista dos nomes de página de login esperados

que eu inseri (a página de login esperada) no arquivo.


Entendendo o ataque de injeção SQL por um script Python

A variável s['php'] significa que php é o nome da chave da lista, e

s['php'] é a lista salva no arquivo vitor.mazuco usando o nome 'php'.

O loop for extrai os nomes das páginas de login um a um, e url_n

= url2+a+u mostrará o URL para teste. Uma instância

HTTPConnection representa uma transação com um servidor

HTTP. A instrução http_r = httplib.HTTPConnection(url2) precisa

apenas do nome de domínio;


Entendendo o ataque de injeção SQL por um script Python

É por isso que apenas a variável url2 foi passada como um

argumento e, por padrão, usa a porta 80 e armazena o resultado

na variável http_r. A declaração http_r.request("GET",u) faz a

solicitação de rede e a instrução http_r.

getresponse() extrai a resposta.


Entendendo o ataque de injeção SQL por um script Python

Se o código de retorno for 200, isso significa que conseguimos.

Ele imprimirá o URL atual. Se, após este primeiro sucesso, você

ainda quiser encontrar mais páginas, você pode pressionar a

tecla C.
Entendendo o ataque de injeção SQL por um script Python

O programa anterior é para PHP. Podemos também fazer

programas para diferentes linguagens de servidor web como o

ASP.NET.
Entendendo o ataque de injeção SQL por um script Python

Agora, é hora de executar um ataque de injeção SQL baseado

em tautologia. A injeção SQL baseada em tautologia é

geralmente usada para ignorar a autenticação do usuário.


Entendendo o ataque de injeção SQL por um script Python

Por exemplo, suponha que o banco de dados contém nomes de

usuário e senhas. Neste caso, o código de programação da

aplicação web seria o seguinte:

$sql = "SELECT count(*) FROM cros where (User=".$uname." and Pass=".$pass.")";


Entendendo o ataque de injeção SQL por um script Python

A variável $uname armazena o nome de usuário e a variável $pass

armazena a senha. Se um usuário digitar um nome de usuário e

uma senha válidos, o count (*) conterá um registro. Se count(*) > 0,

o usuário poderá acessar sua conta. Se um invasor inserir 1" or

"1"="1 nos campos nome de usuário e senha, a consulta será a

seguinte:

$sql = "SELECT count(*) FROM cros where (User="1" or "1"="1." and Pass="1" or "1"="1")";.
Entendendo o ataque de injeção SQL por um script Python

Os campos User e Pass permanecerão verdadeiros, e o campo

count(*) se tornará automaticamente count (*)> 0.


Entendendo o ataque de injeção SQL por um script Python

Vamos entender o código sql_form6.py e analisá-lo. Você deve ser

capaz de entender o programa até o loop for. A variável pass_exp

representa a lista que contém os ataques de senha baseados

em tautologia. As variáveis user1 e pass1 pedem ao usuário que

digite o campo nome de usuário e senha como mostrado pelo

formulário.
Entendendo o ataque de injeção SQL por um script Python

A variável flag = 0 faz com que o loop while continue, e a variável p

inicializa como 0. Dentro do loop while, que é a instrução

br.select_form(nr=0), selecione o formulário HTML um.


Entendendo o ataque de injeção SQL por um script Python

Na verdade, esse código é baseado no pressuposto de que,

quando você for para a tela de login, ele conterá os campos

login username e password no primeiro formulário HTML. A

instrução br.form[user1] = 'admin' armazena o nome de usuário; Na

verdade, eu usei para tornar o código simples e compreensível.


Entendendo o ataque de injeção SQL por um script Python

A instrução br.form[pass1] = pass_exp[p] mostra o elemento da lista

pass_exp passando para br.form [pass1]. Em seguida, a seção de

loop for converte a saída em formato de seqüência de

caracteres. Mas, como sabemos se a senha foi aceita com

êxito?
Entendendo o ataque de injeção SQL por um script Python

Você já viu que, depois de fazer login com êxito na página, você

encontrará uma opção de logout ou sair na página. Eu

armazenei diferentes combinações das opções de logout e sair

de uma lista listada. A instrução data1 = data.lower() altera todos os

dados para minúsculas. Isso tornará mais fácil encontrar o

logout ou sair termos nos dados.


Entendendo o ataque de injeção SQL por um script Python

A parte de código anterior encontrará qualquer valor da lista em

data1. Se for encontrada uma correspondência, então sinalizador

torna-se 1; Isso irá quebrar o loop while. Em seguida, a instrução

if flag ==1 mostrará tentativas bem-sucedidas.


Entendendo o ataque de injeção SQL por um script Python

A parte de código anterior mostra que se todos os valores da

lista pass_exp estiverem concluídos, o loop while será

interrompido.
Entendendo o ataque de injeção SQL por um script Python

Agora, tente esse script em uma app do OSWAP, por exemplo o

Bodgelt.
Entendendo o ataque de injeção SQL por um script Python
Entendendo o ataque de injeção SQL por um script Python

Escrevemos um código diferente (sql_form7.py) onde o nome de

usuário que contém: user_exp = ['admin" --', "admin' --", 'admin" #', "admin'

#" ] e preencher com qualquer senha. A lógica por trás desta lista

é que após as seqüências de caracteres admin - ou # para

comentar o resto da linha que está na instrução SQL.

Você também pode gostar