🔐
oneforall
  • Welcome
  • ETHICAL HACKING METHODOLOGY / USUAL AND USEFUL TOOLS
    • Reconnaissance
      • Overview
    • Enumeration
      • Scanning
      • Ports
    • Exploitation
    • Post-exploitation
      • Password cracking
      • File transfers
      • Maintaining access
      • Pivoting
      • Cleaning up & Covering tracks
  • Active Directory
    • Basics
    • Attack vectors
      • Network poisoning
      • SMB services
      • LDAP
      • OSINT
    • Post-compromise
      • Enumeration
        • PowerView
        • Bloodhound
      • Attacks
        • Pass the hash / password
        • Token impersonation
        • Kerberoasting
        • GPP / cPassword
        • Mimikatz
  • WEB
    • TOP 10 OWASP
  • WEB SERVER
    • SQL Injection
    • Authentication
    • OS injection
    • CSRF
  • WIRELESS
    • WPA2 PSK
  • FORENSIC
    • Radare2
    • Obtaining Memory Samples
    • Volatility
    • USB forensic
  • EXPLOIT DEVELOPMENT
    • Buffer Overflow
  • SCRIPTING AND PL
    • HTML
    • C basics
    • Python
      • Libraries & hacking usages
    • Bash basics
      • Hacking usages
    • Powershell basics
    • PHP
  • NETWORK SECURITY
    • Network reminders
    • CCNAv7
      • LAN security concepts
      • Switch security configuration
    • Wireshark
  • MISC
    • VIM basics
    • Metasploit Cheatsheet
    • Common ports & protocols
    • Tmux Cheatsheet
    • Linux reminders
  • STEGANOGRAPHY
    • Steganography
  • Privilege Escalation
    • Linux
    • Windows
  • CRYPTO
    • Encryption
    • Hashing
    • RSA
      • Tools
      • Factorisarion
Powered by GitBook
On this page
  • Objectif : automatiser des tâches
  • Le shell
  • Script élémentaires
  • Exécution d'une commande
  • Les variables
  • Exemple de variable
  • Variables prédéfinies
  • Exemple var2.sh
  • Opérations sur les Variables
  • Les tableaux
  • Les tests
  • Tests sur les fichiers
  • Expressions logiques
  • Tests des valeurs
  • Structure conditionnelles if
  • Structure conditionnelles connaisse
  • Structures itératives for
  • Structures itératives while / until
  • La gestion des flux
  • Le cas du clavier
  • Exploitation d'un fichier en sortie
  • Lecture d'un fichier
  • Lecture ligne à ligne
  • Les fonctions
  • Les fonctions : déclaration et appel
  • Les fonctions : paramètres
  • Travail sur les chaînes
  • Extraction
  • Notion de séparateur
  • IFS et fichiers
  • Autour du réseau
  • Commandes réseau
  • WGET
  • CURL
  • Utilisation HTTP
  • Utilisation FTP

Was this helpful?

  1. SCRIPTING AND PL

Bash basics

TODO in english.......

