PHP_SELF漏洞

今天在先知社区阅读代码审计技巧,无意发现一个之前没怎么接触过的漏洞------PHP_SELF漏洞,于是决定学习一些这个漏洞的原理,找到了一篇比较好理解的文章,作为一个转载吧。

什么是PHP_SELF变量?

PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)。您可以在FORM的操作字段中使用此变量。您还需要注意某些漏洞。
a)假设您的php文件位于以下地址:
http://www.yourserver.com/form-action.php
在这种情况下,PHP_SELF将包含:"/form-action.php"
b)假设您的php文件位于以下地址:
http://www.yourserver.com/dir1/form-action.php
对于此URL,PHP_SELF将为:"/dir1/form-action.php"     --------- 总之就是域名之后的一部分。

在表单的action字段中使用PHP_SELF变量

PHP_SELF变量的常见用法是在<form>标记的action字段中。当用户按下“提交”按钮时,FORM的操作字段指示提交表单数据的位置。通常与表单的处理程序具有相同的PHP页面。
使用PHP_SELF变量,您可以编写更多通用代码,可以在任何页面上使用,而无需编辑操作字段。
考虑一下,你有一个名为form-action.php的文件,并希望在提交表单后加载相同的页面。通常的表单代码是:
<form  method="post" action="form-action.php" >

我们可以使用PHP_SELF变量而不是“form-action.php”。代码变成:

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
<?php
if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name'];
    echo "User Has submitted the form and entered this name : <b> $name </b>";
    echo "<br>You can use the following form again to enter a new name."; 
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  //php代码优先于HTML执行
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
</form>
此PHP代码位于HTML部分之上,将首先执行。第一行代码是检查表单是否已提交。提交按钮的名称是“提交”。
按下提交按钮时,$_POST['submit']将设置并且IF条件将变为真。在这种情况下,我们显示用户输入的名称。
如果表单未提交,IF条件将为FALSE(假),因为没有值$_POST['submit'] ,PHP代码将不会被执行。在这种情况下,仅显示表单。

PHP_SELF漏洞利用:

PHP_SELF变量用于获取当前文件的名称和路径,但黑客也可以使用它。如果在页面中使用了PHP_SELF,则用户可以输入斜杠(/),然后输入一些跨站点脚本(XSS)命令来执行。
考虑用户通过在浏览器的地址栏中输入以下URL来调用此脚本:
http://www.yourdomain.com/form-action.php/"><script>alert('xss')</script><foo"
在这种情况下,PHP处理后代码变为:(其实也就是就是改变了DOM树的结构
<form name="test" method="post" action="form-action.php"/>
<script>alert('xss')</script><foo"">



  




原文地址:https://www.cnblogs.com/Qiuzhiyu/p/13121420.html