php exec, variable qui n'entre pas dans un shell

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php exec, variable qui n'entre pas dans un shell

par Hywan » 05 mai 2009, 09:56

Je n'ai pas tout lu, mais le peu que j'ai lu, ce sont de belles bêtises :-).

exec() est une fonction qui retourne une chaîne. Moi, j'utiliserais passthru() qui te retourne de vraies erreurs … Commence simplement par là, on verra pour la suite.

par hokutonoken76100 » 29 avr. 2009, 11:43

Ah ok, dans le cas des erreurs qui ne s'affichent pas, il ne s'agit pas d'un problème Linux/Windows mais de configuration de PHP. Cherche le fichier php.ini (commande "locate php.ini") et modifie la valeur de "error_reporting" pour la définir en "E_ALL".
Les nouvelles du jour!
alors j'ai essayé de modifier le php.ini ,pour ne mettre que E_ALL ,j'ai redémarrer le serveur aprés, les erreurs ne s'affichent toujours pas!
en tatonant j'ai trouvé , pour faire un exec dans un si il faut pas utiliser l'echo sinon ne marche pas!
ensuite j'ai reussis a faire escapeshellarg , mais le souci c'est que apparament si je tappe dans le champ utilisateur mkdir ls -l ou un grep quelquechose ou un pseudo normal,l'enregistrement avec le adduser de mon scripte ne sait pas correctement , je le ne le vois pas dans mon etc/group , et je sais pas comment j'ai fais mais ca ma créer des dossiers sur le serveur!! des morceaux de commande lol
mais si j'utilise escapeshellcmd par contre si je tappe un pseudo avec un espace il me retire bien l'espace qd il le creer mais impossible de se connecter avec le mot de passe qu'il a choissit lol
donc je vais essayer de trouver une fonction qui va empecher de mettre un espace dans un pseudo. Apparament va falloir que je le fasse en java script.

par naholyr » 27 avr. 2009, 16:43

Ah ok, dans le cas des erreurs qui ne s'affichent pas, il ne s'agit pas d'un problème Linux/Windows mais de configuration de PHP. Cherche le fichier php.ini (commande "locate php.ini") et modifie la valeur de "error_reporting" pour la définir en "E_ALL".

par Invité » 27 avr. 2009, 16:30

désolé je viens de rentrer de mon week end , moi j'ai pas les message d'erreur qui apparait car je le fait directement avec linux, selon mon erreur j'ai une page toute blanche ;)
est ce que vous auriez une astuce pour eviter que j'utilise l'exec sans l'echo tout en utilisant une solution quasi similaire?
est ce que vous auriez des astuces pour escapeshellarg?

par naholyr » 25 avr. 2009, 09:44

zOmg, lis-tu seulement les messages d'erreur que PHP te donne avant de juste conclure "ça marche pas" ? Si tu le faisais tu serais venu ici non pas en demandant une astuce pour exec(), mais plutôt "c'est quoi la syntax error dans mon code ?"...

echo() n'est pas une fonction mais une instruction du langage, et a donc des emplacements autorisés particuliers... Dans un if() par exemple, non.

par hokutonoken76100 » 24 avr. 2009, 22:42

oui il marche quand je le lance directement depuis linux et aussi quand j'utilise echo exec , une fois combiné à escapeshellarg ca marche pas ! pourtant j'ai fais comme on m'a dit lol.
Est ce que c'est possible de combiner un if avec un echo exec ?
car j'ai essayé de faire un truc comme ca , j'ai essayé de mettre == ca veut pas non plus!
if (echo exec("cat /etc/group | grep dora") =""  && $_POST['utilisateur']!="" &&$_POST['pass']!="")
{ 
  exec("sudo /usr/libexec/changepass.sh " .$_POST['utilisateur']." ".$_POST['pass']) ;
}
else
{ 
Print "arrete de chiper chipeur";
}

par thehawk » 24 avr. 2009, 13:59

Question c** est ce que ton script bash marche ?

par hokutonoken76100 » 24 avr. 2009, 13:42

Plutôt :
exec('sh …/patate.sh ' . escapeshellarg($_POST['usr']));
Ce n'est pas la même fonction, mais c'est plus logique.

Sinon, va voir la documentation de glob(), tu comprendras :-).
j'ai essayé de la taper, mais apparament ca marche pas, je sais pas si c'est encore moi qui est fait une connerie lol ,j'ai essayé plusieurs fois, soit ca fait rien, ou bien il m'a bien créer des dossiers sur le serveur mais pas l'utilisateur lol
exec('sudo /usr/libexec/patate.sh ' .escapeshellarg($_POST['user']."".$_POST['pass'])); 

