Soyez le premier à donner votre avis sur cette source.
Vue 9 588 fois - Téléchargée 946 fois
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']); ?>
4 févr. 2009 à 00:29
Sinon quelques idées d'amélirations :
- var root="root@kiki67100:~# ";
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,
@+
4 févr. 2009 à 00:22
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 !
3 févr. 2009 à 23:35
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é...
3 févr. 2009 à 22:19
3 févr. 2009 à 21:58
Parce qu'en lisant ta source, j'ai tous mes capteurs orientés sécurité qui clignotent rouge dans tous les sens :p
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.