2018小训—2017_“百度杯”CTF比赛_十月场_Login

Posted goodswarm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018小训—2017_“百度杯”CTF比赛_十月场_Login相关的知识,希望对你有一定的参考价值。

题目源:  https://www.ichunqiu.com/battalion?q=2725  i春秋上滴题目

小工具:  Burp Suite(抓包神器)、http://base64.xpcha.com/(base64在线解码网站)、https://tool.lu/coderunner/(php在线编写运行网站)

思路点用黄色加粗标记、操作点用绿色加粗标记。

解题的流程:

    1.登录题,输username:admin password:admin没什么软用(前期各种尝试判断可能的题型),检查源码,在源码的最下面有发现,ps:一开始还真没看见藏在最小面的小惊喜,提醒审计的时候要确认你真的看全了。

技术分享图片

     尝试username:test1 password:test1,登录成功!

    2.就一个掀桌子的画面,检查源码,啥也没有。怀疑人生,,应用层的看完了,看看数据层有没有惊喜,查看数据包使用BurpSuite抓包(抓的是掀桌子的那个包,就是刷新掀桌子,截取数据包在BurpSuit里查看response)。

技术分享图片

     注意右边有个show:0返回,这是什么意思呢?状态标记吧,如果提交一个show:1会返回什么呢?

    3.更改数据包的内容,添加一项show: 1;(注意英文字符,冒号后面有一个空格)

技术分享图片

 

     在右边返回了一份源码。

    4.观察分析这份源码,阔以发现

if(isset($requset[‘token‘]))
{
  $login = unserialize(gzuncompress(base64_decode($requset[‘token‘])));
  //login是requset中token对应的字符串,经过解base64、反gzuncompress、反serialize出来的
  $db = new db();
  $row = $db->select(‘user=‘‘.mysql_real_escape_string($login[‘user‘]).‘‘‘);
  if($login[‘user‘] === ‘ichunqiu‘)//产生flag的判断条件,那么login是怎么来的?
  {
    echo $flag;
  }else if($row[‘pass‘] !== $login[‘pass‘]){
    echo ‘unserialize injection!!‘;
  }else{
    echo "(╯‵□′)╯︵┴─┴ ";
  }
}else{
  header(‘Location: index.php?error=1‘);
}

 

      所以我们要将ichunqi依次serialize、gzcompress、base64_encode。在线网站写个php脚本

$key=array("user"=>"ichunqiu");
$a=base64_encode(gzcompress(serialize($key)));
echo $a;

    5.将结果写入抓的数据包,在cookie中添加token=XXXXXXXXXX;(脚本的结果)

技术分享图片

     注意token前面有个空格,结尾有个分号。在右框的最下方阔以看见flag。

以上是关于2018小训—2017_“百度杯”CTF比赛_十月场_Login的主要内容,如果未能解决你的问题,请参考以下文章

“百度杯”CTF比赛 十月场_Login

i春秋——“百度杯”CTF比赛 十月场——Login

“百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)

“百度杯”CTF比赛 十月场 签到题

i春秋——“百度杯”CTF比赛 十月场——GetFlag(md5碰撞文件包含网站绝对路径)

i春秋 百度杯”CTF比赛 十月场 login