Archives pour l'étiquette php

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.
Continuer la lecture de monter un serveur PHP en une ligne de commande (ou presque)

Checker la validité d’une adresse mail en PHP via SMTP

plopinou …

Il arrive toujours un jour où l’on doit checker la validité d’une adresse mail de façon sûr (plus qu’une simple vérification sur la validité du nom de domaine).
Pour ce faire il faut directement se connecter sur le SMTP du domaine de l’adresse mail via un socket en PHP et envoyer l’adresse mail à checker.
Continuer la lecture de Checker la validité d’une adresse mail en PHP via SMTP

Exemple de Bot d’Authentification et de clic en Php

Bonjour à tous …

Aujourd’hui ze bot « cliqueur » ^^, il s’agit en fait d’un bot qui s’authentifie en POST, récupère le cookie et va en get sur un lien (le clic quoi).

A quoi ça peut bien servir ?

Pour ma part, c’était pour récupérer une clé pour la closed beta de HON (un Dota avec des binaires pour linux, fallait pas rater ça!!) sur le site de Alienware, le problème, c’est que les clés étaient censé être disponible soit très tard dans la soirée, soit très tôt dans la matinée, et comme je n’aimais pas l’idée de rester sur le site à poireauter, j’ai fait ce que tout programmeurs auraient fait ^^, un sympatique script …

Les actions à faire étaient :

  1. Regarder sur le site si le nombre de clés disponibles étaient supérieur à 0
  2. S’authentifier
  3. Récupérer les clés

Ce qui donne donc le script suivant en tâche Cron toutes les 5 minutes (fallait juste pas oublier de couper le script après réception des clés ^^) :

]*>Closed Beta Keys Remaining[\W\w]*]*>([0-9]+)|iU',$hon,$retour);

if($retour[1]!=0)
{
	$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
	if(socket_connect($socket,"www.alienwarearena.com","80"))
	{
	//La requete de post pour ce logger
		$postReq = "POST /cmd/account/login/ HTTP/1.1\r\n";
		$postReq.= "Host: www.alienwarearena.com\r\n";
		$postReq.= "Connection: Keep-Alive\r\n";//comme ça on se reconnecte direct 😉 Pipelinning ROXX!!
		$postReq.= "Content-type: application/x-www-form-urlencoded\r\n";
		$postReq.= "Content-Length: ".strlen($stringLoginPost)."\r\n\r\n";
		$postReq.= $stringLoginPost."\r\n";
		socket_write($socket,$postReq);
		socket_recv($socket,$retour,1024,0);
	//la récupération de la valeur du cookie
		preg_match("#Set-Cookie: PHPSESSID=([^;]*); path=/#",$retour,$tabRet);
	//On va à la page de récupération des clés ^^
		$getReq = "GET /cmd/account/get-beta-key/hon/ HTTP/1.1\r\n";
		$getReq.= "Host: www.alienwarearena.com\r\n";
		$getReq.= "Cookie: PHPSESSID=".$tabRet[1]."\r\n";
		$getReq.= "Connection: Close\r\n\r\n";
		socket_write($socket,$getReq);
		socket_recv($socket,$retour,1024,0);

		mail(MAILADRES,"HON KEY!!","You got an HON KEY : ".$retour);
	}
        socket_close($socket);
}
?>

Donc voilà … le script reste une idée (qui a fonctionné dans mon cas) à modifier selon les cas, avec curl ça aurait été plus court, mais faire mumuse avec les sockets ça n’a pas de prix …

[DEFCON17] Slides sur le Cross Site Scripting (XSS reminder)

Plop à tous

Un rapide lien today sur les XSS « favoris », je vais pas revenir sur les XSS, tout le monde sait ce que c’est ;), mais le ppt en question permet d’avoir une rapide vue d’ensemble des techniques (certaine plus avancée comme le  HPP – HTTP Parameter Pollution pour l’evasion d’IDS … moi qui était content du couple prelude/modsecurity ^^).

Bon bien sûr, le but de ce ppt n’était pas d’enseigner toutes les techniques, mais seulement d’informer pour permettre à son lecteur de faire ses propres recherches sur le domaine ;).

Sinon, les dernières diapos parlent d’elles-mêmes sur la sécurité (relative) qu’offrent les IDS dans le domaine du web, avec des règles comme :

utiliser ‘ or 2=2 — à la place de ‘ or 1=1 —
nommer les shells rofl.php à la place de c99.php
utiliser prompt(‘xss’) à la palce de alert(‘xss’)

C’est vrai que quand on regarde les filtres de modsecurity, il suffit de changer les noms ou les commandes balancés en paramètre et certaines attaques passent :s (je suis tout de même déçu par le modsecurity pour le HPP, un simple « join » du paramètre suffirait à bloquer l’attaque …).

Donc au lieu d’utiliser des sytèmes energivore pour sécuriser des sites web, il suffit de bien coder son site et comme ça on dort tranquille et on gagne en performance … (utopie quand tu nous tiens^^).

Fork et PHP utile ??

Bonsoir …

Alors voilà … thème de la soirée les forks et PHP

On lit souvent sur les forums que les forks en PHP servent strictement à rien et tous le … et je dois avouer que de la prog système en PHP, c’est vraiment bof bof.

Mais cette semaine, pour le développement de mon application de gestion de NewsLetter (pour mon apprentissage), on m’a obligé à faire des forks et autre astuces système pour optimiser un peu la bête ^^.

Au départ, j’étais plutôt septique, je trouvais ça même louche … j’avais même jamais entendu parler de fork sur PHP, mais au final, j’étais plutôt surpris du résultat …

