作为一个渗透测试的牛马人,还是要多写点代码。各位道友,对不?内卷起来吧!卷呀卷
变量覆盖常常被恶意攻击者用来跳过正常的业务逻辑,越过权限限制,恶意攻击系统,严重时将造成系统瘫痪。
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获取浏览器提交的变量。
<?php
foreach ($_REQUEST as $param=>$value){
$GLOBALS[$param] => $value; //使用$GLOBALS造成变量覆盖
}
if (authenticated_user()){ //认证用户是否登录
$authorized = true;
}
攻击者在请求中构造authorized=true,无须认证用户名和密码就可以直接设置authorized的值为true,从而跳过认证进入登录状态。
为了避免全局变量覆盖的发生,开发人员不应该使用上面的方式从客户端接收动态变量放入到全局的$GLOBALS中。
修复后的代码如下:
$username = $_POST['username'];
$password = $_POST['password'];
if(authentcated_user($username,$password)){ //认证用户是否登录
$authorized = true;
}
诚招志同道合的徒弟,还一片教育的净土。
打败你的不是学费,而是“回去再考虑考虑”。如果时光倒退10年,你最想做的事是什么?毫无疑问,那是你错过了选择,选择比努力更重要!
保证:优质的价格、增值的服务、技术的天堂
学习内容:Web漏洞挖掘、CTF、二进制、逆向、代码审计、免杀等。深耕红蓝紫对抗、渗透攻击链、漏洞分析与挖掘、红队武器开发、二进制安全等。
学成:加入团队做项目、内推、护网、工作。
方式:手把手,一对一咨询。
非诚勿扰,请扫描下方二维码或添加微信:yuanchao2015
原文始发于微信公众号(船山信安):原创 | PHP变量安全之全局变量覆盖
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论