原创 | PHP变量安全之全局变量覆盖

admin 2024年10月17日23:20:45评论13 views字数 1120阅读3分44秒阅读模式

作为一个渗透测试的牛马人,还是要多写点代码。各位道友,对不?内卷起来吧!卷呀卷

原创 | PHP变量安全之全局变量覆盖

变量覆盖常常被恶意攻击者用来跳过正常的业务逻辑,越过权限限制,恶意攻击系统,严重时将造成系统瘫痪。

1 全局变量覆盖

在PHP的安全配置中已经讲到(见公众号本系列PHP安全开发),当register_globals全局变量设置开启时,传递过来的值会被直接注册为全局变量而直接使用,这会造成全局变量覆盖。

如果通过$GLOBALS从浏览器动态获取变量,也会发生变量覆盖的情况。为了大家能够理解,我结合前面文章中全局变量配置的例子进行讲解。

一个简单的表单:

<form name="login" action="LoginUrl" method="POST">    <input type="text" name="username">    <input type="password" name="password">    <input type="submit" value="login"></form>

 

通过$GLOBALS获取浏览器提交的变量。

<?phpforeach ($_REQUEST as $param=>$value){    $GLOBALS[$param] => $value;  //使用$GLOBALS造成变量覆盖}if (authenticated_user()){ //认证用户是否登录    $authorized = true;}

 

攻击者在请求中构造authorized=true,无须认证用户名和密码就可以直接设置authorized的值为true,从而跳过认证进入登录状态。

为了避免全局变量覆盖的发生,开发人员不应该使用上面的方式从客户端接收动态变量放入到全局的$GLOBALS中。

修复后的代码如下:

<?php    $username = $_POST['username'];    $password = $_POST['password'];    if(authentcated_user($username,$password)){ //认证用户是否登录        $authorized = true;    }

 

诚招志同道合的徒弟,还一片教育的净土。

打败你的不是学费,而是“回去再考虑考虑”。如果时光倒退10年,你最想做的事是什么?毫无疑问,那是你错过了选择,选择比努力更重要!

保证:优质的价格、增值的服务、技术的天堂

学习内容:Web漏洞挖掘、CTF、二进制、逆向、代码审计、免杀等。深耕红蓝紫对抗、渗透攻击链、漏洞分析与挖掘、红队武器开发、二进制安全等。

学成:加入团队做项目、内推、护网、工作。

方式:手把手,一对一咨询。

非诚勿扰,请扫描下方二维码或添加微信:yuanchao2015

原创 | PHP变量安全之全局变量覆盖

原创 | PHP变量安全之全局变量覆盖

原文始发于微信公众号(船山信安):原创 | PHP变量安全之全局变量覆盖

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月17日23:20:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 | PHP变量安全之全局变量覆盖https://cn-sec.com/archives/3278911.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息