Objectif : automatiser des tâches

  • Fichier texte (attention a l'encodage)

  • Suite de commandes shell

  • Executable par un interpréteur

  • Retournant dans tous les cas une valeur (best practice)

    • code de bon fonctionnement

    • code d'erreur

    • différenciation des erreurs si possible !

Le shell

ensemble de commande et d'outil d'échange avec le système Ensemble de commandes

Exemple de shell:

  • bash : bourne again shell : shell GNU

  • csh, tcsh : shels proche du C de Berkeley

  • ksh : korn shell

  • ...

Script élémentaires

#!/bin/bash
# un commentaire
echo "Salut les amis"
exit 0

avec les guillemets on interprete le contenu, et cela ne représente qu'une donnée

exit 0 = variable par défaut quand ça c'est bien passé

on retour 0 car il n'y a qu'un succès alors que les erreurs peuvent être multiples.

Pour rendre le script exécutable et le lancer :

chmod u+x monScript.sh
./monScript.sh

Exécution d'une commande

  • Utilisation de $

  • Exploitation de la chaîne retournée

    • Affichage

    • Stockage

#!/bin/bash
echo "nous sommes le " $(date)
exit 0

Les variables

  • Non typées, non déclarées

  • référencement de la valeur : $

  • variable en lecture readonly

  • exploitation des variables d'environnement

  • $USER (nom current user), $PWD(print work directory), $HOME (chemin du home du current user)....

  • Liste des variables d'environnement : env

Exemple de variable

#!/bin/bash
variable="bonjour les amis"
echo $variable;
listeFic=$(ls)
echo $listeFic
echo Vous êtes : $USER
echo Répertoire d\'exécution : $PWD
echo Répertoire de base : $HOME
exit 0

Variables prédéfinies

Command

Description

$?

valeur de sortie de la dernière commande

$0

nom du script

$n

Nième argument passé au Script

$#

Nombre d'arguments

$$

PID du processus courant

$*

liste des arguments à partir de $1

Exemple var2.sh

#!/bin/bash
echo "ce script s\'appelle" $0
echo "vous avez passé l’argument" $1
./var.sh
echo "la dernière commande a donné :" $?
exit 0

Opérations sur les Variables

#!/bin/bash

var1=0
echo $var1 #0
let var1++
echo $var1 #1
let var1--
echo $var1 #0

var2=45
var2=$var2+359
echo $var2 #45+359

var3=4
var3=$(($var3+359))
echo $var3 #363

var4=7
var4=$[$var4+3]
echo $var4 #10

Les tableaux

  • Déclaration globale ou individuelle

tab = ("toto" "titi")
tab1[0] = "bob"
tab1[1] = "alice"
  • Pour l'affichage :

echo ${tab1[0]}
echo ${tab[@]}

@ affiche la totalité du tableau

  • Pour la taille : demande de la taille de la structure de données

echo ${#tab1[*]}
len= ${#tab1[*]}

Les tests

Deux syntaxes

  • test expression

  • [ expression ]

Tests sur les types de fichiers

Tests sur les valeurs ( chaînes, numériques )

Tests sur les fichiers

Command

Description

-e

le fichier existe

-f

c’est un fichier

-d

c’est un répertoire

-r -w -x

propriété du fichier

-s

non vide

f1 –nt f2

Plus récent que

f1 –ot f2

Plus vieux que

Expressions logiques

Command

Description

expr1 –a expr2

Et

expr1 –o expr2

Ou

!

Expr Négation

Tests des valeurs

  • Chaine de caractères

    • z / -n Chaîne vide / non vide

    • != / n Différentes identiques

  • Valeurs numériques

    • -eq / -ne Égal / différent

    • -lt / -gt Strictement inférieur / strictement supérieur

    • -le / -ge Inférieur ou égal/ supérieur ou égal

Structure conditionnelles if

if commande1
then
instructions
elif commande2
then
instructions
else
instructions
fi
#!/bin/sh
if [ $# -ne 1 ]
then
echo usage : $0 argument
exit 1
fi
echo Le paramètre est : $1
exit 0

Généralement on commence le script par vérifier if [ $# -ne 1 ] pour vérifier si les paramètres correspondent.

Structure conditionnelles connaisse

case valeur in
expr1) commandes ;;
expr2) commandes ;;
...
esac
#!/bin/sh
case $# in
0) echo aucun paramètre ;;
1) echo 1 paramètre $1 ;;
2) echo 2 paramètres $1 - $2 ;;
3) echo 3 paramètres $1 - $2 - $3 ;;
esac
exit 0
#!/bin/sh
case $USER in
root) echo hello root ;;
olivier) echo bonjour olivier ;;
esac
exit 0

Structures itératives for

