PHP代码审计理解(一)----Metinfo5.0变量覆盖 0x01 漏洞简介 0x02 漏洞原理 0x03 漏洞修复  从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

  这个漏洞是metinfo5.0变量覆盖漏洞,并且需要结合文件包含。我使用的cms版本是5.3,事实上已经修复了这个漏洞(5.0的cms源码已经找不到了哈),但是我们可以借他来学习理解变量覆盖的原理。并且知道他修复的方式。

这里捋一下漏洞的流程:

about----index.php----->包含文件【../include/module.php】----包含文件【common.inc.php】(这里有一个判断,我们可以输出验证一下),然后在common.inc.php中发现一段代码,可能存在变量覆盖,漏洞的切入点也在这里。

PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

 PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

 PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

0x02 漏洞原理

正常逻辑下:

  module的值输出为show.php,关注module的愿意当然是因为这里有一个文件包含操作,如果被包含的文件可控,我们是不是可以使其包含一些危险文件,如小马,探针等等。

PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

漏洞利用时:

  在这段代码后输出调试看看,可以看到这里可以传入任意参数。在进入判断函数前,$module=113。

 PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

我们回到module.php文件,到下图这段代码,5.3这个版本其实已经修复了,就靠这个$module=' '的操作,将我们之前传入的值清空了,使得漏洞修复。而5.0版本中,是没有这一操作的。我这里先将他注释,假装自己是5.0漏洞版本。

PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

然后我们按照漏洞逻辑,使fmodule=7&module=filename ,我这里先在本地目录创建了一个1.txt,内容是phpinfo。可以看到,此时就利用成功啦!PHP代码审计理解(一)----Metinfo5.0变量覆盖
0x01 漏洞简介
0x02 漏洞原理
0x03 漏洞修复 
从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。

0x03 漏洞修复 

从第二点我们可以知道,在调用$module前,将我们输入的值置空,重新按照函数赋值,就可以避免被利用成功。