Posté le 12/12/2017 à 09:04 Membre depuis le 13/06/2001, 73038 messages
Ben disons que quand tu utilises une commande (au pif, system en PHP) qui permet d'exécuter du code au niveau système avec l'utilisateur lançant PHP, ce n'est pas une surprise que le user apache/http soit en mesure de lancer une commande système à l'aide de PHP cheeky
avatar
Posté le 12/12/2017 à 09:36Edité par Uther le 12/12/2017 à 14:52 Membre depuis le 10/06/2001, 8842 messages
Certes mais ça peut rendre une attaque par injection autrement plus dangereuse. Donc s'il s'agit d'un fonction non documentée (apparemment ça n'est pas le cas de system en PHP) ça peut être un problème.
Java a eu des failles lié a ça à une époque. L'appel à des fonctions non documentées permettaient une élévation de privilèges alors qu'il était censé être en mode sandbox.
avatar
Posté le 12/12/2017 à 12:58 Membre depuis le 30/06/2001, 71356 messages
En l'occurence, il n'y a aucun test avec "system" mais bien des fonctions qui sont soit non documenté soit mal documenté.
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Posté le 12/12/2017 à 16:20 Membre depuis le 13/06/2002, 42683 messages
Bah si, dans l'exemple que je citais (./3326) il utilise la fonction PHP shell_exec ? (qui est documentée, et dont la doc explique que ça exécute une commande système)
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Posté le 12/12/2017 à 16:29 Membre depuis le 30/06/2001, 71356 messages
Relis alors parce que le papier ne dit pas "OMG Shell Exec permet de lancer un executable"

mais le fait que PHP fait trop de reintrepretations a sa facon, et le code

shell_exec(bash." something")

actuellement lance "bash" si le define "bash" n'est pas definie

When the PHP function shell_exec() receives theundefined constant bash, it usesthe string representation of the constant.
This means that the string bash will be concatenated with the user - supplied input, allowing command injection.


En gros sur une ligne de commande:

php -r 'echo shell_exec(escapeshellcmd(bash." -c id"));'

Plutot que de tenter d'executer " -c id" va executer "bash -c id" parceque PHP va trouver "bash" et comme ce n'est pas un define, va le traiter comme du texte

Ou peut etre plus explicite:

php -r 'echo shell_exec(escapeshellcmd(ls." /"));'
PHP Notice:  Use of undefined constant ls - assumed 'ls' in Command line code on line 1

Notice: Use of undefined constant ls - assumed 'ls' in Command line code on line 1
backup
bin
boot
dev
etc
gcc4ti
git
home
lib
lib32
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
svn
sys
tigccpp
tmp
usr
var

(testé localement)

Le notice Notice: Use of undefined constant ls - assumed 'ls' in Command line code on line 1 est un comportement indesirable
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Posté le 12/12/2017 à 16:45 Membre depuis le 10/06/2001, 8842 messages
Arg!
PHP est encore plus crade que dans mes souvenirs.
avatar
Posté le 12/12/2017 à 17:04 Membre depuis le 13/06/2001, 73038 messages
C'est un comportement inhabituel, je suis d'accord, mais c'est le comportement qui a été souhaité par les développeurs, qui est connu, qui est le même au moins depuis PHP 4, et qui lève une notification visuelle.
(Et l'utilisation de exec, shell_exec ou system ne se fait pas n'importe comment de toutes façons, parce que de base tu peux tout pourrir).
Après, je suis d'accord qu'on devrait plutôt avoir un Warning (ou une option dans php.ini) pour gérer ça.
avatar
Posté le 12/12/2017 à 17:07 Membre depuis le 30/06/2001, 71356 messages
un mot clef ne devrait JAMAIS etre inteperté comme une chaine.


system_exec(echo." prout")

va foirer parce que echo est un mot clef de PHP.
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Posté le 12/12/2017 à 17:19 Membre depuis le 13/06/2001, 73038 messages
ls n'est pas un mot clé PHP, c'est un mot-clé bash. Et il n'y a pas que bash, il y a aussi Windows comme environnement d'exécution... En PHP, c'est scandir qui liste le contenu d'un dossier.

