« Student under Criminal Investigation for Allegedly Sending EmailMake Windows XP Blazingly Fast »
Ever wanted to execute commands on your server through php to mimick a shell login? Now you can. I’m calling this file (see below) shell.php and it allows you to run commands on your web server with the same permissions that your php executable has.
shell.phpSubstitue 1.1.1.1 for your IP address.. or see below for password authentication methods.
<?php
if ($_SERVER['REMOTE_ADDR'] !== '1.1.1.1') die();
ob_start();
if (!empty($_GET['cmd'])){
$ff=$_GET['cmd'];
#shell_exec($ff);
system($ff);
#exec($ff);
#passthru($ff);
}
else {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>PHP AJAX Shell</title>
<script type="text/javascript" language="javascript">var CommHis=new Array();var HisP;
function doReq(_1,_2,_3){var HR=false;if(window.XMLHttpRequest){HR=new XMLHttpRequest();if(HR.overrideMimeType){HR.overrideMimeType("text/xml");}}
else{if(window.ActiveXObject){try{HR=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{HR=new ActiveXObject("Microsoft.XMLHTTP");}
catch(e){}}}}if(!HR){return false;}HR.onreadystatechange=function(){if(HR.readyState==4){
if(HR.status==200){if(_3){eval(_2+"(HR.responseXML)");}else{eval(_2+"(HR.responseText)");}}}};HR.open("GET",_1,true);HR.send(null);}
function pR(rS){var _6=document.getElementById("outt");var _7=rS.split("\n\n");
var _8=document.getElementById("cmd").value;_6.appendChild(document.createTextNode(_8));
_6.appendChild(document.createElement("br"));for(var _9 in _7){var _a=document.createElement("pre");
_a.style.display="inline";line=document.createTextNode(_7[_9]);_a.appendChild(line);_6.appendChild(_a);
_6.appendChild(document.createElement("br"));}_6.appendChild(document.createTextNode(":-> "));_6.scrollTop=_6.scrollHeight;
document.getElementById("cmd").value="";}function keyE(_b){switch(_b.keyCode){
case 13:var _c=document.getElementById("cmd").value;if(_c){CommHis[CommHis.length]=_c;HisP=CommHis.length;var _d=document.location.href+"?cmd="+escape(_c);
doReq(_d,"pR");}break;
case 38:if(HisP>0){HisP--;document.getElementById("cmd").value=CommHis[HisP];}break;
case 40:if(HisP<CommHis.length-1){HisP++;document.getElementById("cmd").value=CommHis[HisP];}break;default:break;}}
</script></head><body style="font-family:courier">
<form onsubmit="return false" style="color:#3F0;background:#000;position:relative;min-height:450px;max-height:490px">
<div id="outt" style="overflow:auto;padding:5px;height:90%;min-height:450px;max-height:490px">:-></div>
<input tabindex="1" onkeyup="keyE(event)" style="color:#FFF;background:#333;width:100%;" id="cmd" type="text" />
</form>
</body>
</html>
<?php } ?>
Note: The history feature works by remembering the last commands that you typed.. Access them by pressing the up or down arrows on your keyboard.
This is not an interactive session, so you cannot cd to a directory and then do stuff in that directory.. You may however be able to do stuff like /bin/bash -c "cd ../../;mv this there;ls -la;" or you could try exporting your current dir or something..
Writing shell scripts and serving them on your web server works by renaming the file.sh to file.cgi and chmodding it to 750 or +x. Also make sure you try dos2unix -dv file.cgi If you can’t get it to work..
#!/bin/sh
export MYBNAME=`date +%mx%dx%y-%Hx%M.tgz`
tar -czf ${HOME}/backups/${MYBNAME} ${HOME}/site1/
exit 0;
Thanks to the comment by Andrew Ramsden, Here are a couple ways to secure your shell.php file so that only you can run this script.
Add this line to the very top of your shell.php file to make sure that only you can access this script. Everyone else sees a blank screen.
if ($_SERVER['REMOTE_ADDR'] !== '1.1.1.1') die();
This only allows access from IP 1.1.1.1 and redirects everyone else. See Using the Allow Directive in Apache htaccess for more info.
Order deny,allow Deny from all Allow from 1.1.1.1 ErrorDocument 403 http://www.askapache.com
Based on the code from htaccess article This only allows access from user with IP of 1.1.1.1 and redirects everyone else.
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^1\.1\.1\.1
RewriteRule .* http://www.askapache.com [R=302,L]
« Student under Criminal Investigation for Allegedly Sending Email
Make Windows XP Blazingly Fast »
Tags: Ajax, bash, console, Hacking, htaccess, Javascript, linux, mod_rewrite, PHP, Security, Shell, shell console, Shell Scripting
The love of liberty is the love of others; the love of power is the love of ourselves.
-- William Hazlitt
Please consider donating to support active development of the free software and articles here.![]()
The power of the Web is in its universality. Access by everyone regardless of disability is an essential aspect. Tim Berners-Lee
Thank you, good script!
Note: if you want to see errors in *nix systems:
system($ff.' 2>&1');
Does not work, any command outputs a blank line.
nice script :D thanks!!
would be cool too have a real interactive console probably with a XMLHttpRequest Server backend and such a client :D
please tell me how this work!!!
I couldn’t run this ajax console!
thank you
Script doesn’t work, getting white screen without any error. What’s the problem ?
nice work, really nice script! i use it nearly every day :O
btw, @Mgccl,
you can use cd c:\cool && dir instead.
chdir() choses the current working directory. I only used it on windows, don’t know what it’s like on linux. let’s suppose, in PHP, start with checking the current working directory getcwd(), and it returns c:\
I run this command in PHP
cd cool
which suppose make me go into c:\cool
and then I run
dir
in a interactive session, it should show all the files inside the c:\cool, but no, instead, it shows everything in c:\
I could insert some code that captures user’s command, like cd, then use chdir() to change the current working dir. for example
chdir('c:\cool');
then, run dir will show everything in c:\cool.
it’s possible to extend this script and fix the “can not cd and work in that directory bug” by using the PHP function chdir.
Works great! Too bad it’s not interactive, though…
that script works very good,but not always !
Too bad the script doesn’t work. Let me know when you finish debugging it.
Great idea. It would be a really good idea to put this file in a password protected directory ;)
It's very simple - you read the protocol and write the code. -Bill Joy
HTML | DCMI | GRDDL | XOXO | XDMP | XFN | DOM | XML | XHTML 1.1 Strict | CSS 2.1 | W3C | TLDP | WAI | DISA | ICSI | GIAC | SANS RR | GHOST | DEFCON | NIST | DHS CYBER | NIST | Phrack | GDB
↑ TOPExcept where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. HTTPD based on NCSA HTTPd
I can’t see the dates of the other comments, but this page, here, on this site, is messed up…it’s including the php from shell.php, but everything after…
—Begin—
—End—
…is displaying literally, not escaped…so we can’t see/download the full/real shell.php code…
Instead of including the code plz link to shell.php or shell.phps so we can see/download the code…also your “video” is not displaying either, probably cuz of the literal code making it not show up…
dupe comment override!