monter un serveur PHP en une ligne de commande (ou presque)

Dans le genre « news de webg33k » en voici une …

A la base, je cherchais à utiliser/écrire un serveur http en python (pas mal de classes existent dans le domaine) pour servir une page html bidon après un man in the middle avec redirection dnspoof sur le serveur http en question, au lieu de déployer l’artillerie lourde apache ou nginx.

Après diverses recherche sur mon ami, je suis tombé sur : créer un serveur http en 10 secondes

sudo python -m SimpleHTTPServer 80

Créant ainsi un serveur http accessible sur : http://127.0.0.1/). Mais cette technique ne fournit que des fichiers statiques (ok c’est déjà pas mal … et c’est plus où moins ce que je cherchais).

Mais en lisant la doc, on peut trouver un « CGIHTTPServer », c’est un serveur qui peut exécuter des scripts (python, perl, php, sh, …) et l’utilisation est similaire :

python -m CGIHTTPServer 8080

qui créera un serveur HTTP sur le dossier courant avec la possibilité d’éxecuter des scripts (EN CLI = ligne de commande) sur le port 8080 (accessible sur http://127.0.0.1:8080/).

ATTENTION, il ne faut pas executer le serveur avec un sudo (pour utiliser le port 80), car sinon, les scripts seront executés en root, ainsi pour le script php suivant (à mettre dans un dossier nommé « cgi-bin » dans le dossier courant d’éxecution de la commande, et faire un chmod +x et nécessite l’installation du paquet php-cli) :

#!/usr/bin/php


 
On remarque bien que le script a les droits root ... donc à EVITER.

Il faut donc l'executer sur le port un port supérieur à 1024 (pour ne pas utiliser les droits root : 8080 est le port le plus courant dans ce genre de cas), puis effectuer une redirection de port via iptables qui permettra ici d'accéder au port 8080 du serveur en faisant une requête sur le port 80 :

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

(ne fonctionne pas pour l'adresse de loopback 127.0.0.1).

Si vous voulez exécuter d'autre type de script : sh, python, ..., il suffit de les mettre dans le dossier cgi-bin et de faire un chmod +x dessus.

En python :

#!/usr/bin/python
print ""
print "les kikoolols attaquent!!!"

En bash :

#!/bin/bash
echo ""
echo "les kikoolols attaquent!!!"

Ne pas oublier le premier print "" ou echo "", qui indique la fin des headers HTTP.

Voilà ... c'était le post inutile mais indispensable de la semaine 😉