当前位置: 首页 > article >正文

ctfshow web入门 爆破 21-28

web21

刚进去就要求我们登录,这里题目给了我们一个字典,就是这个字典为什么他那么多数字中 就一个字母的密码还不明显吗。

 

这里我们使用burp拦包,这里没有发现登录的账号密码,但是有一串可疑的字符串,尝试base64解密

这我们就得到了,我们测试用的账号密码了,这里将包移到Intruder中准备爆破

设置burp,添加payload位置到这里

这里有三个步骤,首先从文件加载我们选择给我们的字典文件,下面添加我们需要添加两个一个是前缀,一个是base64加密,最下面我们把url编码取消掉

 然后我们开始爆破,选择长度不一样的包,我们就获得了flag

web22

域名失效了呃呃呃

web23

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>

这里分析一下代码,他会检查md5值的第二、十五、十八个字符是否相等。如果它们相等,那么它会将这三个字符转换为整数并计算它们的和,然后将这个和除以哈希值的第一个字符,判断这个结果是否等于哈希值的第三十一个字符。

 第一种方法

肯定还是选择爆破

第二种方法

我们写脚本跑出来

import hashlib

text = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for i in text:
    for j in text:
        t = str(i) + str(j)
        md5_text = hashlib.md5(t.encode("utf-8")).hexdigest()
        if md5_text[1:2] == md5_text[14:15] and md5_text[14:15] == md5_text[17:18]:
            print(t)

 

web24

这里他已经告诉种子是什么了,我们直接在本地输出下一次的值就可以了

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:26:39
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
} 

 get传输r=1155388967

 

web25

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 13:56:57
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));
    $rand = intval($r)-intval(mt_rand());
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}else{
    highlight_file(__FILE__);
    echo system('cat /proc/version');
} 

分析一下代码,这里虽然我们无法确定种子值了,但是我们可以获得他随机值,这里随便传入一个值,我们根据值爆破他的种子

爆破工具 初次使用需要用make编译一下

$rand = intval($r)-intval(mt_rand()); 

我们获取的是rand的值,所以我们通过r传入1,那么我们获得的值就要加1,传入0不用改

这里我们先通过f12拦包,获得环境的php版本

因为这里所以rand必须为零所以我们需要传入我们获得到的随机值,因为rand上面赋值的时候已经使用过一次mt_rand,所以我们要的是让第二和第三次的值相加

if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }
<?php
 
mt_srand(3486625448); //这个种子值要看自己的
echo mt_rand().PHP_EOL;
echo mt_rand()+mt_rand();

 

web26

按照他的提示,填写,没有按照成功,怀疑是密码的问题,这里去爆破一下,没有爆破出来,这里去看看别人的,发现是7758521,这个。。太大了吧,根本爆破不出来

web27

 这里有两个一个录取名单,还有一个查询系统,查询系统需要身份证号,但是录取名单里面只有一部分,这里分析一下。

这里一部分是出生年月,这样我们就好爆破了,我的建议还是写脚本方便一点,也可以使用burp

用谷歌拦查询系统的包,然后将身份证中间的进行爆破

解密得到   恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码

登录获得flag

web28

这个题目的目录很不对劲,这里我们爆破目录看看,第一次爆破没有什么东西,这里我们将2.txt去掉,重新爆破,发现flag


http://www.kler.cn/a/8234.html

相关文章:

  • JavaWeb后端开发知识储备1
  • PHP多门店医疗服务系统小程序源码
  • Spring Boot 2.x 和 Druid 多数据源整合 dm
  • 前端:块级元素和行内元素
  • ArkTs简单入门案例:简单的图片切换应用界面
  • AutoCad 无界面开发
  • P1011 [NOIP1998 提高组] 车站
  • Java设计模式 07-装饰者模式
  • 【Spring】2—IOC容器
  • 教你如何搭建物业-后勤管理系统,demo可分享
  • 静态路由的原理和配置(理论详细实验全面)
  • 周记录总结
  • 微积分——Rolle定理的理解(罗尔定理)
  • [Win32] 窗体暗色模式, C++, WinForm, WPF 使用方法, 判断颜色模式, 响应颜色变更消息, 设置标题栏暗色.
  • 初学对象存储OSS---学习笔记
  • CTP_将C++封装为Python可调用接口
  • Excel快捷键
  • CTF杂项提纲
  • leetcode每日一题:数组篇(1/2)
  • 乘法逆元讲解
  • 1004[递归]母牛的故事
  • cmake 常用方法自我总结
  • 通过阿里云函数计算解决ChatGPT API的调用问题
  • 算法训练第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II
  • python教程requests详解
  • entos7系统部署网站项目教程【超详细教程】