- 每日一句:若想成为大佬,必须具有一定的代码审计能力
从今天开始,正式走上代码审计的道路 - 本篇内容:什么是变量覆盖
函数解析
补充
一、什么是变量覆盖
1.代码审计方式
黑盒审计: 没有源代码,直接去测试
白盒审计: 给你源代码,去测试
灰盒审计: 有源代码,先用黑盒测去试,有问题再回头看源代码
从某种角度说,脚本小子与内行渗透人员的主要区别就在于:
是否可以进行白盒审计或者说是否会向这个方向思考
2.定义
指的是可以用我们的传参值替换程序原有的变量值
例如:
<?php
$a = 1;
$a = fg; //在这就完成了覆盖,是不是很简单
echo a; //输出“fg”
?>
3.寻找变量覆盖
可能会有的场景:
~$$使用不当 //常见
~extract()函数使用不当 //常见
~parse_str()函数使用不当 //常见
~import_request_variables()函数使用不当
~开启了全局变量注册等等
二、函数解析
1.extract()
作用:将数组的对应变为变量的对应
//php的数组: 由 key – value 组成
例子:
<?php
$a = "1";
$my_array = array("a" => "Cat","b" => "Dog"); //定义数组
extract($my_array); //启用函数
echo "a = $a; b=$b" //echo "\$a = $a; \$b = $b;";
?>
输出内容:$a = Cat; $b = Dog; //这的变量a被成功覆盖
补充:
php获得GET与POST传参,都会将其转化为数组形式
2.parse_str()
作用:将字符串变成变量
例子:
<?php
parse_str("name=zhangsan&&age=60"); //启用函数
echo $name."<br>";
echo $age;
?>
输出内容:zhangsan和60
3.符号导致(如$$)
不仅函数会造成变量覆盖,有些符号的特殊搭配也会造成变量覆盖
例子:
<?php
$a='b';
$b='c';
echo $$a; $$a => $b => c
?>
输出结果:c
像这种并不是开发傻,只是开发为了实现某些功能,而这么写的
比如,这个漏洞就在dede织梦的某个版本中存在。也是为了实现将传参变为变量,
只是没有进行合适检查过滤
4.一个代码审计小工具
Seay源代码审计系统,感觉还可以,就是规则稍微有点陈旧,可以自己增加
建议:不要依赖工具,没好处,对自己的成功不是太有利
5.php一些代码
exit与die 这样的字眼,一般不能让他触发。若让它执行,下边的语句就不执行了
补充:php的$_REQUEST
在低版本中,接收get与post与cookie的传参
在高于5.2中,不接受cookie
6.危害举例
假设原本代码:
$_a = 'phpinfo();'
-------
很多别的功能模块
-------
//这要输出a的内容展示给用户
因为本来这都是写死的代码,是没有办法进行改动的,所以是认为安全的。
但是一个项目(工程)往往都是一个团队一起开发的,所以,
如果某位开发安全意识不够。他的功能模块出现了:
extract($_GET),且无检查过滤。
最终的结果就是这样:
$_a = 'phpinfo();'
-------
extract($_GET)
-------
eval($a)
这样就出现了变量覆盖漏洞。所以很多漏洞并没有多复杂
没有无缘无故就出现的漏洞,绝大多数漏洞都是传参不可控
三、补充
1.漏洞分类
~事件型漏洞:仅针对某站点
~通用性漏洞:一般针对某一套CMS,或者web容易,往往一打一大片
~白盒审计:拥有源代码找漏洞 = 代码审计
~黑盒测试:入侵 [黑盒测试他是有局限性的]
注意:白盒审计可以更好更彻底的找出漏洞
一般挖掘SRC,想拿通用性,推荐CMS白盒审计
2.CMS的通杀用处
~可以获得CNVD原创漏洞证书
~CMS可以说是关注资产,你可以直接换钱
~CMS通杀可以帮你找到N个漏洞
3.CNVD证书的一些建议
~有没有CNVD证书是一类区分
~但是30个CNVD证书与100个是基本没有区别的
即有没有很重要,有多少相对不是太重要
4.出现危险函数造成漏洞的条件
~危险函数的传参可控
~危害函数执行需要的条件被满足
~危险函数上边代码中的die与exit不能执行
四、总结
- 若想成为大佬,代码审计能力一定要牢固
- CNVD和代码审计能力很重要