Rechercher dans ce blog

Affichage des articles dont le libellé est perl. Afficher tous les articles
Affichage des articles dont le libellé est perl. Afficher tous les articles

mercredi 9 décembre 2015

Secret SSH

Secret SSH 



SecretSSH est un petit programme en perl qui permet juste de montrer la
faisabilité d'une idée amusante : cacher sshd et l'activer à distance à
la demande.

Il permet de répondre à ma manière aux personnes qui ont peur du
débordement de buffer ou de la trappe dans un serveur SSH ;-)

L'activation de sshd se fait sur la réception d'un paquet TCP possédant des
caractéristiques particulières. Ainsi, le démon sshd n'est pas toujours en
écoute sur le réseau et à distance il est impossible (?) de le trouver.

Il est possible d'envisager un tel programme pour administrer une machine
aidant à la détection d'intrusion avec SNORT par exemple. Il est alors
possible de fermer tous les services sur cette machine même le port 22/tcp.

Le programme suivant n'est qu'une illustration permettant de montrer ce qui
est faisable mais il est fourni sans aucune garantie.

Pour tester secretssh (fourni ci-dessous) :

. Sur le serveur (en tant que root) : ./secretssh.pl

. Sur le client (en tant que root) : ./secretssh.pl [login@]server

secretssh nécessite perl RawIP qui peut être téléchargé à l'adresse :
http://quake.skif.net/RawIP/files/Net-RawIP-0.09c.tar.gz

Dans la configuration initiale, le client envoi un paquet SYN tcp sur le
port 80 du serveur avec le champ id, l'adresse ip source, le port source et
le numéro de séquence fixés à certaines valeurs. A la réception de ce paquet
le serveur lance sshd en mode debug sur le port 2222/tcp. Le client se connecte
ensuite via ssh sur le port 2222/tcp du serveur. Ce port n'est accessible sur
le serveur que pour une seule connexion ssh.


#------------------------------------------------------------------------------
#!/usr/local/bin/perl
# secretssh - sa/hsc

# RawIP homepage: http://quake.skif.net/RawIP/files/Net-RawIP-0.09c.tar.gz
use Net::RawIP;
## CONF (you should edit all these params) #####
my $key_port_dst = '80';
my $key_ip_src = '192.168.66.66';
my $key_port_src = '1666';
my $key_ip_id = '666';
my $key_tcp_seq = '66666666';
my $verbose = 0;
my $bindport = 2222;
my $SSH = '/usr/local/bin/ssh';
my $SSHD = '/usr/local/sbin/sshd';
## MAIN ########################################
print " --== Secret SSH - sa/hsc ==--\n";
$a = new Net::RawIP;
my $remote = shift || "";
if( $remote=~/\S/ ) { #client
my $login="";
if($remote=~/^(\S+@)(\S+)$/) {$login=$1; $remote=$2;}
$a->set({ip=>{id=>$key_ip_id,saddr=>$key_ip_src,daddr =>$remote},
tcp=>{dest=>$key_port_dst,source=>$key_port_src,syn=>1,seq=>$key_tcp_seq}});
$a->send;
$verbose ? exec "$SSH", '-v', '-p', "$bindport", "${login}${remote}"
: exec "$SSH", '-p', "$bindport", "${login}${remote}";
}
else { #server
my $dev = Net::RawIP::lookupdev($tout);
print "Server using $dev and port $bindport ...\n" if($verbose);
$pcap=$a->pcapinit($dev,"tcp and src host $key_ip_src and src port $key_port_src".
" and ip[4:2] = $key_ip_id and ip[24:4] = $key_tcp_seq",1500,30);
loop $pcap,-1,\&Bindsshd,\@a;
}
## FUNC #########################################
sub Bindsshd { system "$SSHD", '-d', '-p', "$bindport"; }
## EOF ##########################################
#------------------------------------------------------------------------------

dimanche 26 septembre 2010

perl List::Compare array listes

Pour trouver l'intersection, l'union, le complément, etc. entre deux ou plusieurs listes : utilisation du module perl :

List::Compare

Methods

All the comparison methods available in the Regular case are available to you in the Accelerated case as well.

    @intersection     = $lca->get_intersection;
    @union            = $lca->get_union;
    @Lonly            = $lca->get_unique;
    @Ronly            = $lca->get_complement;
    @LorRonly         = $lca->get_symmetric_difference;
    @bag              = $lca->get_bag;
    $intersection_ref = $lca->get_intersection_ref;
    $union_ref        = $lca->get_union_ref;
    $Lonly_ref        = $lca->get_unique_ref;
    $Ronly_ref        = $lca->get_complement_ref;
    $LorRonly_ref     = $lca->get_symmetric_difference_ref;
    $bag_ref          = $lca->get_bag_ref;
    $LR               = $lca->is_LsubsetR;
    $RL               = $lca->is_RsubsetL;
    $eqv              = $lca->is_LequivalentR;
    $disj             = $lca->is_LdisjointR;
                        $lca->print_subset_chart;
                        $lca->print_equivalence_chart;
    @memb_arr         = $lca->is_member_which('abel');
    $memb_arr_ref     = $lca->is_member_which_ref('baker');
    $memb_hash_ref    = $lca->are_members_which(
                            [ qw| abel baker fargo hilton zebra | ]);
    $found            = $lca->is_member_any('abel');
    $memb_hash_ref    = $lca->are_members_any(
                            [ qw| abel baker fargo hilton zebra | ]);
    $vers             = $lca->get_version;

samedi 25 avril 2009

files directory listing to html page with hyperlinks - perl script

Petit script que j'ai écrit pour créer une page htlm qui liste les entrées d'un répertoire et crée les liens vers les fichiers.

C'est un script perl rudimentaire mais qui fait ce dont j'avais besoin. Avant de l'écrire je me suis beaucoup énervé à chercher sur le net un script aussi basique et élémentaire sans rien trouver !

#!/usr/bin/perl # Script pour lister sur une page html les entrees d'un repertoire # avec hyperliens vers les fichiers # Version 0.1 - 2009_04_25 # Le href pointe toujours vers un path relatif au dir qui contient les # fichiers listes. La page html doit donc etre placee dans le meme # dossier que les fichiers sur le serveur. @ARGV or die "Usage : %dir2html somedir > liste.html\n"; $some_dir = shift @ARGV; opendir ( DIR, $some_dir ) || die "can't opendir $some_dir: $!"; # Formatage avec des paragraphes plutot que liste a bulle #@dots = map "<p><a href=\"$_\">$_<\/a><\/p>", grep ! /^\./,   readdir ( DIR ) ; # Formatage en liste # J'exclus de la liste de sortie par un simple grep html|htm la page generee # et donc du meme coup tous les fichiers avec ces extensions @dots = map "<li><a href=\"$_\">$_<\/a><\/li>^M", grep ! /.htm ( l ) ?$/, grep ! /^\./,   readdir ( DIR ) ; closedir DIR; print <<EOF; <html> <head>   <meta content="text/html; charset=UTF-8" http-equiv="content-type">   <title>Liste des fichiers du repertoire $some_dir </title>   <meta name="robots" content="noindex, nofollow, noarchive"> </head> <body> <ul> EOF print @dots; print <<EOF; </ul> </body> </html> EOF