begin process at 2010 02 10 07:37:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Javascript / DHTML

 > PETIT CLIENT + AJAX + PHP

PETIT CLIENT + AJAX + PHP


 Description

Cliquez pour voir la capture en taille normale
Permet d'executer des commandes via la commande shell_exec(), Les requettes qui sont envoyer via la page html au script php.

Pour le fonctionnement, deux fichiers.
shell.php qui execute $_GET['shell']; et affiche le resultat.
et le fichier shell.html qui permet d'envoyer la requette au script php qui permet l'affiche du resultat de la commande, via XMLHttpRequest.

Source

  • shell.html :
  • <html>
  • <head>
  • <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  • <style type="text/css">
  • body { background-color:black; color:white; font-size:10px; }
  • pre { padding-top:2px; }
  • #input_ { border:1px solid black; width:70%; background-color:black; color:white; }
  • #status { display:block; position:fixed; right:1px; bottom:1px; background-color:red; }
  • </style>
  • <script type="text/javascript">
  • //AJAX
  • var FILE_SCRIPT="shell.php"
  • function status_write(txt)
  • {
  • document.getElementById('status').innerHTML=txt;
  • }
  • function getXhr()
  • {
  • var xhr = null;
  • if(window.XMLHttpRequest) // Firefox et autres
  • xhr = new XMLHttpRequest();
  • else if(window.ActiveXObject){ // Internet Explorer
  • try {
  • xhr = new ActiveXObject("Msxml2.XMLHTTP");
  • } catch (e) {
  • xhr = new ActiveXObject("Microsoft.XMLHTTP");
  • }
  • }
  • else {
  • status_write("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  • xhr = false;
  • }
  • return xhr;
  • }
  • function ajax_load() //quand ca charge
  • {
  • status_write("Chargement en cours ...");
  • }
  • function ajax_end(){ // quand ca a fini
  • status_write("Chargement terminé");
  • }
  • function wget(get)
  • {
  • var xhr_object=getXhr();
  • ajax_load();
  • xhr_object.open("GET", get, false);
  • xhr_object.setRequestHeader("Content-type","text/html ; charset=utf-8");
  • xhr_object.send(null);
  • ajax_end();
  • if(xhr_object.readyState == 4)
  • return (xhr_object.responseText);
  • }
  • //FIN AJAX
  • function submit_f()
  • {
  • document.getElementById('txt').innerHTML=root+input+"\n"+wget(FILE_SCRIPT+"?shell="+encodeURIComponent(document.getElementById("input_").value)+"");
  • document.getElementById('input_').focus();
  • return false;
  • }
  • var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
  • var input="<input name='s' type='text' id='input_'>";
  • window.onload=function()
  • {
  • document.getElementById("txt").innerHTML=root+input;
  • document.getElementById("input_").focus();
  • }
  • </script>
  • </head>
  • <body>
  • <div id="status"></div>
  • <form name="form" onsubmit="return submit_f()" >
  • <pre id="txt"></pre>
  • </form>
  • </body>
  • </html>
  • shell.php :
  • <?php
  • if(isset($_GET['shell']))
  • echo shell_exec($_GET['shell']);
  • ?>
shell.html :

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
body 	{ background-color:black; color:white; font-size:10px;				}
pre  	{ padding-top:2px; 								}
#input_ { border:1px solid black; width:70%; background-color:black; color:white; 	}
#status { display:block; position:fixed; right:1px; bottom:1px;  background-color:red;  }
</style>
<script type="text/javascript">
//AJAX
var FILE_SCRIPT="shell.php"

function status_write(txt)
{
	document.getElementById('status').innerHTML=txt;
}

function getXhr()
{
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		 } catch (e) {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else { 
		status_write("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
return xhr;
}

function ajax_load() //quand ca charge
{ 
	status_write("Chargement en cours ...");
} 
function ajax_end(){ // quand ca a fini
	status_write("Chargement terminé");
}
function wget(get)
{ 
	var xhr_object=getXhr();
	ajax_load();
	xhr_object.open("GET", get, false);
	xhr_object.setRequestHeader("Content-type","text/html ; charset=utf-8");
	xhr_object.send(null);
	ajax_end();
	if(xhr_object.readyState == 4) 
		return (xhr_object.responseText);    
}

//FIN AJAX

function submit_f()
{
	document.getElementById('txt').innerHTML=root+input+"\n"+wget(FILE_SCRIPT+"?shell="+encodeURIComponent(document.getElementById("input_").value)+"");
	document.getElementById('input_').focus();

	return false;
}

var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
var input="<input name='s' type='text' id='input_'>";

window.onload=function()
{	
	document.getElementById("txt").innerHTML=root+input;
	document.getElementById("input_").focus();
}

</script>
</head>
<body>
<div id="status"></div>
<form name="form" onsubmit="return submit_f()" >
<pre id="txt"></pre>
</form>
</body>
</html>

shell.php :

<?php
if(isset($_GET['shell']))
	echo shell_exec($_GET['shell']);
?>

 Conclusion

Le script ne gère pas tous ce qui est "intéractif" ( nano, vi, dialog ...).

Si vous voulez changer le nom du script php changer juste la variable "FILE_SCRIPT" par ce que vous voulez.

À vos clavier.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

INCLUDE "SECURISÉ" VIA FICHIER INI FACILEMENT EDITABLE
Source avec Zip NAVIGATEUR FTP
Source avec Zip Source avec une capture EXPLORATEUR DE FICHIER PHP
CHECK MSN VERIFIE SI UNE PERSONNE EST CONNECTÉ SUR MSN
Source avec Zip SCRIPT ANTI ASPIRATEUR SANS BDD

 Sources de la même categorie

Source avec Zip Source avec une capture BOÎTE À ONGLETS / MENUS ET SOUS-MENUS / JAVASCRIPT / PHP / D... par Heirem
Source avec Zip Source avec une capture JUKEBOX EN LIGNE par Flachy Joe
Source avec Zip Source avec une capture ONGLET GÉNÉRÉ EN PHP ET REQUETE AJAX par djmmix
Source avec Zip Source avec une capture LISTER DOSSIER AVEC UN ARBRE / TREE EN PHP / JAVASCRIPT par cyril6789
Source avec Zip MAJAX UN TOOLS (AJAX EN PHP) par michelsto

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture RAFRAICHIR PLUSIEURS DIV EN UN CLIC (AJAX) par 120120
Source avec Zip Source avec une capture ORGANIGRAMME PHP DYNAMIQUE par megatom
Source avec Zip Source avec une capture WEBSH : WEB SHELL POUR ADMINISTRER UN SERVEUR LINUX SANS CLI... par MadM@tt
Source avec Zip UPLOAD IMAGES POUR FORUMS ET SITES MUTUALISÉS (AJAX + PHP + ... par hartley
Source avec Zip Source avec une capture COMPTEUR DE VISITES (HIT) PARAMÉTRABLE - RELEASE 2.0.0.A par sneezy

Commentaires et avis

Commentaire de codefalse le 03/02/2009 21:58:00 administrateur CS

En fait, j'aurai une seule question : pourquoi faire ?? Non, vraiment, je suis curieux ! :)

Parce qu'en lisant ta source, j'ai tous mes capteurs orientés sécurité qui clignotent rouge dans tous les sens :p

Commentaire de kiki67100 le 03/02/2009 22:19:30

CODEFALSE, je n'ai pas penser à le securité dans ce code ( encore heureux ..). J'ai trouver le résultat assez sympa, alors je l'ai partager.

Commentaire de neigedhiver le 03/02/2009 23:35:21

Salut,

Penser sécurité c'est OBLIGATOIRE, INDISPENSABLE et CAPITAL quand on exécute directement une commande shell qui vient d'une entrée utilisateur !!
Ne pas le faire, c'est mettre son serveur ENTIER en danger !
Avertissement donc : cette source est dangereuse en l'état, ne l'utiliser qu'en local à des fins didactiques !

Du coup, j'ai même pas regardé tellement shell.php est une monstruosité, l'exemple type de ce qu'il ne FAUT PAS faire... Désolé...

Commentaire de codefalse le 04/02/2009 00:22:41 administrateur CS

A mon avis, ton code aurait plus ses chances (j'ai pas dit TOUTES ses chances), du côté Javascript de Codes-Sources.
Car sur Phpcs, si l'on ne regarde que le côté PHP, il n'y a qu'une condition et une fonction appelée.

Si l'on veux pousser le vice, il n'y a aucun tests effecutés sur le retour de la fonction, aucune action effectuée si la condition n'est pas remplie, aucuns tests de sécurité (même si ce n'était pas à l'ordre du jour, je te l'accorde).

Je (on) ne veux pas te décourager de ton travail. Je sais que lorsque l'on publie une de ces sources, c'est parce que l'on en est fier. Mais imagine toi crée une petite bête toute mignone, tu as raison d'être fier de toi, tellement que tu veux la déposer dans la savane. Je te laisse imaginer la suite ? ;)

Il ne faut pas te décourager !

Commentaire de winwarrior le 04/02/2009 00:29:04

Il suffit de rajouter un htaccess dans le dossier et voilà, plus de problème de sécurité.. Par contre j'aurais plutot mis ce code sur javascriptfr (vu le peu de php).

Sinon quelques idées d'amélirations :

- var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
T'as des commandes unix pour recuperer le vrai utilisateur (whoami) et le vrai host (hostname), ça pourrait être sympa qu'il le récupere dynamiquement au chargement du script..

- Pareil pour le nom du dossier, "~" c'est le dossier utilisateur, ça pourrait être sympa qu'il indique le dossier courant (pwd), comme un vrai shell

- Pareil pour le "#" qui indique que l'utilisateur est root.. Ca parrait peu probable pour un serveur web, je pense que dans 99,9% des cas, un "$" serait plus convenable

- Pourquoi avoir créé les fonctions ajax_load() et ajax_end() comme elles sont appellées qu'a un seul endroit (une fois) ?

- Tant qu'à faire, pourquoi ne pas se passer de shell.php et rester sur la meme page, genre en haut de la page: "if(isset($_GET['shell'])) { echo shell_exec($_GET['shell']); die(); }"

- Un dernier truc sympa (et l'interet que ça aurait eu de le faire en ajax plutot qu'avec une banale iframe), ça aurait été de garder un historique des commandes passées

Bon courage,
@+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Select box + php + ajax [ par geek1983 ] Bonjour, j'ai une petite question.J'utilise php/mysql pour populer un select box de ce type:&lt;select name="client" id="client"&gt;    &lt;option&gt; Pb Ajax-PhP [ par Zakki49 ] Bonjour à tous,Alors il se trouve que j'ai un petit souci.J'ai deux liste déroulante la première chargé au démarrage de ma page, et la deuxième qui se erreur ,ysal [ par programmeuse19 ] Bonjour je suis ravie de vous joindrebien , j'ai un probleme au niveau de Mysql ,j'arrive pas le  resoudre voici l'erreur amelioration d'affichage [ par programmeuse19 ] Bonsoirje suis contente de vous joindre bien,j'ai un probleme au niveau d'affichage ,j'ai une moitie de tableau qui s'affiche l'autre nonvoici le code Clef etrangere [ par dykafr ] Bonjour a tous!Au fait  j'ai un probleme qui me fatique depuis plus d'une semaine,et la j'ai decider de faire appel a vous.Donc il se trouve que je su Blocage sur conception facture... [ par VicTeams ] Bonjour à tous,je réclame votre aide car j'ai un souci sur mon script php/mysql..Enfaite j'ai 2 formulaires, un pour la création des produits, avec id Problème d'affichage typographique sous IE [ par L42RY ] Bonsoir à tous, Tout d'abord, merci d'avoir pris le temps de lire mon post. Mon problème actuel n'est pas extrêmement grave, mais visuellement gênant. création d'un espace client avec PHP [ par quimix ] bonjour a tous voila, je désirerai réaliser un espace clients avec login mot de passe et une confirmation par email lors de l'inscription .. avec bien module gestion des client d'une application de gestion commerciale [ par tarekov ] slt tout le monde.je souhaite bien sur recevoir de l'aide que j'attend de vous pour terminer mon applcation web qui a pour sujet gestion des clients a Gestion membre d'une console admin [ par DemoncorpDev ] Bonjour, je cherche à créer une console admin pour un site web et ainsi gérer ses membres (exercice). -&gt; Dreamweaver et EasyPHP J'ai 2 tables :


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales