渗透之路基础 -- 变量覆盖漏洞
变量覆盖注入
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。
案例演示
直接上案例可能会更好明白,多看几遍多复现就会明白
假设服务器端正常的查询功能
<?php
// $id=$_REQUEST['x']; // 接受get传递参数x的值
$id=addslashes($_REQUEST['x']);
// $id=$_GET['x']; // 接受get传递参数x的值
// 连接数据库
$conn=mysqli_connect('127.0.0.1','root','root');
// 选择数据库并连接
mysqli_select_db($conn,'dvwa');
$sql="select * from users where user_id=$id";
$result = mysqli_query($conn,$sql);
while($row=mysqli_fetch_array($result)){
echo "id:".$row['user_id']."<br>";
echo "user:".$row['user']."<br>";
echo "pass:".$row['password']."<br>";
}
mysqli_close($conn); // 关闭连接
echo "当前执行的sql语句:".$sql; //输出sql命令
?>
- 访问
192.168.203.128/test/sqlin.php?x=1
- 当服务器代码为以下情况(存在变量覆盖)
- 访问
192.168.203.128/test/sqlin.php?x=1
- 访问
192.168.203.128/test/sqlin.php?y=id
以上类型属于变量覆盖
当源代码存在这样的代码,可能会存在变量覆盖注入的问题
- 访问
192.168.203.128/test/sqlin.php?y=id
- 访问
192.168.203.128/test/sqlin.php?y=id&x=1
解析:
// 访问 192.168.203.128/test/sqlin.php?y=id&x=1
$id=$_GET['y']; // --> $id='id'
$$id=addslashes($_REQUEST['x']); // --> $$id=$id=1