ctfshow-web-爆破(25-28)

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');
}
?>

sset()函数

isset在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,因为传递任何其它参数都将造成解析错误。

hexdec()函数

把十六进制数转换为十进制数,dechex()函数是把十进制转换为十六进制。
wp

  • 分析代码,先传参一个r,这里可以直接传0,得出随机数的负值
    
  • 在kali中使用php_mt_seed工具,首先输入make后就可正常使用
    
  • 再通过抓包找到php版本
    
  • 用这个种子写一个php测试脚本
    
  • 得到另一个值后在bp中改包添加Cookie值
    

image
image
image
image
然后用bp抓包修改数据即可

web26

和web21一样,直接爆破密码即可

web27

页面是一个登录系统
image
下载录取名单,还有一个学生信息查询系统,查询方式是输入姓名和身份证号
image
姓名在名单里已经有了,身份证号不完全,因此我们对身份证号进行爆破:

  • 比如我们就爆第一个的:高先伊,621022********5237

  • 使用 burpsuite 抓包:可以看到这里对姓名还进行了编码,但是密码是明文传输的
    image
    设置爆破位置,按理来说 payload 应该为 8 位纯数字,但是这个量很大,爆的话太久了。

    如何缩小我们字典的范围?
    可以注意到,这里的爆破位置恰好是身份证号的出生年月日的地方,年的话我们就从 1990 开始到 2024,月的话就是 00 到 12,日的话就是 01 到 31.对应字典范围:19900001到20241231.
    

image
得到出生年月:19900201
image
查看该请求的响应:image
可以看到

 \u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u78

进行解码:
image
得到学号为:02015237,初始密码为:身份证号,即 621022199002015237
在教务管理系统进行学生登录得到flag
image

web28

去掉2.txt,对目录进行爆破
image
image
image
image

posted @ 2024-10-12 08:57  淡云晨光  阅读(66)  评论(0)    收藏  举报