Ce n'est pas que ce soit un mot clé le problème, c'est que c'est considéré comme une constante (parce que hors des délimiteurs de chaîne de caractère) et qu'une constante non déclarée prend automatiquement la valeur de son nom.
echo ne peut évidemment pas être déclaré comme une constante, donc c'est normal que ça foire.

(Note 1 : Je ne dis pas que c'est un comportement sûr, hein, je dis juste que c'est un comportement voulu par le système et connu depuis le début ; le gros du danger est surtout que si le dev se plante dans ses chaînes de caractères, il ne s'en rendra peut-être pas compte, mais vu que ça fera ce qu'il voulait que ça fasse...)

(Note 2 : utiliser un IDE de qualité aide à se préserver de telles erreurs ^^)
avatar
Posté le 12/12/2017 à 17:28 Membre depuis le 30/06/2001, 71356 messages
L'utilisation de ls ici est juste un exemple.

N'importe quel "mot clef" non defini par le language ou par un define() sera convertit en chaine de caractere.

Encore une fois c'est un comportement plus qu'indesirable, et pas que pour system_exec.
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Posté le 12/12/2017 à 17:31 Membre depuis le 13/06/2001, 73038 messages
Godzil (./3339) :

N'importe quel "mot clef" non defini par le language ou par un define() sera convertit en chaine de caractere.
N'importe quoi sera converti en chaîne, oui (pas seulement un mot-clé). Mais c'est une "feature", pas un "bug" ^^
avatar
Posté le 12/12/2017 à 17:37 Membre depuis le 10/06/2001, 8842 messages
Mais c'est une feature de merde qui risque d'entrainer des bug.
avatar
Posté le 12/12/2017 à 18:13 Membre depuis le 27/04/2006, 60448 messages
#PHP# ^^
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 12/12/2017 à 18:33 Membre depuis le 13/06/2002, 42683 messages
./3334 : c'est clairement indiqué dans la spécification de PHP, tu peux penser ce que tu veux de cette fonctionnalité mais ça n'en fait pas un bug pour autant (même si TU LE DIS AVEC DES MAJUSCULES). Le papier du mec n'apporte rien d'intéressant en disant que cette fonctionnalité peut être facilement mal utilisée, c'est déjà documenté officiellement.
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Posté le 12/12/2017 à 20:59 Membre depuis le 10/06/2001, 30813 messages
Uther (./3335) :
Arg!
PHP est encore plus crade que dans mes souvenirs.
A l'époque (à vous de remettre les choses dans leur contexte d'il y a pas loin de 20 ans), c'était une feature... et à l'usage, comme plusieurs autres features de l'époque, il s'est avéré que ce n'était pas si terrible comme idée.

