CTF日记之web题目(入门题目)

8 篇文章 0 订阅

CTF日记

今天的题目是i春秋ctf中的:“百度杯”CTF比赛 2017 二月场 web 爆破-3


在这里插入图片描述如图所示网页,可以看到是一道代码审计的题目:

<?php 
error_reporting(0);
session_start();
require('./flag.php');
if(!isset($_SESSION['nums'])){
  $_SESSION['nums'] = 0;
  $_SESSION['time'] = time();
  $_SESSION['whoami'] = 'ea';
}

if($_SESSION['time']+120<time()){
  session_destroy();
}

$value = $_REQUEST['value'];
$str_rand = range('a', 'z');
$str_rands = $str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)];

if($_SESSION['whoami']==($value[0].$value[1]) && substr(md5($value),5,4)==0){
  $_SESSION['nums']++;
  $_SESSION['whoami'] = $str_rands;
  echo $str_rands;
}

if($_SESSION['nums']>=10){
  echo $flag;
}

show_source(__FILE__);
?>

首先创建一个session,如果session的nums属性存在,则赋值:
$_SESSION[‘nums’] = 0;
$_SESSION[‘time’] = time();将时间戳赋值给time属性
$_SESSION[‘whoami’] = ‘ea’;
超过两分钟(120s)这个session会自动消除。
获取value的参数赋值给value变量;
str_rand是一个从a到z的数组,str_rands是有两个随机从str_rand的字符组成。
如果session的whoami属等于value参数的第一个元素和第二个元素,并且value的md5的值从第5个字符到第9个字符的值为0,那么session的nums属性+1,并且将str_rands的值赋给session的whoami属性;
如果session的nums>10,则输出flag。

输出flag的条件需要nums>10,现在nums=0,只有使nums+10,才可以输出flag,nums+1的条件有两个,一是whoami=value[0].value[1],二是md5的值等于0。
构造条件语句:?value=‘ea’,但是这样不符合第二个条件,考虑到md5
对数组的值为0,所以重新构造payload
?value[]=ea
在这里插入图片描述会输出df,将输出的结果替换成ea,反复十次,就可以得到flag了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈它爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值