Pour exemple : Un script doit envoyer 60 mails.

Une appli en single :

[sourcecode language= »php »]
for($i=0;$i<60;$i++) { mail($mail_a[$i],"sujet","message"); } [/sourcecode]

Une appli (en « multi thread ») :
[sourcecode language= »php »]
for($i=0;$i<60;$i++) { $pid = pcntl_fork(); if ($pid == -1) { die('dupplication impossible'); } else if ($pid) { $pid_a[] = $pid; //juste au cas où } else { mail($mail_a[$i],"sujet","message"); } } pcntl_waitpid ( 0 , $status); // on attend la mort de tous ses fils ... c'est cruel [/sourcecode] Si vous chronométrez le temps que ces deux scripts prennent, l'on remarque la rapidité du fork ... Lorsque j'ai testé le code (sur le serveur de ma boite), le premier mettait presque 30 sec pour envoyer les 60 mails (et encore, je les recevais pas tous), dans le deuxième cas, c'était instantanné, la plupart des threads ce terminaient dans la seconde. Donc voilà ... ne jamais dire que de la prog système dans le web ça sert à rien ;-), je go tenter de faire un site avec des signaux et des sémaphores :-d.

PHP chez les grandes entreprises grâce à Microsoft ?

Et non … c’est pas une blague[EN], commenté par nexen[FR].

Rapide résumé-copié/coller :

Selon le gartner group, 10% des développeurs PHP sont dans de grandes entreprise, et que ce chiffre pourrait monter à 40% dans les prochaines années. Une bonne nouvelle pour les devs comme moi ;-).

Mais c’est aussi une bonne nouvelle pour PHP lui-même et les entreprises qui tournent autour (Zend, …). Il parait que lors de la dernière Zend conf, Microsoft ait même été un sponsors platine de PHP … grâce notamment à sa plateforme open-source, et à ces dernières améliorations pour le support du PHP : (cf. premier lien pour plus d’info).

  • Patch Adodb pour php
  • Un driver php pour SQL server
  • Un module FastCGI PHP pour IIS7 (le truc que cro$oft appel un serveur HTTP)
  • et un site web dédié au support windows pour PHP. (Microsoft viendrait tous juste de comprendre d’où venait les baisses d’utilisation du IIS??).

A noté que Microsoft n’est pas la seule entreprise à s’intéresser à PHP …, il y a aussi IBM, Oracle et plus récemment Adobe … l’open-source vaincra ^^.

Selon Nexen, Microsoft bosserait déjà depuis un certain temps avec Zend sur PHP … je suis sûr que Redmond à dit ça pour ne pas avoué qu’ils ont loupé le coche…

Système d’alerte via SMS sur vos serveurs grace à google calendar.

Bijour à tous …

Aujourd’hui, juste un lien vers le blog de macsim, (pour ceux qui ne l’aurait pas dans leurs RSS), qui à pondu un superbe script (PHP) pour utiliser le système d’évenement de Google Calendar, pour envoyer des SMS (et ajouter l’évenement dans Google Calendar), lors de diverses actions sur vos serveurs …

Pour l’installer il vous faut PHP-Cli, ainsi que l’extension Curl de PHP. (J’ai fait le tour du code … ça à l’air sérieux …, sauf peut-être l’utilisation de Curl … utiliser des Sockets, aurait permit de sauter cette extension, qui n’est pas installé chez tous les hébergeurs …).

J’vais peut être tenter d’améliorer le truc en faisant un plugins pour WordPress pour recevoir des SMS lorsque des commentaires sont postés ^^. (J’ai plus de commentaire indésirable que de réelle commentaire … donc ça ne sera surement pas utile ^^, mais pour le fun …).

Php: éviter les injections tout en préservant l’intégrité des données

Re bijour ^^

Encore une astuce à haute valeur philosophique …

Rapide rappel :

Pour éviter les SQL injections … la plupart du temps on fait appel à des addslashes, mysql_real_escape et … qui peuvent s’avérer dangeureuse suivant qu’on utilise du PHP5 ou PHP4 (et encore … la plupart du temps, il faut regarder les sous-sous version), alors il faut faire des fonctions qui teste tout et n’importe quoi … mais on est jamais sûr que sur tel ou tel serveur le script est sécurisé …

Alors voici une rapide astuce qui permet d’assurer la sécurité et l’intégrité des données (qui peut fonctionner tant que l’on ne fait pas d’insertion ^^).

Utiliser du md5!!! ou un autre type de chiffrage via crypt, … qui vous permettront de préserver l’intégrité des données transportées tout en ne portant pas préjudice au serveur SQL.

Exemple lors du login d’une personne, la requête associée pourrait être :

mysql_query(« select * from utilisateurs where login=' ».mysql_real_escape($_POST[‘login’]). »‘; »);

donc si un jour on transfert ce code sur un serveur ayant php 4.2 … le script ne marche plus ^^ (d’accord … qui irait passer de php5 à php 4.2 -> c’est pour l’exemple).

Par contre avec ce code :

mysql_query(« select * from utilisateurs where MD5(login)=' ».md5($_POST[‘login’]). »‘; »);

aucun problème … ^^ et vous êtes sûr que si ça renvoie une ligne ça soit la bonne ;).

Bon comme dit dans l’introduction, il faut quand même insérer des données (et ouai ça arrive parfois :p), et là … ça ne marcherait plus trop à part si vous êtes billingue français/md5.

A propos de billinguisme français/md5, y’a un superbe logiciel qui permet de craquer du md5 de façon sympa et très rapide les md5 (md5brute : http://www.tuxemu.se.nu/)