Maintenant (depuis longtemps ; des années), utiliser une constante non définie (qui fait un fallback sur une chaine de caractère dont le texte est le nom de la constante non définie) lève un avertissement.
PHP a la bonne (ou mauvaise) habitude de rester compatible au maximum (enfin, on va dire ça) lors des montées de versions (sinon, le public ne monte pas de version, ça s'est vu dans le passé) ; et du coup c'est encore là...

Jusqu'à PHP 7.1 inclus, cet avertissement est de niveau notice (normalement, on les affiche en développement).
A partir de PHP 7.2 (publié il y a quelques jours), cet avertissement est de niveau warning (plus "grave" ; normalement, on les loggue en production) ; l'idée étant d'indiquer aux développeurs qui utiliseraient encore cette fonctionnalité qu'ils ne devraient pas. Et le message d'erreur indique, depuis 7.2, que cette fonctionnalité lèvera une exception (une Error) dans le futur.

En somme : oui c'est pourri. Non ça peut pas juste être changé du jour au lendemain. Oui, le travail de changement est en cours.

Cf https://3v4l.org/N9rE7 pour les messages d'erreur des différentes versions de PHP.
Et cf https://wiki.php.net/rfc/deprecate-bareword-strings pour la RFC à propos du changement arrivée en 7.2 et qui devrait se poursuivre en 8.0.
avatarTutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall
Posté le 12/12/2017 à 21:48 Membre depuis le 14/03/2003, 8912 messages
Le papier du mec c'est surtout : "si vous codez comme un porc il va y avoir des failles !".
Posté le 13/12/2017 à 09:35 Membre depuis le 16/06/2001, 69756 messages
grin
Posté le 13/12/2017 à 10:34 Membre depuis le 24/08/2007, 729 messages
Je bosse actuellement sur un projet PHP au boulot, et le serveur de prod a été configuré correctement : les notices font planter l’exécution du code, ce qui évite ce genre de problème (en dév on les laisse passer, pour les voir et les corriger justement). Si les mecs configuraient bien leurs serveurs aussi... embarrassed
avatarloclamor
Mondo Photo
Le voyage en photo et en 1 clic
Posté le 13/12/2017 à 10:38 Membre depuis le 13/06/2001, 73038 messages
(Je suis assez d'accord avec toi smile Pendant longtemps je n'ai pas affiché les Notice en dev, et seuls les warnings plantaient en prod ; aujourd'hui, je ne laisse rien passer (et mon IDE non plus embarrassed ))
avatar
Posté le 13/12/2017 à 11:50 Membre depuis le 10/06/2001, 40253 messages
La configuration correcte en production est de désactiver les notices (E_NOTICE, et aussi le spam E_DEPRECATED et E_STRICT) pour ne pas spammer les logs avec.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 13/12/2017 à 11:54 Membre depuis le 13/06/2001, 73038 messages
Non, la configuration correcte en prod est d'interrompre le script sans affichage vers stdout et uniquement vers stderr. Du coup, pas de spam, ça s'arrête dès que le problème est rencontré.
avatar
Posté le 13/12/2017 à 11:55 Membre depuis le 10/06/2001, 40253 messages
Bonne chance pour faire tourner un code tiers reel avec ce genre de configuration. roll
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 13/12/2017 à 13:03 Membre depuis le 16/06/2001, 69756 messages
donc tout code tiers reel est écrit avec deux pieds gauches?
Posté le 13/12/2017 à 13:20 Membre depuis le 13/06/2001, 73038 messages
Le code tiers réel est souvent développé pour une ancienne version de PHP (et c'est un vrai souci pour la maintenabilité et la sécurité).
avatar
Posté le 13/12/2017 à 14:20 Membre depuis le 30/06/2001, 71356 messages
Les versions modernes de PHP ne travaillent plus que sur des entiers?
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Posté le 16/12/2017 à 18:21 Membre depuis le 27/04/2006, 60448 messages
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo
Posté le 16/12/2017 à 20:06 Membre depuis le 18/06/2001, -26082 message
top
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 16/12/2017 à 22:35 Membre depuis le 11/07/2003, 54830 messages
\o/

C'est une bonne nouvelle, d'autant plus que ça ouvre la voie à du code fonctionnant à la fois sur LibreOffice et Office (via une petite couche de compatibilité à écrire).
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Posté le 17/12/2017 à 01:47 Membre depuis le 10/06/2001, 8842 messages
Dommage que ca ne soit que pour Excel. Je remplacerais volontiers VBA par python dans tout MS Office.
avatar
Posté le 17/12/2017 à 01:49 Membre depuis le 10/06/2001, 40253 messages
Et faudra voir aussi si c'est vraiment compatible avec le Python standard, vu qu'ils parlent de Python sauce .NET.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 17/12/2017 à 10:23 Membre depuis le 11/07/2003, 54830 messages
Uther (./3358) :
Dommage que ca ne soit que pour Excel. Je remplacerais volontiers VBA par python dans tout MS Office.
À mon avis, s'ils font le boulot pour Excel, il sera également fait dans Office au complet.
Par contre, j'espère que ça sera du Python 3 (Iron Python dont l'article parle est du Python 2) : ça n'a aucun sens en 2017 de partir sur du Python 2.
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant