php代码后可以做些什么?

时间:2015-03-06 16:46:03

标签: php xss

我需要帮助理解XSS上的PHP。在这种特殊情况下有哪些安全漏洞?

<?php
$test = NULL;
$name = $_REQUEST['name'];

if(!$test){
    die("$name cannot be found");
}

?>

编辑。为什么它给我看PHPINFO?链接http://testing985.freeiz.com/

<?
$test = NULL;
$name = ''.print phpinfo().'';

if(!$test){
    die("$name cannot be found");
}
?>

1 个答案:

答案 0 :(得分:1)

输入此内容,您将看到:

index.php?name=%3Cscript%20type%3D%22text%2Fjavascript%22%3E%0Awindow.location.href%20%3D%20%22http%3A%2F%2Fgoogle.de%22%3B%0A%3C%2Fscript%3E

在此示例中,您将转到Google。在现实世界中,您将访问与您的页面完全相同的网络钓鱼站点。

要对此进行处理,您需要删除标签,例如:

$name = strip_tags($name);

替代方案有一个更强大的框架availibe:

http://htmlpurifier.org/

这也是:

$name = "''.print phpinfo().''";

请问我们:

''.print phpinfo().'' cannot be found

原因是,''.print phpinfo().''已经是string。您需要eval($name);来执行它。最好立即忘记eval

另请注意:

$test = NULL;

if (!$test){}; //true
if ($test){}; //false
if ($test === false){}; //false
if ($test === true){}; //false
if ($test === null){}; //true

对于您的修改:

我的不好,行$name = ''.print phpinfo().''我的意思是,如果你有一个这样的网址index.php?name=%27%27.print%20phpinfo().%27%27%3B,它基本上代表$name = "''.print phpinfo().''"而不是$name = ''.print phpinfo().''

意思是:

如果我想输入$name代码''.print phpinfo().'';,我会将其转义为%27%27.print%20phpinfo().%27%27%3B

现在你有了这一行:

$name = $_REQUEST['name'];

您将GET VAR(在本例中为''.print phpinfo().'';)的内容写为string

$name

所以你基本上有这条线:

$name = "''.print phpinfo().''";

这将输出简单:

''.print phpinfo().''

那么为什么这一行给出了PHP Info Output?

$name = ''.print phpinfo().'';

分为3部分:

  • ''(返回空字符串)
  • print phpinfo()(从打印件返回1;打印命令不执行任何操作,因为phpinfo()返回void; phpinfo()完成了他的工作并在此点输出信息)
  • ''(返回空字符串)

因此,您为$name分配了Nothing1Nothing的字符串链。这意味着$name = '1'。在此作业中,您已经打印了phpinfo()

这一行:

die("$name cannot be found");

您附加到已有的信息输出文本1 cannnot be found;