【PHP代码审计】变量覆盖结合文件包含组合拳


变量漏洞覆盖介绍

变量覆盖漏洞是指攻击者使用自定义的变量去覆盖源代码中的变量,从而改变代码逻辑,实现攻击目的的一种漏洞。通常来说,单独的变量覆盖漏洞很难有利用价值,但是在与其他应用代码或漏洞结合后,其造成的危害可能是无法估量的。例如购买商品的支付系统若存在变量覆盖漏洞,就可能存在0元支付下单的情况。

漏洞产生的原因:

 extract()
 parse_str()
 import_request_variables()
 $$(可变变量)
register_globals=On (PHP5.4之后正式移除此功能)

由$$变量赋值引发的覆盖

$$典型的变量覆盖代码

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
	foreach($$_request as $_key => $_value) {
		$_key{0} != '_' && $$_key = daddslashes($_value);
	}
}

在配置文件common.inc.php中存在以下代码
在这里插入图片描述
全局搜索哪个文件包含了该配置文件
在这里插入图片描述在这里插入图片描述
访问index.php加载的是templates中的index.html页面。

我们在index.php中定义如下变量:这个变量一定要定义在加载templates模板之前才能将变量输出。
在这里插入图片描述
在index.html输出上面的变量
在这里插入图片描述
打开浏览器访问index.php页面
在这里插入图片描述
由于index.php包含了common.inc.php,并且common.inc.php中存在变量覆盖的代码可以接收getpostcookie的传参即:

我们访问http://127.0.0.1/MetInfo5.1.4/index.php?test=12312312312就可以覆盖原有test变量的值
在这里插入图片描述

结合文件包含

由上面引发思路,如果一个存在文件包含漏洞的文件也包含了common.inc.php配置文件,那么我们是不是就可以以传参的方式来控制被包含的文件了呢???

假如index.php如下:

<?php
include("common.inc.php")

$file = "a.php"
include($file)

// /index.php?file=1.txt  即可改变原有的$file值
?>

全局搜索文件包含关键字require_once,变量可控。
在这里插入图片描述
在这里插入图片描述
这里我们看到文件包含的参数是$module,如果我们结合前面的变量覆盖就可以实现文件包含了,但前提是在这个文件中要包含common.inc.php这个配置文件,我们才能以传参的方式覆盖变量。

查看../include/module.php是否包含common.inc.php

在这里插入图片描述
也就是说我们访问/about/index.php也会执行common.inc.php中的代码
在这里插入图片描述
接下来查看$model变量是如何被赋值的
在这里插入图片描述
在这里插入图片描述
$fmodel控制$model的值

在这里插入图片描述
目的是覆盖原有的变量,源$fmodule=1;

访问:http://127.0.0.1/MetInfo5.1.4/about/index.php?fmodule=7&module=1.txt

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多学点技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值