web安全入门(第九章-2)变量覆盖

一、什么是变量覆盖

0,代码审计方式
		黑盒审计:	没有源代码,直接去测试
		白盒审计:	给你源代码,给你去测试
		灰盒审计:	有源代码,先用黑盒测试去,有问题在回头看源代码
		
	从某种角度说,脚本小子与内行渗透人员的主要区别就在于:
		是否可以进行白盒审计或者说是否会向这个方向思考(能不能看懂代码)
	
		
1,定义
		指的是可以用我们的传参值替换程序原有的变量值
		例如:
			<?php
				$a = 1;
				$a = fg;		//在这就完成了覆盖,是不是很简单
				echo a;			//输出“fg”
			?>
			
2,寻找变量覆盖
		可能会有的场景:		
			~$$使用不当									//常见
			~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传参,都会将其转化为数组形式
	
	ctf实例:
		<?php
		$flag = "flag(12345)";
		$test = *******;
		$gift = extract($_GET);
		if(isset($gift)){
			$conetnt=trim($test);
			if($gift==$content){
				echo 'flag is'.$flag
			}}
	解析:
		isset是判断gift是否存在
		trim是将变量test值的空格去掉。
		$test在extract上边,就可以通过get传参test=121,将原来test覆盖掉
		还需传参gift,让它符合if语句的条件,
		所以答案:就是?test=123&gift123
	
2,parse_str()
作用:将字符串变成变量
例子:
			<?php
				parse_str("name=sb&&age=60");		//启用函数
				echo $name."<br>";
				echo $age;
			?>

			输出内容:sb和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();'
					------
					很多别的功能模块
					-----
					eval($a)		//这要输出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不能执行

靶场注意

事先声明
session机制:

gourp_id=1		--->    root
gourp_id=2		--->	员工
其他			--->	其他的


admin.php页面  你是不是无法访问,你想访问admin页面

=====================================================

1,登录网站
		服务器给你一个身份,员工  (gourp_id=2)
		
2,发现网站存在变量覆盖漏洞
		你发送给服务器传参	“gourp_id=1”
	
	这时,你在服务器的资料就变成了gourp_id=1
	
	这时,你就可以访问admin.php   
	
	
	
	你怎么知道这个漏洞的呢,你审计了网站源代码
	你发现,comment.php页面是控制session功能的页面,
	同时,这个页面可以通过REQUEST传参来实现“变量覆盖”

=======================================================
代码审计过程

	~查找session机制的代码,
	~找到了session机制的代码
	~如何修改session机制?
	~发现“变量覆盖”漏洞,不需要什么条件    直接传参就行
		为了确保万无一失,你得看看上边的代码有么有exit、die这样的函数
		因为一旦这样的函数执行了  你的传参就没办法执行了,即不能完成变量覆盖了
		
	~没有发现die函数,发现了exit函数,你看看如何不让exit函数的条件执行
		发现只要cookie有传参就不会执行
	~万事俱备,你直接传参告诉服务器,你是root
	~服务器完成变量覆盖   你得身份是root了   即你可以随意访问(修改)这个网站的任何网页了
	
	整个过程,你利用漏洞直接从前台就拿到了管理员的权限,即前台get shell
														
	注意:session机制下边的代码不用看,因为不要管他们
	
	
	a[id]=1		
			
	_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_admin_name]=admin
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值