)\ * * Some or all of this file is based on the m0n0wall project which is * Copyright (c) 2004 Manuel Kasper (BSD 2 clause) * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgment: * "This product includes software developed by the pfSense Project * for use in the pfSense software distribution. (http://www.pfsense.org/). * * 4. The names "pfSense" and "pfSense Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * coreteam@pfsense.org. * * 5. Products derived from this software may not be called "pfSense" * nor may "pfSense" appear in their names without prior written * permission of the Electric Sheep Fencing, LLC. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * * "This product includes software developed by the pfSense Project * for use in the pfSense software distribution (http://www.pfsense.org/). * * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * ==================================================================== * */ ##|+PRIV ##|*IDENT=page-diagnostics-command ##|*NAME=Diagnostics: Command ##|*DESCR=Allow access to the 'Diagnostics: Command' page. ##|*MATCH=exec.php* ##|-PRIV $allowautocomplete = true; require("guiconfig.inc"); if (($_POST['submit'] == "DOWNLOAD") && file_exists($_POST['dlPath'])) { session_cache_limiter('public'); $fd = fopen($_POST['dlPath'], "rb"); header("Content-Type: application/octet-stream"); header("Content-Length: " . filesize($_POST['dlPath'])); header("Content-Disposition: attachment; filename=\"" . trim(htmlentities(basename($_POST['dlPath']))) . "\""); if (isset($_SERVER['HTTPS'])) { header('Pragma: '); header('Cache-Control: '); } else { header("Pragma: private"); header("Cache-Control: private, must-revalidate"); } fpassthru($fd); exit; } else if (($_POST['submit'] == "UPLOAD") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { move_uploaded_file($_FILES['ulfile']['tmp_name'], "/tmp/" . $_FILES['ulfile']['name']); $ulmsg = "Uploaded file to /tmp/" . htmlentities($_FILES['ulfile']['name']); unset($_POST['txtCommand']); } if ($_POST) { conf_mount_rw(); } // Function: is Blank // Returns true or false depending on blankness of argument. function isBlank($arg) { return preg_match("/^\s*$/", $arg); } // Function: Puts // Put string, Ruby-style. function puts($arg) { echo "$arg\n"; } // "Constants". $Version = ''; $ScriptName = $REQUEST['SCRIPT_NAME']; // Get year. $arrDT = localtime(); $intYear = $arrDT[5] + 1900; $pgtitle = array(gettext("Diagnostics"), gettext("Execute command")); include("head.inc"); ?> '.gettext("The capabilities offered here can be dangerous. No support is available. Use them at your own risk!").''); } if (!isBlank($_POST['txtCommand'])):?>

Shell Output -

&1', $output); $output = implode("\n", $output); print("
" . htmlspecialchars($output) . "
"); ?>



" onclick="return Reset_onClick( this.form );" />



' . $ulmsg .''); } ?>


PHP response
"); $tmpname = tempnam("/tmp", ""); $phpfile = fopen($tmpname, "w"); fwrite($phpfile, "\n"); fclose($phpfile); $output = array(); exec("/usr/local/bin/php " . $tmpname, $output); unlink($tmpname); $output = implode("\n", $output); print("
" . htmlspecialchars($output) . "
"); // echo eval($_POST['txtPHPCommand']); puts(""); ?>


" /> : print("Hello World!");