Techniques de programmation en Perl: Ecrire le journal Checker

Techniques de programmation en Perl: Rédaction Checker journal accsess.
(Par Rel4nium | ngh.void.ru)

Dans cet article, je tiens à vous dire sur les bases de la programmation en Perl sur un exemple concret.
La première chose que vous aurez besoin est un interpréteur perla.V systèmes de linuksopodobnyh, il a
deflot, mais si vous décidez de sous Programmes * gagner alors vous aurez besoin: ActivePerl.Skachivay,
Ensembles, les problèmes se posent pas dolzhno.Ne sera rassusolivat long, et se mettent au travail,
Commençons.

Script Objet - serveur détecter la présence d'obus dans une performance du système de web
équipes à travers les scripts vulnérables.

Une fois que nous sommes arrivés avec le but du script pour comprendre ce qu'il devrait être en mesure,
faire fonctionner l'algorithme.

capacités:

- Travailler avec les fichiers, ouvrir / fermer / lecture / écriture
- Examiner les informations nécessaires dont vous avez besoin pour organiser les règles de sélection
- Trouver le bon fichier
- Stockage des résultats de la recherche dans un fichier journal

algorithme:

1) vous avez besoin d'ouvrir le fichier journal du serveur
2) pour recueillir la base de recherche sur les noms de fichiers, commandes, demandes souhaitées
3) pour entrer dans le tableau
4) un large éventail de noms de scripts et d'autres, d'apporter un autre tableau
5) d'organiser la gamme complète de la recherche
6) Un résultat de recherche est affiché
7) entrer un résultat de recherche pour déposer

Maintenant commencer à écrire le code de script, résultant des éléments ci-dessus.

#! / Usr / bin / perl / local
^^^^^^^^^^^^^^^^^^^^^
La première ligne dans le script, il indique à l'interpréteur que cette application de perl.

# Chequer logs apache
^^^^^^^^^^^^^^^^^^^
symbole de grill sert à insérer dans le corps d'un commentaire de script

imprimer "\ n";
^^^^^^^^^^^
But de cette commande pour apporter des informations sur l'écran, ou l'afficher dans
fayl.V ce cas, cette commande est utilisée pour était tout simplement omis
ligne, à savoir, \ n est utilisé pour les sauts de ligne.

