Как получить входные данные суперглобальных переменных PHP? - PullRequest
0 голосов
/ 02 мая 2018

Рассмотрим следующее login.php для DVWA :

<code><?php

define( 'DVWA_WEB_PAGE_TO_ROOT', '' );
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';

dvwaPageStartup( array( 'phpids' ) );

dvwaDatabaseConnect();

if( isset( $_POST[ 'Login' ] ) ) {
    // Anti-CSRF
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'login.php' );

    $user = $_POST[ 'username' ];
    $user = stripslashes( $user );
    $user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    $pass = $_POST[ 'password' ];
    $pass = stripslashes( $pass );
    $pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $pass = md5( $pass );

    $query = ("SELECT table_schema, table_name, create_time
                FROM information_schema.tables
                WHERE table_schema='{$_DVWA['db_database']}' AND table_name='users'
                LIMIT 1");
    $result = @mysqli_query($GLOBALS["___mysqli_ston"],  $query );
    if( mysqli_num_rows( $result ) != 1 ) {
        dvwaMessagePush( "First time using DVWA.<br />Need to run 'setup.php'." );
        dvwaRedirect( DVWA_WEB_PAGE_TO_ROOT . 'setup.php' );
    }

    $query  = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = @mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '.<br />Try <a href="setup.php">installing again</a>.
'); if ($ result && mysqli_num_rows ($ result) == 1) {// Вход выполнен успешно ... dvwaMessagePush ("Вы вошли как '{$ user}'"); dvwaLogin ($ user); dvwaRedirect (DVWA_WEB_PAGE_TO_ROOT. 'index.php'); } // Ошибка входа dvwaMessagePush («Ошибка входа в систему»); dvwaRedirect ('login.php'); } $ messagesHtml = messagesPopAllToHtml (); Заголовок ('Cache-Control: no-cache, must-revalidate'); // HTTP / 1.1 Заголовок ('Content-Type: text / html; charset = utf-8'); // TODO- правильные заголовки XHTML ... Заголовок («Истекает: вт, 23 июня 2009 г., 12:00:00 по Гринвичу»); // Дата в прошлом // Анти-CSRF generateSessionToken (); эхо " <! DOCTYPE html PUBLIC \ "- // W3C // DTD XHTML 1.0 Strict // EN \" \ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> Вход в систему :: Черт уязвимых веб-приложений (DVWA) v ". DvwaVersionGet ()."

image


<! - <div id = \ "header \"> ->



msgstr "tokenField ()."
{$ MessagesHtml}







<! - <img src = \ "". DVWA_WEB_PAGE_TO_ROOT. "dvwa / images / RandomStorm.png \" /> ->
<! - <div id = \ "content \"> ->

". DvwaExternalLinkUrlGet ('http://www.dvwa.co.uk/',' Черт уязвимого веб-приложения (DVWA) ')."

<! - <div id = \ "footer \"> ->
<! - <div id = \ "wrapper \"> -> "; ?>

Я хочу получить все параметры, которые пользователь отправляет на сервер, например, когда пользователь вводит свое имя пользователя и пароль, он отправляет эти два параметра: «имя пользователя» и «пароль» , Я написал простой скрипт на Python, который дает мне все переменные в login.php:

import re

textfile = open('login.php', 'r')
filetext = textfile.read()
textfile.close()
matches = re.findall("\$[A-Za-z0-9-_'\"\[\] ]+", filetext)
print("\n".join(list(set(matches))))

Вывод этого скрипта:

$user 
$_DVWA['db_database']
$user' AND password
$query  
$messagesHtml
$GLOBALS["___mysqli_ston"]
$messagesHtml 
$user
$___mysqli_res 
$pass'
$query 
$_REQUEST[ 'user_token' ]
$result 
$_POST[ 'username' ]
$_SESSION[ 'session_token' ]
$_POST[ 'Login' ] 
$_POST[ 'password' ]
$pass

Но на самом деле мне не нужны все из них. Например, в $_POST[ 'password' ] я просто хочу получить «пароль», а в $_SESSION[ 'session_token' ] я просто хочу получить «session_token». На самом деле, я хочу получить все параметры на стороне клиента (предположим, что у меня есть ABC ['DEF']. Я просто хочу получить текст 'DEF'). Я не знаю, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...