[RESOLU][BASH] commande Nmap & Php

Forum d'assistance et d'échange sur l'installation, la configuration, et l'utilisation des système Linux et BSD. Vous pouvez y poster vos questions concernant ces systèmes d'exploitation en faisant l'effort préalable de rechercher dans le forum, dans les manuels et les documentations que la réponse n'y figure pas.

Modérateur: modos Ixus

[RESOLU][BASH] commande Nmap & Php

Messagepar 3i1 » 06 Juin 2005 11:20

Bonjour à tous!
Pour mon premier post, je vous pose une question qur laquelle je planche depuis maintenant 1 semaine...

Je cherche à faire une interface PHP représentant les switchs de ma boîte, avec pour chaque port l'@IP, l'@MAC et l'user.
Je souhaite utiliser pour cela la commande Nmap.
Je fais donc sur un terminal (Konsole) ceci :
Code: Tout sélectionner
# nmap -sP ***.**.***.0/24 > /tmp/nmap248.tmp


ce qui me donne, pour chaque machine du réseau, dans mon fichier tmp :

Code: Tout sélectionner
Host [@IP] appears to be up.
MAC Address: [@MAC] (type machine)


Voyant que cela fonctionne bien et réponds à mes attentes, je crée un fichier php contenant :
Code: Tout sélectionner
exec("nmap -sP ***.**.***.0/24 > /tmp/nmap248.tmp");


ce qui me donne, pour chaque machine du réseau, dans mon fichier tmp :

Code: Tout sélectionner
Host [@IP] appears to be up.


Le problème : vous remarquerez qu'il manque la ligne d'@MAC...

Les solutions déjà testées : redirections de flux (2>&1), autres fonctions (system, shell_exec,passthru), quasiment toutes les options de nmap (dont les -o* pour travailler sur les logs) mais le résultat est toujours le même...

Je cherche un gourou en Linux ou en Shell et en Php pour soit m'expliquer pourquoi c'est ti pas possible, soit pour me donner une piste (ou carrement la solution!) lol.

Vraiment un réel et grand Merci d'avance à ceux qui pourront m'aider, car là cela ne se voit pas mais je vais péter un boulon :/ lol

bien bonne journée à tous les lecteurs de ce post

PS: Config SuSE 9.3, Apache2, Php4, nmap 3.81
Dernière édition par 3i1 le 06 Juin 2005 15:54, édité 1 fois au total.
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar tomtom » 06 Juin 2005 11:37

Ce serait pas un simple problème de droits ? Avec quel user tourne ton php ?

t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar Franck78 » 06 Juin 2005 11:46

Puisqu'elle manque ta ligne MAC, c'est qu'elle ne provient pas de la ou tu penses...

Chez moi ta commande donne:
Code: Tout sélectionner
[11:40:58]#>nmap -sP 10.0.0.0/24

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2005-06-06 11:41 CEST
Host ntkiller2 (10.0.0.2) appears to be up.
Host thewall (10.0.0.100) appears to be up.
Nmap run completed -- 256 IP addresses (2 hosts up) scanned in 20.732 seconds


Point de mac address affichée..
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Messagepar 3i1 » 06 Juin 2005 12:01

Merci de vos réponses rapides.
TomTom > ce n'est pas un problème de droits puisque j'obtiens bien un résultat. Le problème est qu'il est incomplet par rapport à la même commande effectué en console.

Franck78 > oui, c'est une éventualité à laquelle j'ai pensé. Je me suis posé la question sur le fait que nmap devait surment appeler une autre commande pour récupérer l'@MAC. Tu remarqueras néanmoins que tu es en v3.50 et moi en v3.81, donc peut être que l'affichage de l'@MAC est postérieur à ta version...

Je pense que pour avancer je vais rester avec ce résultat nmap et ensuite appliquer un arping sur chaque host trouvé... c'est un peu lourd pour le réseau je pense mais si c'est la seule solution...

---
Au cours de la rédaction de ce message, j'ai testé le nmap en user et en root sur konsole, et effectivement le résultat diffère!!
TomTom, pourrais tu me donner la méthode pour régler cela?
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar Jacques- » 06 Juin 2005 12:51

Pour exécuter une commande en root depuis un user autorisé (ou quelconque) il faut utiliser sudo
En utilisant visudo on peut créer une entrée qui autorise à un utilisateur précis, depuis une machine précise éventuellement, d'exécuter une commande nécessitant les droits de root (le nom du programme doit être avec le chemin complet).
Cela ne devrait pas poser de problèmes pour exécuter cette commande depuis PHP.

Jacques
Avatar de l’utilisateur
Jacques-
Vice-Amiral
Vice-Amiral
 