for variable [in liste]
do
commandes
done
#!/bin/sh
if [ $# -le 3 ]
then
echo au moins 4 arguments
exit 1
fi
echo Les paramètres sont :
for var in $*
do
echo $var
done
exit 0
#!/bin/bash
if [ $# -ne 1 ]
then
echo usage $0 repertoire
exit 1
fi
for f in $(ls $1)
do
if [ -f $1/$f ]
then
echo $f est un fichier
elif [ -d $1/$f ]
then
echo $f est un répertoire
fi
done
exit 0

Structures itératives while / until

While :

while [test]
do
commandes
done
#!/bin/bash
cpt=0
while [ $cpt -le 10 ]
do
echo "encore 1 : " $cpt
let cpt++
done

Until :

until [test]
do
commandes
done
#!/bin/bash
cpt=0
until [ $cpt -eq 10 ]
do
echo "encore 1 : " $cpt
let cpt++
done

La gestion des flux

En UNIX tout est fichier.

Utilisation des flux

  • < entrée standard depuis un fichier

  • > ou 1> flux standard

  • 2> flux d’erreur

  • 2>&1 redirection de la sortie d’erreur vers la sortie standard

Redirection dans un fichier

  • > écriture et création du fichier

  • >> ajout à un fichier

Le cas du clavier

  • Ecriture de scripts interactifs

  • Lecture au clavier

  • Utilisation de read

  • Affectation d’un liste de variables

#!/bin/bash
read v1 v2 v3
echo "vous avez entré $v1"
echo "vous avez entré $v2"
echo "vous avez entré $v3"

Exploitation d'un fichier en sortie

  • Exploitation de la redirection

  • Ecriture avec echo dans le fichier

#!/bin/bash
list=$(ls)
for element in $list
do
echo $element >> ./toto.txt
done

Lecture d'un fichier

  • Lecture d’un fichier

  • Lecture de la totalité d’un fichier dans une variable

    • Exploitation de cat

    • Exploitation de la redirection

#!/bin/bash
list=$(<toto.txt)
for element in $list
do
echo $element >> ./toto.txt
done
#!/bin/bash
list=$(cat toto.txt)
for element in $list
do
echo $element >> ./toto.txt
done

Lecture ligne à ligne

Utilisation de

  • Boucle while

  • read

  • redirection

#!/bin/bash
cpt=1
while read LINE
do
echo $cpt ":" $LINE
let cpt++
done < toto.txt

Les fonctions

  • Eléments de structuration de programmes

  • Pas toujours ( bien ) utilisées

  • Script souvent == programmation « sale »

  • Exploitation standard

    • Déclaration

    • Paramétrage

    • Appel

Les fonctions : déclaration et appel

#!/bin/bash
#déclaration
listFic(){
echo la liste des fichiers est :
ls -l
}
echo appel à la fonction
#appel
listFic

Les fonctions : paramètres

  • Pas de déclaration dans le prototypage

  • Exploitation des paramètres comme pour les scripts $1 , $2 …

#!/bin/bash
listFic(){
echo la liste des fichiers dans $1 est :
ls -l $1
}
echo Donnez le chemin à explorer :
read path
echo appel à la fonction
listFic $path

Travail sur les chaînes

  • Possibilité de réaliser des opérations spécifiques

    • Extraction directe

    • Modification du symbole délimiteur

  • Simplification des programmes

    • Evite l’usage d’expressions régulières

  • Attention dans le cas des séparateurs

    • Persistance de la modification

Extraction

Extraction

  • Dans un chaine

  • À partir d’un position

  • Un nombre définit de caractères

    ${ chaine : position : nombre_de_caractères }

Troncature

  • Dans un chaine

  • Un nombre définit de caractères

  ${ chaine : nombre_de_caractères }

Exemple :

#!/bin/bash
chaine="salut à vous tous"
chaine2=${chaine:8:4}
echo $chaine #salut à vous tous
echo $chaine2 #vous
chaine3=${chaine:5}
echo $chaine3 #à vous tous

Notion de séparateur

  • Définition de la variable spéciale $IFS (Internal Field Separator)

  • Utilisé pour effectuer les opérations standard de lecture

  • Valeur par défaut (configurable et dépendante du système)

    • newline

    • newline , tab , space

  • Redéfinition possible de l’IFS

    • Permet le split implicite

Exemple :

#!/bin/bash
oldIFS=$IFS
toto="oli;vier;toto"
echo $toto
echo "**************"
IFS=';'
echo $toto
for var in $toto
do
echo $var
done
echo "**************"
IFS=$oldIFS
echo $toto
oli;vier;toto
**************
oli vier toto
oli
vier
toto
**************
oli;vier;toto

IFS et fichiers

#!/bin/bash
affich(){
oldFS=$IFS
IFS=';'
for var in $1
do
echo $var
done
IFS=$oldIFS
echo
"---------
"
}
while read LINE
do
affich $LINE
done < mdp.txt
olivier;flauzac;azerty
florent;nolot;kkjgg
hacene;fouchal;pjhgbvc
olivier
flauzac
azerty
---------
florent
nolot
kkjgg
---------
hacene
fouchal
pjhgbvc
---------

Autour du réseau

Commandes réseau

  • Commandes respectant les protocoles réseau

  • Intégrable dans des scripts

  • Définition de l'ensemble des commandes

    • En ligne de commande

    • Dans des fichiers de configuration

  • Eléments définis

    • Adresse de destination

    • Fichier source

    • Fichier destination

    • login/motdepasse

    • ...

WGET

  • Outil lié au requêtes

    • Téléchargement

    • Test d’existence (en HTTP on utilise le verbe HEAD)

  • Permet

    • De télécharger en ligne de commande

    • D’intégrer le téléchargement dans les scripts

  • Permet «l’aspiration»

  • Exploitation des protocoles

    • FTP

    • HTTP

    • HTTPS

wget –-spider URL
wget URL
wget –O fichier URL
wget –-continue –O fichier URL #
wget –-ftp-user=XXX –-ftp-password=YYY –O fichier URL #ftp avec login/motdepasse
wget –-limitrate=512k –O fichier URL #limiter le taux de telechargement
wget –-mirror –-convert-links –P ./dir URL #faire un site mirroir
wget –-user-agent= "xxx " –O fichier URL #changer le champs user-agent dans l'entete HTTP

0

Succès

1

Erreur générique

2

Parse error

3

Erreur d'ent

4

Erreur réseau

5

Erreur d’authentification SSL

6

Erreur d’authentification

7

Erreur de protocole

8

Erreur retournée par le serveur

CURL

  • Bibliothèque de requête pour les URL

    • commande de transfert de et vers un serveur

  • Accès et création de ressource sur un serveur

    • Exploitable en environnement REST

  • Protocoles supportés : FTP(S) , HTTP(S), SMPT(S), POP(S), IMAP(S), SCP, SFTP, SMB ...

  • Conçu pour fonctionner sans inter-actions

  • Basé sur libcurl

    • intégration dans les langages de script

Utilisation HTTP

curl http://www.toto.com
curl –o toto.html http://www.toto.com #sauvegarde sur le disque
curl –L http://www.toto.html #suivre les redirections
curl –c –o toto.html http://www.toto.com # -continue, reprends et continue un téléchargement si interrompue
curl --limit-rate 10MB –o toto.html http://www.toto.com
curl -z 15-Jan-19 –o toto.html http://www.toto.com # téléchargement uniquement si le fichier est plus récent que le 15 janvier 2019
curl –u login:password –o toto.html http://www.toto.com # possibilité de passer login et mdp
curl –V http://www.toto.com
curl –I http://www.toto.com
curl –trace http://www.toto.com
curl –x http://www.toto.com
curl --data "txt=letexte" http://addr/form.php #passer des paramètres d'un formulaire
curl --data-urlencode "txt=ici un texte" http://addr/form.php
curl --cookie "cook=lecookie" http://addr/cook.php #rajouter un cookie dans l'entete

Utilisation FTP

curl –u ftpuser:ftppass –O ftp://ftp_server/file
curl –u ftpuser:ftppass –O ftp://ftp_server/
curl –u ftpuser:ftppass –T ./myLocalFile ftp://ftp_server/file
curl –u ftpuser:ftppass –T "{./myLocalFile1 , ./myLocalFile2} " ftp://ftp_server/file  #donner explicitement les fichiers que l'on souhaite télécharger
PreviousLibraries & hacking usagesNextHacking usages

Last updated 5 years ago

Was this helpful?