渗透之路基础 -- 变量覆盖漏洞

本文深入探讨了变量覆盖注入这一安全漏洞,分析了其产生的原因,包括$$使用不当、extract()函数误用等,并通过具体案例展示了如何利用此漏洞进行攻击。文章强调了正确处理用户输入的重要性,以防变量覆盖注入攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量覆盖注入

通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:$$使用不当,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值