Messages: 952
Inscrit le: 23 Jan 2003 01:00

Messagepar 3i1 » 06 Juin 2005 13:18

merci, je ne connaissais pas cette manip. Je vais rechercher des infos sur ce sujet et faire des tests. A suivre donc...
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar tomtom » 06 Juin 2005 14:04

Voila jacques t'a tout dit, sudo/visudo.
Ou alors le bit setuid sur nmap, aterisque et perils ;)

Le problème vient du fait que nmap se comporte de manière différente selon les droits qu'il a, par exemple en root par defaut il fait un scan tcp/syn alors qu'en non root, il est obligé de faire un connect() ce qui est bien peu discret...

Et effectivement, la version 3.50 ne donnait pas ces informations ;)

t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar 3i1 » 06 Juin 2005 14:24

oki merci. Je viens de lire quelques tuto sur sudo (sur andesi.org et léa-linux), j'ai compris le système mais j'aurais besoin d'une confirmation. J'ai rajouté cette ligne :

Code: Tout sélectionner
m60gdes ALL=(root) NOPASSWD:/usr/bin/nmap


cela signife bien que : l'user m60gdes, sur toutes les machines du réseau, peut exécuter comme s'il était root et sans mentionner de password, la commande nmap ?
car si oui, cela ne marche pas...
Y a t il quelque chose à relancer pour prendre en compte les modifications?

je poste au cas où le sudoers file

Code: Tout sélectionner
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification
#Cmnd_Alias NMAP = /usr/bin/nmap

# Defaults specification
Defaults targetpw    # ask for the password of the target user i.e. root
%users ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!

# Runas alias specification

# User privilege specification
root    ALL=(ALL) ALL
m60gdes ALL=(root) NOPASSWD:/usr/bin/nmap

# Uncomment to allow people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

# Same thing without a password
%wheel ALL=(ALL)       NOPASSWD: ALL

# Samples
# %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users  localhost=/sbin/shutdown -h now
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar tomtom » 06 Juin 2005 14:33

oui, mais il doit utiliser sudo :

#sudo nmap

devrait fonctionner sans mot de passe.


t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar 3i1 » 06 Juin 2005 14:47

voui, cela marche sur konsole.
Mais ce n'est pas le cas si je mets dans un fichier php cette commande:

exec("sudo nmap -sP ***.**.***.0/24 >/tmp/nmap248.tmp");

mon fichier tmp devient même vide, alors que sans le sudo il se remplit avec les lignes host.
That is the problem
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar tomtom » 06 Juin 2005 15:05

Tu es sur que le user est bon ?

QU'as-tui dans ton fichier /var/log/auth.log ?


t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar 3i1 » 06 Juin 2005 15:17

Je n'ai pas de fichier auth.log dans /var/log/ (ni même autre part selon la commande find)
Dans /var/log/ j'ai un dossier apache2 avec dedans un access.log, error.log, et rc.out.
Mais je n'ai rien trouvé dedans de bien concret (a part le favicon.ico qui manque à chaque reload de la page de test).

------------------ EDIT --------------------------
Résolu!
Un ptit "ls -l" sur /tmp/ et je m'aperçoit que le user de nmap248.tmp est... "wwwrun"
Donc je recopie la ligne "m60gdes..." de sudoers file, en remplaçant m60gdes par wwwrun , et là j'ai mes adresses MAC dans mon fichier .tmp

voilou, merci beaucoup à vous tous pour le temps que vous avez pris pour me répondre. Bonne journée, et.... au prochain problème! ;) ++
3i1
Matelot
Matelot
 
Messages: 9
Inscrit le: 06 Juin 2005 11:00

Messagepar Jacques- » 07 Juin 2005 22:58

La commande à taper doit être exactement celle inscrite dans le fichier sudoerrs

C'est à dire : /usr/bin/nmap
et non nmap tout court.

Ceci est prévu pour éviter qu'un petit comique remplace dans le répertoire courant un fichier exécutable nmap par un joli script nommé nmap et contenant la commande /bin/bash par exemple.
Ce serait gênant d'exécuter un script qui donne un shell avec les droits de root, non ?

Remplace ta commande dans ton programme et ça devrait rouler. De toute façon, c'est facile de tester en tant qu'utilisateur lambda, quitte à changer provisoirement le nom de l'utilisateur avec visudo.
Si on demande un mot de passe, c'est que l'utilisateur ne tape pas la commande attendue.

Jacques
Avatar de l’utilisateur
Jacques-
Vice-Amiral
Vice-Amiral
 
Messages: 952
Inscrit le: 23 Jan 2003 01:00


Retour vers Linux et BSD (forum généraliste)

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 0 invité(s)