代码审计-变量覆盖漏洞

代码审计-变量覆盖漏洞

注:文章仅用于学术交流,不做其它用途

1)实质
变量覆盖漏洞绝大多数是白盒测试发现,黑盒是非常难发现,它得原理很简单,变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,
一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击,直接赋值自定义传参实现某功能如直接登录admin管理员等

2)经常引发变量覆盖漏洞函数
1.$$
$$这种写法称为可变变量,一个可变变量获取了一个普通变量的值作为这个可变变量的变量名
2.extract()函数
作用:将数组中将变量导入到当前的符号表,通俗点说就是将数组得键值对变成变量和值
3.parse_str()函数
作用:解析字符串并注册成变量,在注册变量之前不会验证当前变量是否存在,那么如果在parse_str中可以直接传参的话,也可以覆盖变量
注意:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量
4.import_request_variables()函数
import_request_variables—将 GET/POST/Cookie 变量导入到全局作用域中import_request_variables()函数就是把GET、POST、COOKIE的参数注册成变量,用在register_globals被禁止的时候

3)Session和cookie
1.客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了
2.Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的
3.Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次

4)实战审计
这是一个cms,获取源码进行代码审计,正常逻辑有两种,第一种就是通读代码有点费时,第二种就是从可能存在的漏洞函数查看
在这里插入图片描述
我们可以从index.php出发,查看整个代码得逻辑构造,这里发现有一个包含文件common.php,可以去看看里面信息
在这里插入图片描述
common.php里面存在变量覆盖,代码直接获取传参作为变量,但是存在if语句满足有传参且键名有cfg_和GLOBALS且无COOKIE传参执行exit退出,所以我们可以绕过保证参数名没有cfg_和GLOBALS就可以执行下面代码
在这里插入图片描述
那我们怎么构造传参呢,需要继续审计,既然common.php存在变量覆盖,那么应用这个文件得其它地方寻找一下,发现login.php登录文件调用
这个公共文件,进去发现login.php也引用了check.admin.php 这个文件一看就是对权限的检测
在这里插入图片描述

我们进入check.admin.php查看发现了Session的三个传参,这是我们可以想直接传参Session参数,能不能直接绕过进入后台,但是具体Session的值还不能确定,这时候通过全局搜索Session的参数看能不能找到些线索
在这里插入图片描述
通过对Session每一个参数全局搜索发现仅admin_manager.php文件对groupid做了校验且groupid=1为管理员

在这里插入图片描述
comment.php文件应用了common.php,我们通过传参 interface/comment.php?_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=888
就先去访问comment.php获取权限,然后去访问后台网址,发现不登陆任意账号获取管理员权限
在这里插入图片描述

在这里插入图片描述