imprimer "[Log vérifier Apache \ t";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Afficher la phrase [Log vérifier Apache, après la phrase que nous utilisons des onglets (comment
Utilisez la touche Tab) Notez la syntaxe de l'écriture de code, après la commande d'impression
nous sommes des guillemets doubles, et en eux, nous prescrivons ce que nous devons porter à l'écran,
et un code ligament est utilisé pour pointer zapyatoy.Esli pas certains de ces éléments,
perl interprète ne sera pas comme ça, et il va cracher une erreur seulement.
L'erreur peut être de la forme:
erreur de syntaxe à la ligne de /patch/to/script.pl 9, "print" près
Excution de /patch/to/script.pl avorté en raison d'erreurs de compilation.
En raison de cette erreur, nous pouvons comprendre ce qui suit:
erreur dans la syntaxe, dans la ligne 9 de la fonction d'impression, le script a été interrompu en raison d'erreurs de compilation.
Ie interprète nous dit qu'il n'aime pas, on ne peut corriger une erreur dans
9 ligne.

print "(C) Next Generation Hackers Group> codé par rel4nium]";
impression ">>> Un grand merci à Cr4sh et Gotius \ n \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sur les faisceaux typiques de code je l'ai mentionné ci-dessus.

$ File = "access.log"; # fichier journal
^^^^^^^^^^^^^^^^^^^^^
Considérons maintenant le code est un peu plus compliqué. Dans cette conjonction du fichier variable $, j'attribuer une valeur
access.log (sur I ne fonctionnera pas avec le nom du fichier, dans ce cas le access.log, et variable
$ File, ce qui améliore grandement la facilité d'utilisation du code)

###########################
# coquilles Web:

@search [0] = "nstview"; @search [1] = "remview"; @search [2] = "r57shell";
@search [3] = "nghshell"; @search [4] = "c99shell"; @search [5] = "dump_price";
@search [6] = "phpMyAdmin"; @search [7] = "bd.pl"; @search [8] = "KA_uShell";
@search [9] = "phpShell"; @search [10] = "r57pws"; @search [11] = "WebShell";
@search [12] = "shell"; @search [13] = "cmd ="; @search [31] = "telnet.cgi";

Équipe #:

@search [14] = "ls -al"; @search [15] = "wget"; @search [16] = "curl";
@search [17] = "uname";

demandes # Shell:

@search [19] = "ac = shell"; @search [20] = "work_dir = /"; @search [21] = "tmp";
@search [22] = "img = 1"; @search [23] = "img = 2"; @search [24] = "d =";
@search [25] = "& ef ="; @search [26] = "& shell = 1"; @search [27] = "c = l & d =";
@search [28] = "c = d & d ="; @search [29] = "php & var ="; @search [30] = "c = v & d =";

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Dans cet extrait de code, j'utilise un tableau @search variable à partir de [0] à [30] dans un tableau .T.e
J'apporte 30 articles, dans mon cas 30 slov.OBYaZATELNO numérotation de la variable doit
Il commence par 0.

############################
open (FILE, "$ file") || die "Apache log Fichier introuvable \ n"; # Erreur? Vérifiez le chemin d'accès spécifié dans le fichier journal, apache
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
J'ouvre le fichier (rappelez-vous au début, je parlais assimilant la variable $ file, fichier access.log ravin ici
Voilà ce que nous avions besoin, comme vous pouvez le voir, je ne rentre pas dans le nom du fichier, et utiliser la variable).
fichier design ouvert est simple: open (FILE, "$ fichier")
ouvrir - une commande pour ouvrir le fichier
FILE - descripteur de fichier (la poignée est à nouveau utilisée pour plus de commodité, à savoir, dans l'avenir, nous ne pouvons pas travailler avec
le fichier variable $, et tout simplement utiliser sa poignée) .Opyat aussi faire attention aux règles d'orthographe du ligament
koda.A || die "Apache log Fichier introuvable \ n"; est utilisée pour obtenir une erreur si le fichier
n'a pu être trouvée.

while ( )
^^^^^^^^^^^^^^
Exécutez la boucle poignée FILE tout (dans le début a été Access.log -> $ file -> FILE) .Tsikl - il
transactions récurrentes. Dans notre cas, nous avons juste raccroché access.log fichier pour trouver
elle date boucle slova.T.e est exécutée jusqu'à ce que tous les mots (de @search array) ne doit pas être trouvé

{Si (/ (@ recherche [0] | @search [1] | @search [2] | @search [3] | @search [4] | @search [5] | @search [6] | @search [ 7] | @search [8]
| @search [9] | @search [10] | @search [11] | @search [12] | @search [13] | @search [14] | @search [5] | @search [16] | @ recherche
[17] | @search [19] | @search [20] | @search [21] | @search [22] | @search [23] | @search [24] | @search [25] | @search [25 ] |
@search [26] | @search [27] | @search [28] | @search [29] | @search [30] | @search [31]) / i) {@matches poussoirs, $ _;}}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
puis utiliser une opération logique quand (si), le prisonnier {} skobki.Sdes et le processus de consultation
variables de tableau @ état search.T.e va comme suit: si une partie du @search des variables de tableau
trouvé, il est stocké dans un autre tableau de @matches nommés.
le résultat est un tableau de 1 @matches, avec ceux trouvés dans tableau de variables @search du fichier.

@matches d'impression;
^^^^^^^^^^^^^^^
Nous tirons le contenu du tableau sur les @matches d'écran

print "Le travail est terminé! \ n";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
afficher un travail est terminé!

ouvert (LogFile, '>> logfile.txt');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Créer et fichier logfile.txt ouvert (en utilisant le nom de fichier mis en place >>, ces parenthèses indiquent
que la nécessité de créer un fichier pour l'écriture et l'ouvrir) .tut affecter également poignée LogFile

print LogFile "Adresse IP \ t Temps \ t \ t \ t \ t \ n de Script";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
écrire un fichier journal ouvert (directement dans le fichier logfile.txt)

@matches print LogFile;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
Sont imprimés dans le contenu du fichier journal des @matches de tableau, à savoir le réseau de la requête / nom trouvé.

print LogFile "Le travail est terminé! \ n";
^^^^^^^^^^^^^^^^^^^^^^^^
L'écriture dans le fichier journal que le travail est terminé

FILE près;
^^^^^^^^^^^^^^^^^^^^^^^^
fermer le fichier journal (avec lequel il exécute le script)

LogFile proche;
^^^^^^^^^^^^^^^^^^^^^^^^
fermer le fichier journal


EOF
^^^^^^^^^
fin de la ligne de programme

Maintenant, le script est prêt à l'emploi, et sera utile pour les besoins de l'administrateur système))
Je pense qu'avec l'aide de mes articles, vous êtes un peu compris dans la syntaxe, les fonctions de base de perl,
et maintenant il peut être étudié plus loin et plus profond bijou.

> Je vous conseille de lire:
Clinton Pierce Sams Teach Yourself Perl en 24 heures
Perl Language Specification

> URL:
www.wmate.ru
www.codenet.ru


ps télécharger le script décrit dans cet article peut être ngh.void.ru/soft/d/checklog.rar