par Hywan » 23 avr. 2009, 17:09

Plutôt :
exec('sh …/patate.sh ' . escapeshellarg($_POST['usr']));
Ce n'est pas la même fonction, mais c'est plus logique.

Sinon, va voir la documentation de glob(), tu comprendras :-).

par hokutonoken76100 » 23 avr. 2009, 16:58

merci tout le monde,
Cette après midi j'ai réussis à faire mon formulaire et utilisé un autre shell pour vérifier l'utilisateur existait ou non,création de l'utilisateur et son mot de passe, son espace html , un espace ftp , et la je vais voir pour lui donner accés à mysql et limité la taille de son espace.

je suis content d'avoir autant de réponse et de pouvoir avancé dans mon projet, et voir mes failles.
Pour être franc avec vous je suis complètement noob en code. On va dire que ca fait un mois maintenant que je fais du php, tout ça pour faire une AP pour mon bts ( option administrateur réseau)Je lis les truc j'ai trop du mal à comprendre parfois!!
comme la avec un preg_match et \w\.\-\_ j'ai rien compris lol , faut que je regarde dans la documentation, mais la j'ai peur d'être prit à la George par le temps , la je suis en vacance à réviser mes cours, bosser les tpi,sous Linux qui déconne, le pc chauffe et s'éteint. La je le laisse se refroidir quand je suis sous windows. J'essaye juste de gagné du temps par rapport à des oui et non tout en comprenant pourquoi!!

Disons que au début au niveau de la sécurité , je voulais mettre dans mon code php , tant que le nom de l'utilisateur soit différent de samba et apache, rm - etc faire.... vu qu'on m a dit que j'allais avoir une surprise mais ca m'a rassuré qd j'ai tapé halt ou reboot! je me suis dit le rm va rien me faire lol

Donc si je comprend bien avec escapeshellcmd

Code : Tout sélectionner

<html><head><title>PRISE DE TETE</title></head><body>boulet</body><br><br> <?php echo exec(escapeshellcmd("sudo /usr/libexec/patate.sh".$_POST['user'])); ?> </html>
Après avec votre expérience, est ce que par exemple je peux mettre une condition en php selon le message que me ressort l'exec?

Pour ce qui est de glob() , quel est la différence avec un grep ? est ce qu'il y a moyen pour que le glob me recherche juste la chaine que l'utilisateur à saisie ? et non pas comme le grep ( j ai pas encore trouvé le paramétre pour éviter le problème) que si je tape roo comme identifiant, il me dit qu'il est présent à cause de root!
Et pour finir est ce que une fois terminé tout ca et si je fou mon serveur sur le net, vous pourriez essayé de me le pirater sans trop faire de dégat pour voir ou il peut y avoir des failles?!

bonne journée à tout le monde, merci pour votre aide

par Hywan » 23 avr. 2009, 13:10

Oui, bien sûr … 'suis bête de ne pas y avoir pensé. Utilise escapeshellcmd() :-).

par mojorisin » 23 avr. 2009, 12:41

Une petite contribution en passant pour vous signaler de na pas oublier de passer les données saisie par l'utilisateur dans la fonction escapeshellcmd, cela pourra éviter d'avoir un nom d'utilisateur du genre user;rm -rf / passé à l'interpreteur :D

par Hywan » 23 avr. 2009, 12:22

Il faut vérifier l'état de la variable POST. Par exemple avec un preg_match et \w\.\-\_ (au pif). Mais pourquoi ne pas utiliser glob() pour chercher un fichier ?

par Invité » 23 avr. 2009, 12:12

MERCI BEAUCOUP TOUT LE MONDE

merci c'est bien l'espace qui merdait!
merci beaucoup, disons que la j'ai pas trop envie de tester un RM au cas ou lol
vu que c une variable et qu'on fait juste une recherche dans un fichier, ca craint tant que ca ?
comment éviter ce problème?

par Hywan » 23 avr. 2009, 11:04

Hey :),

Fait juste un peu attention à ce que tu écris :
exec('sudo /usr/libexec/patate.sh '. $_POST['user']);
Il faut utiliser $_POST bien sûr, et il manque un espace après patate.sh. Au passage, je rentre ; rm -rf / dans le formulaire et tu auras une belle surprise :-D.